jcf-write.c (generate_bytecode_conditional): Correct handling of unordered conditionals.

* jcf-write.c (generate_bytecode_conditional): Correct handling
	of unordered conditionals. Add comment.

From-SVN: r82485
This commit is contained in:
Bryce McKinlay 2004-05-31 14:54:37 +00:00 committed by Bryce McKinlay
parent b47785f4ab
commit 1aae9cdcf2
2 changed files with 12 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2004-05-31 Bryce McKinlay <mckinlay@redhat.com>
* jcf-write.c (generate_bytecode_conditional): Correct handling
of unordered conditionals. Add comment.
2004-05-29 Ranjit Mathew <rmathew@hotmail.com>
Per Bothner <per@bothner.com>

View File

@ -1179,25 +1179,25 @@ generate_bytecode_conditional (tree exp,
op = OPCODE_if_icmpne;
goto compare;
case UNLT_EXPR:
case UNLE_EXPR:
unordered = 1;
case GT_EXPR:
op = OPCODE_if_icmpgt;
goto compare;
case UNGT_EXPR:
case UNGE_EXPR:
unordered = 1;
case LT_EXPR:
op = OPCODE_if_icmplt;
goto compare;
case UNLE_EXPR:
case UNLT_EXPR:
unordered = 1;
case GE_EXPR:
op = OPCODE_if_icmpge;
goto compare;
case UNGE_EXPR:
case UNGT_EXPR:
unordered = 1;
case LE_EXPR:
op = OPCODE_if_icmple;
@ -1206,6 +1206,9 @@ generate_bytecode_conditional (tree exp,
compare:
if (unordered)
{
/* UNLT_EXPR(a, b) means 'a < b || unordered(a, b)'. This is
the same as the Java source expression '!(a >= b)', so handle
it that way. */
struct jcf_block *tmp = true_label;
true_label = false_label;
false_label = tmp;