Commit 6a4a5d95 by John Wehle Committed by John Wehle

i386.md (floatsisf2, [...]): Remove unused register constraints from the splitters.

	* i386.md (floatsisf2, floatdisf2, floatsidf2, floatdidf2,
	floatsixf2, floatdixf2, movsicc, movhicc, movsfcc, movdfcc,
	movxfcc, movdicc): Remove unused register constraints from
	the splitters.
	* i386.md (fixuns_truncsfsi2, fixuns_truncdfsi2,
	fixuns_truncxfsi2): Delete.
	* reg-stack.c (delete_insn_for_stacker): Ensure that
	the only side effects of a PARALLEL are clobbers.
	(subst_stack_regs): Handle subst_stack_regs_pat deleting
	a PARALLEL.
	* i386.md (extendsfdf2, extenddfxf2,
	extendsfxf2): Rewrite using a splitter.
	* i386.c (output_op_from_reg): Remove.
	* i386.h: Likewise.

From-SVN: r26338
parent d6470dd0
Sat Apr 10 20:09:55 EDT 1999 John Wehle (john@feith.com)
* i386.md (floatsisf2, floatdisf2, floatsidf2, floatdidf2,
floatsixf2, floatdixf2, movsicc, movhicc, movsfcc, movdfcc,
movxfcc, movdicc): Remove unused register constraints from
the splitters.
* i386.md (fixuns_truncsfsi2, fixuns_truncdfsi2,
fixuns_truncxfsi2): Delete.
* reg-stack.c (delete_insn_for_stacker): Ensure that
the only side effects of a PARALLEL are clobbers.
(subst_stack_regs): Handle subst_stack_regs_pat deleting
a PARALLEL.
* i386.md (extendsfdf2, extenddfxf2,
extendsfxf2): Rewrite using a splitter.
* i386.c (output_op_from_reg): Remove.
* i386.h: Likewise.
Sat Apr 10 13:09:18 1999 Nick Clifton <nickc@cygnus.com>
* config/arm/arm.c (di_operand): Allow SUBREGs as well.
......
......@@ -854,54 +854,6 @@ function_arg_partial_nregs (cum, mode, type, named)
return 0;
}
/* Output an insn whose source is a 386 integer register. SRC is the
rtx for the register, and TEMPLATE is the op-code template. SRC may
be either SImode or DImode.
The template will be output with operands[0] as SRC, and operands[1]
as a pointer to the top of the 386 stack. So a call from floatsidf2
would look like this:
output_op_from_reg (operands[1], AS1 (fild%z0,%1));
where %z0 corresponds to the caller's operands[1], and is used to
emit the proper size suffix.
??? Extend this to handle HImode - a 387 can load and store HImode
values directly. */
void
output_op_from_reg (src, template)
rtx src;
char *template;
{
rtx xops[4];
int size = GET_MODE_SIZE (GET_MODE (src));
xops[0] = src;
xops[1] = AT_SP (Pmode);
xops[2] = GEN_INT (size);
xops[3] = stack_pointer_rtx;
if (size > UNITS_PER_WORD)
{
rtx high;
if (size > 2 * UNITS_PER_WORD)
{
high = gen_rtx_REG (SImode, REGNO (src) + 2);
output_asm_insn (AS1 (push%L0,%0), &high);
}
high = gen_rtx_REG (SImode, REGNO (src) + 1);
output_asm_insn (AS1 (push%L0,%0), &high);
}
output_asm_insn (AS1 (push%L0,%0), &src);
output_asm_insn (template, xops);
output_asm_insn (AS2 (add%L3,%2,%3), xops);
}
/* Output an insn to pop an value from the 387 top-of-stack to 386
register DEST. The 387 register stack is popped if DIES is true. If
the mode of DEST is an integer mode, a `fist' integer store is done,
......
......@@ -2713,7 +2713,6 @@ extern void function_arg_advance ();
extern struct rtx_def *function_arg ();
extern int function_arg_partial_nregs ();
extern char *output_strlen_unroll ();
extern void output_op_from_reg ();
extern void output_to_reg ();
extern char *singlemove_string ();
extern char *output_move_double ();
......
......@@ -1405,6 +1405,14 @@ static void
delete_insn_for_stacker (insn)
rtx insn;
{
int i;
/* Ensure that the side effects were clobbers when deleting a PARALLEL. */
if (GET_CODE (PATTERN (insn)) == PARALLEL)
for (i = 1; i < XVECLEN (PATTERN (insn), 0); i++)
if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) != CLOBBER)
abort ();
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
......@@ -2478,8 +2486,14 @@ subst_stack_regs (insn, regstack)
for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
{
if (stack_regs_mentioned_p (XVECEXP (PATTERN (insn), 0, i)))
subst_stack_regs_pat (insn, regstack,
XVECEXP (PATTERN (insn), 0, i));
{
subst_stack_regs_pat (insn, regstack,
XVECEXP (PATTERN (insn), 0, i));
/* subst_stack_regs_pat may have deleted a no-op insn. */
if (GET_CODE (insn) == NOTE)
break;
}
}
else
subst_stack_regs_pat (insn, regstack, PATTERN (insn));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment