Go to main content
[University of Manchester]

School of Computer Science Intranet

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