* pa.md (uncond_branch): New type attribute. Explicitly disallow
uncond_branch in most delay slots.
(in_call_delay attribute): New test for delay slot of call insns.
Allow uncond_branches in the delay slot if TARGET_JUMP_IN_DELAY.
(define_delay for calls, millicode calls, branches, returns, etc):
Broken up into two define delays. One for calls and millicode
calls, a second for branches, returns, etc.
(millicode insns): Pass the current insn down to
output_{mul,div,mod}_insn.
(jump insn): Use "uncond_branch" type attribute. Length of this
insn varies if it is in the delay slot of a call.
(call_internal_symref): Use output_call.
(call_value_internal_symref): Likewise.
(call_internal_reg): Use %r syntax instead of just register numbers.
(call_value_internal_reg): Likewise.
From-SVN: r4916
* pa.c (output_call): New function to output a function call or
millicode call, possibly with a jump in the delay slot.
(output_mul_insn): Accept additional argument, use output_call.
(output_div_insn): Likewise.
(output_mod_insn): Likewise.
(jump_in_call_delay): New function to determine if the given
JUMP_INSN is in the delay slot of a call or millicode call.
From-SVN: r4915
* pa.h (TARGET_JUMP_IN_DELAY): New target flag to allow/disallow
jump instructions in call delay slots.
(TARGET_SWITCHES): Add -mjump-in-delay and -mno-jump-in-delay.
Provide -mno alternatives for most options.
(output_call): Declare.
From-SVN: r4914
Only set highest_first if first reg
of dest overlaps memory src address. Otherwise, if addreg1 set and
is same as second reg of dest, suppress trailing decrement.
From-SVN: r4907
(convert_arguments): Don't warn about sign change
for an INTEGER_CST inside NOP_EXPR, if value not fits new type.
Delete the code to check for VAL having enumeration type.
From-SVN: r4906
(HARD_REG_ELT_TYPE): New unsigned type to
avoid signed arithmetic overflow.
(HARD_REG_SET): Define as HARD_REG_ELT_TYPE, or array thereof.
(HARD_CONST): Always cast to HARD_REG_ELT_TYPE.
(*_HARD_REG_*): Use unsigned HARD_CONST and HARD_REG_ELT_TYPE
types instead of assuming HOST_WIDE_INT.
From-SVN: r4901
* pa.c (pa_adjust_insn_length): dbra and movb insns which have
their output in a FP register do not need adjustment.
(output_cbranch, output_bb): Handle conditional jump to the
following instruction.
(output_dbra): New function extracted from dbra pattern.
(output_movb): New function.
(eq_neq_comparison_operator): New function.
(movb_comparison_operator): New function.
From-SVN: r4888
(simple_if): Save stmt_count, and print empty body
warning here.
(if_prefix): Don't save stmt_count here.
(stmt): Don't print empty body warning here.
From-SVN: r4880
* pa.c (pa_adjust_insn_length): Rewrite so that it only adjusts
insns which really need adjustment.
(output_cbranch): Rework so that output templates are simpler.
Use shorter sequence for long backwards conditional branches with
a filled delay slot that is nullified. More agressively use "skip"
instructions. More agressively nullify the delay slot if nothing
useful could be placed there.
(output_bb): Likewise.
(forward_branch_p): New function.
From-SVN: r4875
* pa.md (conditional branches): Use the full displacement range
for the branch target. Update length computations to match current
reality.
(branch on bit patterns): Likewise.
(decrement_and_branch_until_zero): Re-enable pattern. Rewrite to
be simpler and more efficient. Also handle case where loop counter
is in a FP register.
From-SVN: r4874