Commit 5703bb66 by Stan Cox

(output_float_compare): Added support for Pentium Pro

fcomi instruction which sets EFLAGS instead of FPU Status Word.

From-SVN: r12563
parent 9ad91d71
...@@ -3548,6 +3548,7 @@ output_float_compare (insn, operands) ...@@ -3548,6 +3548,7 @@ output_float_compare (insn, operands)
int stack_top_dies; int stack_top_dies;
rtx body = XVECEXP (PATTERN (insn), 0, 0); rtx body = XVECEXP (PATTERN (insn), 0, 0);
int unordered_compare = GET_MODE (SET_SRC (body)) == CCFPEQmode; int unordered_compare = GET_MODE (SET_SRC (body)) == CCFPEQmode;
int target_fcomi = TARGET_CMOVE && STACK_REG_P (operands[1]);
rtx tmp; rtx tmp;
if (! STACK_TOP_P (operands[0])) if (! STACK_TOP_P (operands[0]))
...@@ -3585,9 +3586,9 @@ output_float_compare (insn, operands) ...@@ -3585,9 +3586,9 @@ output_float_compare (insn, operands)
unordered float compare. */ unordered float compare. */
if (unordered_compare) if (unordered_compare)
strcpy (buf, "fucom"); strcpy (buf, target_fcomi ? "fucomi" : "fucom");
else if (GET_MODE_CLASS (GET_MODE (operands[1])) == MODE_FLOAT) else if (GET_MODE_CLASS (GET_MODE (operands[1])) == MODE_FLOAT)
strcpy (buf, "fcom"); strcpy (buf, target_fcomi ? "fcomi" : "fcom");
else else
strcpy (buf, "ficom"); strcpy (buf, "ficom");
...@@ -3598,6 +3599,13 @@ output_float_compare (insn, operands) ...@@ -3598,6 +3599,13 @@ output_float_compare (insn, operands)
if (NON_STACK_REG_P (operands[1])) if (NON_STACK_REG_P (operands[1]))
output_op_from_reg (operands[1], strcat (buf, AS1 (%z0,%1))); output_op_from_reg (operands[1], strcat (buf, AS1 (%z0,%1)));
else if (target_fcomi)
{
rtx xops[] = {operands[0], operands[1], operands[0]};
output_asm_insn (strcat (buf, AS2 (%z1,%y1,%2)), xops);
RET;
}
else else
output_asm_insn (strcat (buf, AS1 (%z1,%y1)), operands); output_asm_insn (strcat (buf, AS1 (%z1,%y1)), operands);
} }
......
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