diff options
author | James Van Artsdalen <jrv@gnu.org> | 1993-10-05 05:52:39 +0000 |
---|---|---|
committer | James Van Artsdalen <jrv@gnu.org> | 1993-10-05 05:52:39 +0000 |
commit | 2f17722aa9d902a552925b66b3638b5e0d153afc (patch) | |
tree | 5832234291169d20959c2b8e180b00c30be922f2 /gcc/config | |
parent | 303872755c1358d1a120c05959a046505d1176c4 (diff) | |
download | gcc-2f17722aa9d902a552925b66b3638b5e0d153afc.zip gcc-2f17722aa9d902a552925b66b3638b5e0d153afc.tar.gz gcc-2f17722aa9d902a552925b66b3638b5e0d153afc.tar.bz2 |
(pushxf,movxf,extenddfxf2,extendsfxf2): Handle XFmode write to MEM by eading...
(pushxf,movxf,extenddfxf2,extendsfxf2): Handle XFmode write to MEM by
eading back value after write if source doesn't die.
(movxf,extenddfxf2,extendsfxf2): Don't emit fld before calling
output_to_reg: output_to_reg does that now.
From-SVN: r5601
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.md | 60 |
1 files changed, 17 insertions, 43 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 7576554..5a87914 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1154,13 +1154,10 @@ xops[2] = stack_pointer_rtx; output_asm_insn (AS2 (sub%L2,%1,%2), xops); - if (find_regno_note (insn, REG_DEAD, FIRST_STACK_REG)) - output_asm_insn (AS1 (fstp%T0,%0), xops); - else - { - output_asm_insn (AS1 (fld,%y1), operands); - output_asm_insn (AS1 (fstp%T0,%y0), xops); - } + output_asm_insn (AS1 (fstp%T0,%0), xops); + if (! find_regno_note (insn, REG_DEAD, FIRST_STACK_REG)) + output_asm_insn (AS1 (fld%T0,%0), xops); + RET; } else @@ -1211,11 +1208,6 @@ if (STACK_TOP_P (operands[1]) && NON_STACK_REG_P (operands[0])) { - if (stack_top_dies == 0) - { - output_asm_insn (AS1 (fld,%y1), operands); - stack_top_dies = 1; - } output_to_reg (operands[0], stack_top_dies); RET; } @@ -1224,13 +1216,11 @@ if (STACK_TOP_P (operands[1])) { - if (stack_top_dies) - return AS1 (fstp%z0,%y0); - else - { - output_asm_insn (AS1 (fld,%y1), operands); - return AS1 (fstp%z0,%y0); - } + output_asm_insn (AS1 (fstp%z0,%y0), operands); + if (! stack_top_dies) + return AS1 (fld%z0,%y0); + + RET; } /* Handle other kinds of reads to the 387 */ @@ -1491,11 +1481,6 @@ if (NON_STACK_REG_P (operands[0])) { - if (stack_top_dies == 0) - { - output_asm_insn (AS1 (fld,%y1), operands); - stack_top_dies = 1; - } output_to_reg (operands[0], stack_top_dies); RET; } @@ -1505,13 +1490,10 @@ if (GET_CODE (operands[0]) == MEM) { - if (stack_top_dies) - return AS1 (fstp%z0,%y0); - else - { - output_asm_insn (AS1 (fld,%y1), operands); - return AS1 (fstp%z0,%0); - } + output_asm_insn (AS1 (fstp%z0,%y0), operands); + if (! stack_top_dies) + return AS1 (fld%z0,%y0); + RET; } abort (); @@ -1534,11 +1516,6 @@ if (NON_STACK_REG_P (operands[0])) { - if (stack_top_dies == 0) - { - output_asm_insn (AS1 (fld,%y1), operands); - stack_top_dies = 1; - } output_to_reg (operands[0], stack_top_dies); RET; } @@ -1548,13 +1525,10 @@ if (GET_CODE (operands[0]) == MEM) { - if (stack_top_dies) - return AS1 (fstp%z0,%y0); - else - { - output_asm_insn (AS1 (fld,%y1), operands); - return AS1 (fstp%z0,%0); - } + output_asm_insn (AS1 (fstp%z0,%y0), operands); + if (! stack_top_dies) + return AS1 (fld%z0,%y0); + RET; } abort (); |