from Intel specification DC E0 is fsubr but not fsub
See this comment from include/opcode/i386.h /* The SystemV/386 SVR3.2 assembler, and probably all AT&T derived ix86 Unix assemblers, generate floating point instructions with reversed source and destination registers in certain cases. Unfortunately, gcc and possibly many other programs use this reversed syntax, so we're stuck with it. eg. `fsub %st(3),%st' results in st = st - st(3) as expected, but `fsub %st,%st(3)' results in st(3) = st - st(3), rather than the expected st(3) = st(3) - st This happens with all the non-commutative arithmetic floating point operations with two register operands, where the source register is %st, and destination register is %st(i). The affected opcode map is dceX, dcfX, deeX, defX. */ If you really care, you can define SYSV386_COMPAT to 0 but please read the comment there too..
*** Bug 20772 has been marked as a duplicate of this bug. ***
*** Bug 20773 has been marked as a duplicate of this bug. ***
*** Bug 20774 has been marked as a duplicate of this bug. ***
*** Bug 20776 has been marked as a duplicate of this bug. ***
*** Bug 20777 has been marked as a duplicate of this bug. ***
*** Bug 20778 has been marked as a duplicate of this bug. ***
*** Bug 20779 has been marked as a duplicate of this bug. ***