Test for _AM29K and _IBMR2, not ___AM29K__ and ___IBMR2__.
(arm umul_ppmm): New definition.
(clipper umul_ppmm, smul_ppmm, __umulsidi3): New definitions.
(hppa count_leading_zeros): New definition.
(i960 umul_ppmm, __umulsidi3): New definitions.
(mc68000 umul_ppmm): Use %. before size suffixes.
(mc88110 umul_ppmm, udiv_qrnnd): Rewrite.
(mc88000): Get UMUL_TIME and UDIV_TIME right.
(mips): Get UMUL_TIME right.
(ns32000 umul_ppmm): New definition.
(ns32000 udiv_qrnnd): Rename from bogus div_qrnnd, rewrite.
(powerpc umul_ppmm, smul_ppmm): New definitions.
(_IBMR2/powerpc add_ssaaaa, sub_ddmmss): Improve.
(pyr umul_ppmm): Fix typo.
(sparc add_ssaaaa, sub_ddmmss): Match constant 0 for all inputs.
(vax sdiv_qrnnd): New definition.
This patch makes selectors in the Objective-C language be pointers to a struct { void *sel_id...
This patch makes selectors in the Objective-C language be pointers
to a struct { void *sel_id, char *sel_types }, where the sel_types
element is the type encoding of the method arguments.
objc-act.c (get_proto_encoding, [...]): New fucnctions.
* objc-act.c (get_proto_encoding, build_typed_selector_reference):
New fucnctions. (UTAG_PROTOCOL): New define.
(objc_selector_template, flag_typed_selectors): New variables.
(objc_init): set flag_typed_selectors if -fgnu-runtime.
(synth_module_prologue): Change declaration of
_OBJC_SELECTOR_TABLE when flag_typed_selectors is non-null.
(build_module_descriptor): Make sure the generated constructor
function is declared public.
(build_selector): Only cast to SEL when not doing typed selectors.
(build_selector_translation_table): Rewrite initialization.
(build_tmp_function_decl): Make up new name when called, since it
may now be called multiple times.
(hack_method_prototype): Use init_function_start to reinit args
machinery. Also set current_function_decl before calling
assign_parms.
(generate_protocols): Don't generate encoding twice.
(build_selector_template): New function.
(build_method_list_template): Generate (void*)0 as first element,
not (int)0.
(build_message_expr): move the call to build_selector_reference
towards the end, where we have determined the function prototype.
Richard Kenner [Wed, 29 Jun 1994 20:12:40 +0000 (16:12 -0400)]
(FRAME_POINTER_REGNUM): Now register 63.
(HARD_FRAME_POINTER_REGNUM): New macro.
(CONDITIONAL_REGISTER_USAGE, REG_CLASS_CONTENTS, REGNO_REG_CLASS):
Show register 63 is not an FP register.
(REGHNO_OK_FOR_BASE_P, REG_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
(ALPHA_ROUND): New macro.
(STARTING_FRAME_OFFSET, ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET):
Modify to reflect save area between outgoing args and local vars.
Richard Kenner [Wed, 29 Jun 1994 20:02:13 +0000 (16:02 -0400)]
(reload): Can't eliminate if frame pointer needed and TO is stack pointer.
Spill HARD_FRAME_POINTER_REGNUM if not FRAME_POINTER_REGNUM and frame pointer
is needed.
(spill_hard_reg): If CANT_ELIMINATE, set regs_ever_live; no longer done by
callers.
Richard Kenner [Wed, 29 Jun 1994 20:01:31 +0000 (16:01 -0400)]
(global_alloc): Make a more accurate attempt to see if the frame pointer will be used.
(global_alloc): Make a more accurate attempt to see if the frame pointer will
be used.
If it is, show HARD_FRAME_POINTER_REGNUM used if its not the same as
FRAME_POINTER_REGNUM.
(expand_mult): Generalize to call synth_mult also for OP1 - 1.
(ceil_log2): New function.
(choose_multiplier): New function.
(invert_mod2n): New function.
(expand_mult_highpart_adjust): New function.
(expand_mult_highpart): New function.
(EXACT_POWER_OF_2_OR_ZERO_P): New macro.
(expand_divmod): Almost completely rewritten.
(expand_shift): Don't truncate immediate shift count, it doesn't work
for types smaller than int.
Jim Wilson [Tue, 28 Jun 1994 19:32:11 +0000 (12:32 -0700)]
(cpu_type, sparc_cpu_type): Rename to arch_type and sparc_arch_type.
(cpu_type, sparc_cpu_type): Rename to arch_type and
sparc_arch_type.
(CPP_SPEC): Handle -msupersparc.
(MASK_SUPERSPARC, TARGET_SUPERSPARC): New macros.
(TARGET_SWITCHES): Add -msupersparc and -mcypress.
(ADJUST_COST): New macro.
Jim Wilson [Tue, 28 Jun 1994 19:31:14 +0000 (12:31 -0700)]
(cpu attribute): Rename to arch attribute.
(cpu attribute): Rename to arch attribute. Add a new
cpu attribute. Fix all users.
(type attribute): Add ialu, shift, imul, fpdivs, and fpdivd.
Delete fpdiv.
(function units): Add Cypress and Supersparc versions of each.
(addsi3, subsi3, andsi3, iorsi3, xorsi3): Add ialu type attribute.
(mulsi3): Add imul type attribute.
(divtf3, divdf3): Use fpdivd not fpdiv type attribute.
(divsf3); Use fpdivs not fpdiv type attribute.
(ashlsi3, ashrsi3, lshrsi3): Add shift type attribute.
Richard Kenner [Fri, 24 Jun 1994 22:29:54 +0000 (18:29 -0400)]
(zero_extract patterns): Don't allow constants in the first operand of...
(zero_extract patterns): Don't allow constants in the first operand of
ZERO_EXTRACT since the recognizer function forces them to match the
mode of the match_operand.
Richard Kenner [Fri, 24 Jun 1994 21:46:59 +0000 (17:46 -0400)]
(decl_constant_value): Test for const and not iterator.
(default_conversion, digest_init): Remove redundant checks before calling
decl_constant_value.
(convert_for_assignment): See if RHS has a constant value.
Richard Kenner [Thu, 23 Jun 1994 21:45:46 +0000 (17:45 -0400)]
(output_move_double): If the dest is register pair and both regs are used in src address...
(output_move_double): If the dest is register pair and both regs are
used in src address, use ADDR to compute src address, not ADDD, which
throws away scaled index.
Richard Earnshaw [Thu, 23 Jun 1994 16:02:41 +0000 (16:02 +0000)]
include tree.h
include tree.h
(const_ok_for_arm): Add fast return for 0 or just a single non-zero bit.
(const_ok_for_op): New function.
(arm_split_constant): New function.
(arm_rtx_costs): New function.
(reg_or_int_operand): New function.
(shift_operator): Accept ROTATERT.
(multi_register_push): New function.
(shift_op): Don't abort if a constant is outside the acceptable range, but
convert the whole shift expression into something legal. If the shift is
zero, then return NULL.
(output_return_instruction): Output a call to abort if the function is
volatile.
(arm_volatile_func): New function.
(get_prologue_size): Remove all adjustments for insns that are now output as
rtx.
(output_func_prologue): Remove all code that outputs instructions, just print
a few comments.
(output_func_epilogue): Output a call to abort if a volatile function tries
to return.
(emit_multi_reg_push): New function.
(arm_expand_prologue): New function. Don't bother to push call-saved regs
if we will never return.
(arm_print_operand, case 'S'): If shift_op returns NULL, then no shift is
required.
Richard Earnshaw [Thu, 23 Jun 1994 16:02:41 +0000 (16:02 +0000)]
(TARGET_WHEN_DEBUGGING): Delete.
(MODES_TIEABLE_P): All modes of the same class are tieable.
(CONST_OK_FOR_LETTER_P): Add 'M' for constants valid in a shift.
(FUNCTION_PROFILER): Don't call arm_increase_location.
(INITIAL_ELIMINATION_OFFSET): Call saved regs are no-longer pushed for
functions that don't return.
(LEGITIMIZE_ADDRESS): Push constants that will never be legitimate -- symbols
and labels -- into registers. Handle DImode better.
(DEFAULT_SIGNED_CHAR): Use unsigned unless already defined.
(RTX_COSTS): Call arm_rtx_costs.
(ADDRESS_COST): Since most operations have the same rtx cost, make the
more complex addresses cheaper.
(PREDICATE_CODES): Add ROTATERT to shift_operator; and new predicates for
reg_or_int_operand and multi_register_push.
(DBX_CONTIN_LENGTH): Only define if not already done.
(PRINT_OPERAND_ADDRESS): Let arm_print operand output the ", " for shifts.
Richard Earnshaw [Thu, 23 Jun 1994 16:02:41 +0000 (16:02 +0000)]
Delete some dead code.
(STARTFILE_SPEC): Look in the correct places for start files.
(LIB_SPEC): Define.
(LINK_SPEC): Define.
(TARGET_WHEN_DEBUGGING): Delete.
(DEFAULT_SIGNED_CHAR): Set to unsigned.
(SIZE_TYPE, PTRDIFF_TYPE, TARGET_EDOM): Define.