Commit 6df6bcfa by Michael Meissner Committed by Michael Meissner

Fix PR22599

From-SVN: r143386
parent 3e55cc6f
2009-01-14 Michael Meissner <gnu@the-meissners.org>
PR target/22599
* i386.c (print_operand): Add tests for 'D', 'C', 'F', 'f' to make
sure the insn is a conditional test (bug 22599). Reformat a few long
lines.
2009-01-14 Sebastian Pop <sebastian.pop@amd.com> 2009-01-14 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/38431 PR middle-end/38431
......
...@@ -10834,7 +10834,8 @@ print_operand (FILE *file, rtx x, int code) ...@@ -10834,7 +10834,8 @@ print_operand (FILE *file, rtx x, int code)
fputs ("ord", file); fputs ("ord", file);
break; break;
default: default:
gcc_unreachable (); output_operand_lossage ("operand is not a condition code, invalid operand code 'D'");
return;
} }
} }
else else
...@@ -10872,7 +10873,8 @@ print_operand (FILE *file, rtx x, int code) ...@@ -10872,7 +10873,8 @@ print_operand (FILE *file, rtx x, int code)
fputs ("ord", file); fputs ("ord", file);
break; break;
default: default:
gcc_unreachable (); output_operand_lossage ("operand is not a condition code, invalid operand code 'D'");
return;
} }
} }
return; return;
...@@ -10894,9 +10896,23 @@ print_operand (FILE *file, rtx x, int code) ...@@ -10894,9 +10896,23 @@ print_operand (FILE *file, rtx x, int code)
#endif #endif
return; return;
case 'C': case 'C':
if (!COMPARISON_P (x))
{
output_operand_lossage ("operand is neither a constant nor a "
"condition code, invalid operand code "
"'C'");
return;
}
put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 0, 0, file); put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 0, 0, file);
return; return;
case 'F': case 'F':
if (!COMPARISON_P (x))
{
output_operand_lossage ("operand is neither a constant nor a "
"condition code, invalid operand code "
"'F'");
return;
}
#ifdef HAVE_AS_IX86_CMOV_SUN_SYNTAX #ifdef HAVE_AS_IX86_CMOV_SUN_SYNTAX
if (ASSEMBLER_DIALECT == ASM_ATT) if (ASSEMBLER_DIALECT == ASM_ATT)
putc ('.', file); putc ('.', file);
...@@ -10910,12 +10926,21 @@ print_operand (FILE *file, rtx x, int code) ...@@ -10910,12 +10926,21 @@ print_operand (FILE *file, rtx x, int code)
and not a condition code which needs to be reversed. */ and not a condition code which needs to be reversed. */
if (!COMPARISON_P (x)) if (!COMPARISON_P (x))
{ {
output_operand_lossage ("operand is neither a constant nor a condition code, invalid operand code 'c'"); output_operand_lossage ("operand is neither a constant nor a "
"condition code, invalid operand "
"code 'c'");
return; return;
} }
put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 1, 0, file); put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 1, 0, file);
return; return;
case 'f': case 'f':
if (!COMPARISON_P (x))
{
output_operand_lossage ("operand is neither a constant nor a "
"condition code, invalid operand "
"code 'f'");
return;
}
#ifdef HAVE_AS_IX86_CMOV_SUN_SYNTAX #ifdef HAVE_AS_IX86_CMOV_SUN_SYNTAX
if (ASSEMBLER_DIALECT == ASM_ATT) if (ASSEMBLER_DIALECT == ASM_ATT)
putc ('.', file); putc ('.', file);
...@@ -11022,7 +11047,8 @@ print_operand (FILE *file, rtx x, int code) ...@@ -11022,7 +11047,8 @@ print_operand (FILE *file, rtx x, int code)
fputs ("une", file); fputs ("une", file);
break; break;
default: default:
gcc_unreachable (); output_operand_lossage ("operand is not a condition code, invalid operand code 'D'");
return;
} }
return; return;
......
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