(matchers for {store-flag, not-store-flag, neg-store-flag}): Output
if-false instruction first before if-true instruction.
(matcher for (AND store-flag x)): Only match if reversible_cc_register.
(matcher for (IF-THEN-ELSE reg (NOT reg))): Likewise.
From-SVN: r7741
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.
From-SVN: r7537
(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.
From-SVN: r7536
(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.
From-SVN: r7535
Rewrite as expand patterns.
(rotlsi3): New expand.
(matchers, and split patterns for above): New.
(all patterns with shifts): Let arm_print_operand output the ", " before a
shift if it is needed.
(zero_extendqihi2): Delete.
(zero_extendqisi2): Expand to (and ...) if not memory.
(movsi): Call arm_split_constant to generate a constant.
(movqi): Only force a MEM into a register if not reloading.
(movsf, movdf): If loading a non-immediate floating point value, or loading
and floating point immediate into integer regs, push the constant straight
into the pool.
(movdf): Get rid of the scratch register.
(reload_outdf): Rewrite to expand to the two required insns.
(matcher for movdf): Remove alternative that used scratch register for
storing.
(movxf): rewrite as expand.
(matcher for movxf): Recognize even when XFmode code is disabled, so that
prologue insns can be generated.
(Matcher for reversed conditional jump): Don't match if the mode of the
CC register is not reversible.
(prologue): New expand.
(matcher for multi_register_push insn): New.
From-SVN: r7533
(arm_reload_out_hi): Rewrite. Add support for processors running in
big-endian mode.
(fp_immediate_constant): Fix typo in argument declaration.
From-SVN: r7449
(storeinthi): Rework to generate better code, add big-endian support.
(movhi): Add support for processors running in big-endian mode.
(movhi_bigend): New expansion pattern.
(matcher for movhi): Remove incorrect alternative for storing HImode to
memory. Only match when little endian.
(matcher for big-endian movhi): New pattern.
(matchers/peepholes for extended pre/post increment HImode loads): Only
match when little-endian.
(matcher for operating on adjacent memory locations): Load operation into
arith operands.
(peepholes for extended pre-increment byte loads): New patterns.
From-SVN: r7448
(FUNCTION_PROFILER, TRAMPOLINE_TEMPLATE, ASM_FILE_START,
ASM_OUTPUT_REG_{PUSH,POP}, PRINT_OPERAND_ADDRESS): Output register
prefix before any explicit register name.
(ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT,
ASM_OUTPUT_COMMON): Output the target dependent comment char.
(ASM_FILE_START): Output register alias for r10.
(REGISTER_NAMES): Output "r9" now for r9, not "rfp".
(ADDITIONAL_REGISTER_NAMES): New macro.
From-SVN: r7444
(all patterns): Update instruction generation to reflect new meanings of
constraints 'K' and 'L'. Use output type 'B' to generate an inverted
constant. Use output type 'N' to generate a negated floating point
constant.
From-SVN: r7436
output_func_{prologue,epilogue}): Change declarations from
output_{prologue,epilogue}.
(arm_output_llc, arithmetic_instr, output_arithmetic_with_immediate_mulitply,
output_arithmetic_with_shift, shift_instr): Delete function definition.
(ASM_OUTPUT_OPCODE): Delete.
(PRINT_OPERAND): Call arm_print_operand, instead of doing it directly.
(ARM_COMMENT_CHAR): New macro.
(ARM_REG_PREFIX): New macro.
(ARM_SIGN_EXTEND): New macro.
(PRINT_OPERAND_ADDRESS): Delete variable 'shift'. Change type of
variable 'offset' to HOST_WIDE_INT. Use arm_print_operand to handle
shifts in addresses.
From-SVN: r7426
(all output patterns): Use new capabilities of arm_print_operand to
simplify output sequences. Mark position of condition code with '%?'.
From-SVN: r7425
(const_pool_offset): Correct typo.
(fp_const_from_val): New function.
(all instruction generators): mark position where conditionalization
should be with '%?'.
(output_move_double): Use new '%m' output type to simplify load/store
multiple generation.
(shift_instr): Delete.
(shift_op): New function.
(output_arithmetic): Delete.
(output_arithmetic_with_shift): Delete.
(output_arithmetic_with_immediate_multiply): Delete.
(output_shifted_move): Delete.
(output_shift_compare): Delete.
(arm_print_operand): New function.
From-SVN: r7423
(FUNCTION_{PROLOGUE,EPILOGUE}): Call output_func_{prologue,epilogue}.
(INITIAL_ELIMINATION_OFFSET): Inspect all registers, but only add those that
are not in call_used_regs.
(GO_IF_LEGITIMATE_INDEX): Change type of variable 'range' to HOST_WIDE_INT;
change type of variable 'code' to enum rtx_code.
(arm_output_asm_insn): Delete declaration.
(EXTRA_CONSTAINT): New constraint 'R' to match a constant pool label.
Make constraint 'S' never match when not optimizing.
(CONSTANT_ADDRESS_P): Only accept symbols marked with SYMBOL_REF_FLAG when
optimizing.
(ENCODE_SECTION_INFO): Don't mark any symbols when not optimizing.
(ASM_OUTPUT_REG_{PUSH,POP}: Don't call arm_increase_location.
(ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
From-SVN: r7417
#include <string.h>.
Declare some prototypes.
(output_memory_reference_mode): Change type to enum machine_mode.
(arm_const_nmoves): Delete.
(adjacent_mem_locations, {load,store}_multiple_operation): Explicitly
declare to return int.
({load,store}_multiple_operation): Change type of 'count', 'base' and 'i' to
HOST_WIDE_INT.
(output_add_immediate): Change type of 'n' to HOST_WIDE_INT.
(output_multi_immediate): Change type of Argument 'n' to HOST_WIDE_INT, if
wider than 32 bits, mask out the high bits.
(output_arithmetic_with_immediate_multiply): Change type of 'shift'
to HOST_WIDE_INT.
(output_func_{prologue,epilogue}): Renamed from output_{prologue,epilogue}.
Check all registers to see if they are live, but only push/pop them if they
are not in call_used_regs.
(const_pool_offset): New function.
(get_prologue_size): New function.
(output_func_prologue): Eliminate variable code_size.
(output_func_epilogue): Only call arm_increase_location when optimizing; also
add the size of the function just compiled, and the size of the prologue.
(arm_output_asm_insn): Delete. All callers changed to use output_asm_insn.
(arm_output_llc): Delete.
(output_load_symbol): New first parameter 'insn'. Rewrite so that assembler
can detect whether we made a mistake.
From-SVN: r7416
(movhi): Handle reloads better.
(restorehi): Delete. Also tidy up commented out code.
(call): Make this a define_expand.
(matcher for above): only accept MEM(reg)
(call_value): Handle as for (call).
From-SVN: r5810
output_mov_long_double_fpu_from_arm,
output_mov_long_double_arm_from_fpu, and
output_mov_long_double_arm_from_arm.
(FLOAT_WORDS_BIG_ENDIAN): Define to 1.
(SECONDARY_OUTPUT_RELOAD_CLASS): return GENERAL_REGS for HImode outputs.
(ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): output
floating point constants as hex, make order correct given definition
of FLOAT_WORDS_BIG_ENDIAN.
(PRINT_OPERAND): Delete redundant code when handling CONST_DOUBLE.
From-SVN: r5809
(output_prologue): Sanity check the finite state machine.
(output_epilogue): Delete unused variable.
(final_prescan_insn): Always clear arm_target_insn when FSM goes to
state 0.
From-SVN: r5711
(OPTIMIZATION_OPTIONS): Don't set flag_omit_frame_pointer, since
this inhibits debugging.
(ASM_OUTPUT_INTERNAL_LABEL): Always clear arm_target_insn when FSM
goes to state 0.
From-SVN: r5710