(all_procs): Add arm7100.
(arm_override_options): Parse arm_select structure to determine selected
architecture and tuning parameters.
(output_option, output_options): New functions.
(arm_canonicalize_comparison): New function.
(arm_gen_movstrqi): Don't add a writeback of the index registers for the
last instructions.
(arm_select_cc_mode): Detect case where mode is carry out of unsigned
arithmetic.
(output_lcomm_directive): Use bss_section (), and use alignment rather than
rounding.
(get_arm_condition_code): Handle CC_Cmode.
(final_prescan_insn): Avoid boundary case where we would occasionally
inline MAX_INSNS_SKIPPED+1 insns. Allow call_insns to be inlined in APCS_32
mode if they are the last insn in the block.
(*addsi3_compare_op[12]): New insns.
(*compare_addsi2_op[01]): New insns.
(*addsi3_carryin, *addsi3_carryin_alt[12]): New insns.
(*cmp_ite1): Use arm_add_operand instead of arm_rhs_operand.
(ASM_OUTPUT_MI_THUNK): Moved here from aout.h. Rewrite to be
independent of the selected assembler, and to use optimal number of
instructions.
(target_cpu_name): Delete.
(TARGET_SWITCHES): Delete "be" and "le".
(TARGET_OPTIONS): Delete "cpu-", add "tune=".
(struct arm_cpu_select): New struct.
(PROCESSOR_DEFAULT, TARGET_CPU_DEFAULT): Define.
(EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Cmode.
(CANONICALIZE_COMPARISON): Define.
Jeff Law [Wed, 1 May 1996 22:41:55 +0000 (16:41 -0600)]
h8300.c (h8300_adjust_insn_length): Adjust the cost of shifts by small constant values.
* h8300/h8300.c (h8300_adjust_insn_length): Adjust the cost of
shifts by small constant values.
* h8300/h8300.md: Refine comments. Remove names from many
patterns which don't need them.
(compare insns): Don't underestimate lengths.
(andqi3 expander): Remove constrains.
(andhi3): Don't underestimate length.
(andsi3): Don't underestimate length. Improve code when upper
or lower half of destination is being cleared.
(indirect_jump_h8300, indirect_jump_h8300h): Simplify.
(shift insns): Remove useless "I" constraint.
Jeff Law [Wed, 1 May 1996 05:49:58 +0000 (23:49 -0600)]
h8300.md (bcs type): Remove "bcs" type attribute and all references.
* h8300/h8300.md (bcs type): Remove "bcs" type attribute and
all references.
(bcs insns): Delete. No longer needed.
(setcc from bitfield): Rewrite to use zero_extract. Provide
QImode, HImode and SImode variants.
Jeff Law [Mon, 29 Apr 1996 05:27:26 +0000 (23:27 -0600)]
h8300.c (names_small): Remove "BAD" postfix from %r7 byte registers.
* h8300/h8300.c (names_small): Remove "BAD" postfix from
%r7 byte registers.
(rtx_equal_function_value_matters): Remove extra declaration.
(output_simode_bld): New function.
* h8300/h8300.h (NO_FUNCTION_CSE): Do define this. Register
pressure makes cse-int function addresses rarely a win.
(reg_class): Remove unnecessary register classes LONG_REGS,
SP_REG, SP_AND_G_REGS.
(REG_CLASS_NAMES): Corresponding changes.
(REG_CLASS_CONTENTS): Corresponding changes.
(REGNO_REG_CLASS): Corresponding changes.
(REG_CLASS_FROM_LETTER): Corresponding chagnes.
(output_simode_bld): Declare.
* h8300/h8300.md: Nuke comments for stuff which has been fixed.
(all patterns): Remove references to register class "a" (SP_REGS)
which no longer exists.
(many patterns): Accept auto-inc auto-dec addresses in more cases.
(zero_extendqisi2): New pattern for the H8/300.
(zero_extendhisi2): Only use zero_extendhisi2_h8300 when not optimizing.
(extendhisi2): Only use extendhisi2_h8300 when not optimizing.
(extendqisi2): New pattern for the H8/300.
(bitfield related patterns): Completely rewrite.
(fancy_bclr, fancy_btst): Deleted. Redundant with new bitfield
patterns.
(addhi3 pattern for h8300): Handle case where we can't make matching
constraints (works around hard to fix reload problem).
(stack_pointer_manip): Delete.
(and not patterns): New combiner patterns.
* sparc/sparc.md (isa attribute): Add sparclet.
(*smacsi3,*smacdi3,*umacdi3): Use match_operand, not match_dup
for third arg.
(*mulsidi3_sp32,const_mulsidi3,*umulsidi3_sp32, const_umulsidi3): Use
smuld,umuld for sparclet.
Richard Kenner [Sat, 20 Apr 1996 12:33:43 +0000 (08:33 -0400)]
(check_for_full_enumeration_handling): Call case_tree2list before checking for...
(check_for_full_enumeration_handling): Call case_tree2list
before checking for case expressions not corresponding to enumerators.
(mark_seen_cases): If SPARSENESS == 2, exploit AVL order.
Else, convert tree to list.
Set xlo to -1 if SPARSENESS == 1 search failed.
(expand_end_case): Avoid calling case_tree2list on list.
Jeff Law [Thu, 18 Apr 1996 19:21:44 +0000 (13:21 -0600)]
h8300.md: Remove "type" attribute from all patterns except those which have varying...
* h8300/h8300.md: Remove "type" attribute from all patterns
except those which have varying length branches. Eliminate
obsolete "type" attributes. Add additional comments about insn
length computation problems and further optimizations. Add
"length" and "cc" attributes to insns without them, fix a few
length computations. Remove patterns which are commented out.
* h8300/h8300.md (zero extension expanders and insns): Simplify,
fix various length problems, provide optimized versions for the
h8300 and h8300h.
(sign extension expanders and insns): Likewise. Make them
nearly identical to zero_extension patterns and insns.
(handle_cp_pragma): New function, with decl, doing the cc1plus pragmas.
(handle_cp_pragma): New function, with decl, doing the cc1plus
pragmas.
(check_newline): Put the vtable/unit/implementation/interface pragma
code into handle_cp_pragma, replacing it with a call.
(handle_sysv_pragma): Give int return type, and take FINPUT and TOKEN
args. Get the next token after handling the pragma token.
Jeff Law [Tue, 16 Apr 1996 22:08:32 +0000 (16:08 -0600)]
h8300.md (andhi3): If 2nd operand is a CONST_INT that meets the 'J' constraint...
* h8300/h8300.md (andhi3): If 2nd operand is a CONST_INT that
meets the 'J' constraint, then only two bytes are needed for
this insn. Improve code generated for the h8300h when both
operands are registers.
(iorhi3, xorhi3): Likewise. Rework to be nearly identical to andhi3.
(andsi3): If 2nd operand is a CONST_INT that meets the 'J'
constraint, then only two bytes are need for this insn.
Improve code generated for the h8300h regardless of the
type of the 2nd operand. Make this pattern work on the h8300 too.
(iorsi3, xorsi3): Likewise. Rework to be nearly identical to andsi3.
(iorqi3_internal): Make this pattern look more like andqi3_internal.
(one_cmplhi2, one_cmplsi2): Fix length computation for H8300H.
Richard Kenner [Tue, 16 Apr 1996 20:57:31 +0000 (16:57 -0400)]
Greatly simplify the run-time trampoline code:
(TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE): Delete define.
(TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Changed.
(TRAMPOLINE_ALIGN): No point aligning to cache line.
(FINISH_INIT_TRAMPOLINE): New define.