This one took most of the weekend to track down. Attached is a test-case.
The cast to float doesn't seem to be necessary, but I haven't run regression tests so it might be possible this one breaks things. Vince # HG changeset patch # User Vince Weaver <[email protected]> # Date 1257722640 18000 # Node ID 83559f926d629056a408ebdcd5a591340fc2b8ea # Parent fb4a3a61bc745c49975c552927ae9a35405f02dd X86: Remove double-cast in Cvtf2i micro-op This double cast led to rounding errors which caused some benchmarks to get the wrong values, most notably lucas from spec2k which failed spectacularly when CVTTSD2SI returned an off-by-one value. diff -r fb4a3a61bc74 -r 83559f926d62 src/arch/x86/isa/microops/mediaop.isa --- a/src/arch/x86/isa/microops/mediaop.isa Wed Nov 04 13:22:15 2009 -0500 +++ b/src/arch/x86/isa/microops/mediaop.isa Sun Nov 08 18:24:00 2009 -0500 @@ -1237,7 +1237,7 @@ } if (destSize == 4) { - argBits = (uint32_t)(float)arg; + argBits = (uint32_t)arg; } else { argBits = (uint64_t)arg; }
lucas_problem
Description: Binary data
_______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
