Dr Ian Rogers
Enumeration of floating point compares for Java and fcomi:| Values
being compared |
Java |
FCOMI |
|||||||||||
| val1 |
val2 |
< |
> |
== |
<= |
>= |
!= |
ZF |
PF |
CF |
CF=1 or ZF=1 |
CF=1 && ZF=1 |
CF=0 && ZF=0 |
| 0.0 |
0.0 |
false |
false |
true |
true |
true |
false |
1 |
0 |
0 |
1 |
0 |
0 |
| 0.0 |
1.0 |
true |
false |
false |
true |
false |
true |
0 |
0 |
1 |
1 |
0 |
0 |
| 1.0 |
0.0 |
false |
true |
false |
false |
true |
true |
0 |
0 |
0 |
0 |
0 |
1 |
| 0.0 |
NaN |
false |
false |
false |
false |
false |
true |
1 |
1 |
1 |
1 |
1 |
0 |
| NaN |
0.0 |
false |
false |
false |
false |
false |
true |
1 |
1 |
1 |
1 |
1 |
0 |
| NaN |
NaN |
false |
false |
false |
false |
false |
true |
1 |
1 |
1 |
1 |
1 |
0 |
| IA 32
instructions assuming unordered_target == false_target |
Jcc |
Jpe false_target Jb true_target false_target: |
Ja true_target false_target: |
Jpe false_target Je true_target false_target: |
Jpe false_target Jbe true_target false_target: |
Jnb true_target false_target: |
Jpe false_target Jne true_target false_target: |
||||||
| Cmov |
Mov true_val Cmovpe false_val Cmovnb false_val |
Mov false_val Cmova true_val |
Mov true_val Cmovpe false_val Cmovne false_val |
Mov true_val Cmovpe false_val Cmovnbe false_val |
Mov false_val Cmovnb true_val |
Mov true_val Cmovpe false_val Cmove false_val |
|||||||
| Fcmov |
Fmov true_val Fcmovu false_val Fcmovnb false_val |
Fmov false_val Fcmovnbe true_val |
Fmov true_val Fcmovu false_val Fcmovne false_val |
Fmov true_val Fcmovu false_val Fcmovnbe false_val |
Fmov false_val Fcmovnb true_val |
Fmov true_val Fcmovu false_val Fcmove false_val |
|||||||
| IA 32
instructions assuming unordered_target == true_target |
Jcc |
Jb true_target false_target: |
Jpo true_target Ja true_target false_target: |
Je true_target false_target: |
Jbe true_target false_target: |
Jpo true_target Jae true_target false_target: |
Jne true_target false_target: |
||||||
| Cmov |
Mov false_val Cmovb true_val |
Mov true_val Cmovpo false_val Cmovna false_val |
Mov false_val Cmove true_val |
Mov false_val Cmovbe true_val |
Mov true_val Cmovpo false_val Cmovnae false_val |
Mov false_val Cmovne true_val |
|||||||
| Fcmov |
Fmov false_val Fcmovb true_val |
Fmov true_val Fcmovnu false_val Fcmovbe false_val |
Fmov false_val Fcmove true_val |
Fmov false_val Fcmovbe true_val |
Fmov true_val Fcmovnu false_val Fcmovb false_val |
Fmov false_val Fcmovne true_val |
|||||||