Jim Wilson [Thu, 1 Oct 1992 19:17:02 +0000 (12:17 -0700)]
(SECONDARY_INPUT_RELOAD_CLASS): Also need a temp reg when loading HImode and QImode values from memory to FP_REGS.
(SECONDARY_INPUT_RELOAD_CLASS): Also need a temp reg
when loading HImode and QImode values from memory to FP_REGS.
(SECONDARY_OUTPUT_RELOAD_CLASS): New macro. Define this to handle
HImode and QImode stores from FP_REGS to memory similar to above.
Jeff Law [Thu, 1 Oct 1992 17:06:29 +0000 (11:06 -0600)]
pa.md (add high part and dp register): Split into two patterns, one for normal code, one for kernels.
* pa.md (add high part and dp register): Split into two patterns,
one for normal code, one for kernels. Kernel version only allows
"r1" as the destination register.
Jeff Law [Thu, 1 Oct 1992 17:05:02 +0000 (11:05 -0600)]
pa.h (LEGITIMIZE_ADDRESS, [...]): Emit a sequence which will cause "addil" instructions to be emitted instead of...
* pa.h (LEGITIMIZE_ADDRESS, SYMBOL_REF case): Emit a sequence
which will cause "addil" instructions to be emitted instead of
"ldil; add" sequences.
* pa.h (TARGET_KERNEL): New switch "-mkernel" which forces gcc to
avoid "ldil; add" sequences with %r27 and instead generate "addil"
sequences. This avoids a HPUX linker bug when compiling kernels.
Jeff Law [Thu, 1 Oct 1992 17:03:46 +0000 (11:03 -0600)]
pa.c (emit_move_sequence): When making a reference to the data space before reload...
* pa.c (emit_move_sequence): When making a reference to the data
space before reload, emit an insn sequence which is much more
likely to create "addil" instructions rather than "ldil; add"
sequences. Doing so greatly reduces the chance of running into a
HPUX linker bug when compiling kernels.
Jim Wilson [Mon, 28 Sep 1992 21:25:53 +0000 (14:25 -0700)]
(copy_loop_body...
(copy_loop_body, JUMP_INSN case): When invert jump
insn, must first construct new insn before trying to invert it,
so that validate_change will work properly.
Jim Wilson [Mon, 28 Sep 1992 21:18:17 +0000 (14:18 -0700)]
(copy_loop_body, JUMP_INSN case): When setting JUMP_LABEL field, verify that what we think is a label actually is.
(copy_loop_body, JUMP_INSN case): When setting
JUMP_LABEL field, verify that what we think is a label actually
is. If it isn't then map the old JUMP_LABEL to find the new one.
Richard Kenner [Sun, 27 Sep 1992 22:18:33 +0000 (18:18 -0400)]
(assign_parms): If PROMOTE_FUNCTION_ARGS is defined, see if the incoming register should be used in a wider mode.
(assign_parms): If PROMOTE_FUNCTION_ARGS is defined, see if the incoming
register should be used in a wider mode.
(expand_function_start): Likewise for return value if PROMOTE_FUNCTION_RETURN
is defined.
Richard Kenner [Sun, 27 Sep 1992 17:05:40 +0000 (13:05 -0400)]
(subsi3): Don't bother calling negate_rtx for constant; we shouldn't be called with a constant.
(subsi3): Don't bother calling negate_rtx for constant; we shouldn't be
called with a constant.
(maskir patterns): Don't mention an operand before it is used; use operand
number 1 for operand with '0' constraint.
(allocate_stack): Use reg_or_short_operand for predicate of allocation amount;
use negate_rtx and always make a PLUS.
(zero_extendhisi2): Rewrite to work if op0 == op1. Use
gen_lowpart in preparation code.
(extendqisi2, extendhisi2): Likewise.
(extendqihi2): Expand.
(restorehi): Rewrite for correctness, efficiency, and
clarity. Avoid generating insns involving truncate. Generate
needed pseudos in preparation statements.
(storehi): Likewise.
(storeinthi): Likewise.
(movhi): Call gen_storehi, gen_restorehi, gen_storeinthi according
their new definitions. Use force_reg to put address in register.
Jim Wilson [Fri, 25 Sep 1992 05:39:45 +0000 (22:39 -0700)]
(movdi...
(movdi, movti, movdf, movtf): Make store zero to memory
a separate case, only accept offsettable memory addresses, and call
adj_offsettable_operand to calculate subword addresses.
(ldo/ldil SImode and HImode recognizers): Use "const_int_operand" for operand 1 and simplify final condition.
(ldo/ldil SImode and HImode recognizers): Use "const_int_operand"
for operand 1 and simplify final condition. Remove `n' constraint.
(depi SImode and HImode recognizers): Remove `n' constraint.
(plus:SI ... high ... splitter): Don't overwrite input, go via
clobber operand instead.
(many patterns): Replace `in' constraint with just `i'.
(movstrsi): Don't do (clobber (match_scratch)), use explicit
pseudos instead, generated in preparation C code. Don't call
force_not_mem for operand 2.
(movstrsi recognizer): Add `&' to operand 3
(andsi3): Fix typo.
(iorsi3): Fix typo.
(load-shift-16): New optimizer.
(load-shift optimizers): Set "type" attr.
Richard Kenner [Thu, 24 Sep 1992 10:30:43 +0000 (06:30 -0400)]
(forbidden_inc_dec_class, in_inc_dec): New variables.
(regclass): Don't alloca the costs twice.
Initialize forbidden_inc_dec_class.
For regs that have inc-dec, ignore forbidden classes.
(record_address_regs): Update in_inc_dec.