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> Sat Apr 10 13:09:18 1999 Nick Clifton <nickc@cygnus.com>
* config/arm/arm.c (di_operand): Allow SUBREGs as well. * config/arm/arm.c (di_operand): Allow SUBREGs as well.
......
...@@ -854,54 +854,6 @@ function_arg_partial_nregs (cum, mode, type, named) ...@@ -854,54 +854,6 @@ function_arg_partial_nregs (cum, mode, type, named)
return 0; 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 /* 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 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, the mode of DEST is an integer mode, a `fist' integer store is done,
......
...@@ -2713,7 +2713,6 @@ extern void function_arg_advance (); ...@@ -2713,7 +2713,6 @@ extern void function_arg_advance ();
extern struct rtx_def *function_arg (); extern struct rtx_def *function_arg ();
extern int function_arg_partial_nregs (); extern int function_arg_partial_nregs ();
extern char *output_strlen_unroll (); extern char *output_strlen_unroll ();
extern void output_op_from_reg ();
extern void output_to_reg (); extern void output_to_reg ();
extern char *singlemove_string (); extern char *singlemove_string ();
extern char *output_move_double (); extern char *output_move_double ();
......
...@@ -1405,6 +1405,14 @@ static void ...@@ -1405,6 +1405,14 @@ static void
delete_insn_for_stacker (insn) delete_insn_for_stacker (insn)
rtx 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); PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0; NOTE_SOURCE_FILE (insn) = 0;
...@@ -2478,8 +2486,14 @@ subst_stack_regs (insn, regstack) ...@@ -2478,8 +2486,14 @@ subst_stack_regs (insn, regstack)
for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++) for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
{ {
if (stack_regs_mentioned_p (XVECEXP (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 else
subst_stack_regs_pat (insn, regstack, PATTERN (insn)); 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