Thread overview |
---|
January 13, 2007 [Issue 840] New: incorrect code generation for asm{fidv ST(1), ST;} | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=840 Summary: incorrect code generation for asm{fidv ST(1), ST;} Product: D Version: 1.00 Platform: PC OS/Version: Linux Status: NEW Keywords: wrong-code Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: thomas-dloop@kuehne.cn # asm{ # fidv ST(1), ST; # } output: dc f9 fdivr st(1),st expected output: dc f1 fdiv st(1),st test case: http://dstress.kuehne.cn/run/a/asm_fdiv_01_D.d -- |
January 13, 2007 [Issue 840] incorrect code generation for asm{fidv ST(1), ST;} | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=840 ------- Comment #1 from thomas-dloop@kuehne.cn 2007-01-13 06:45 ------- other test cases with similar issues are: http://dstress.kuehne.cn/run/a/asm_fdivp_01_A.d http://dstress.kuehne.cn/run/a/asm_fdivp_01_B.d http://dstress.kuehne.cn/run/a/asm_fdivr_01_D.d http://dstress.kuehne.cn/run/a/asm_fdivrp_01_A.d http://dstress.kuehne.cn/run/a/asm_fdivrp_01_B.d http://dstress.kuehne.cn/run/a/asm_fsubp_01_A.d http://dstress.kuehne.cn/run/a/asm_fsubp_01_B.d http://dstress.kuehne.cn/run/a/asm_fsubrp_01_A.d http://dstress.kuehne.cn/run/a/asm_fsubrp_01_B.d -- |
April 08, 2009 [Issue 840] incorrect code generation for asm{fidv ST(1), ST;} | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=840 clugdbug@yahoo.com.au changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID ------- Comment #2 from clugdbug@yahoo.com.au 2009-04-08 05:05 ------- Actually, DMD is correct. Here's the output from the old DOS DEBUG. -u 0100 0102 13A9:0100 DCF9 FDIV ST(1),ST 13A9:0102 DCF1 FDIVR ST(1),ST The bug is in majority of *nix assemblers. Here's a link. =========== http://gcc.gnu.org/ml/gcc-bugs/2003-04/msg01454.html ----- 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). See FloatDR below. ---------- -- |
Copyright © 1999-2021 by the D Language Foundation