c++ - floating-point optimization
- Brian Gardner (5/5) Oct 01 2006 Does DMC perform floating-point optimizations with the -o option?
- Walter Bright (4/8) Oct 01 2006 To check what kinds it does, it's pretty easy to write up a sample,
- Brian Gardner (15/24) Oct 02 2006 Well, I'm not familiar with assembler code.
- Walter Bright (2/3) Oct 02 2006 (x + x) would be equivalent to (2.00 * x).
Does DMC perform floating-point optimizations with the -o option? For example: y = 2.0l * (1.0l * x + 0.0l); after optimization becomes: y = x + x; Thanks, Brian
Oct 01 2006
Brian Gardner wrote:Does DMC perform floating-point optimizations with the -o option? For example: y = 2.0l * (1.0l * x + 0.0l); after optimization becomes: y = x + x;To check what kinds it does, it's pretty easy to write up a sample, compile it, then obj2asm the result. For the above case, the two statements aren't equivalent.
Oct 01 2006
Walter Bright wrote:Brian Gardner wrote:Well, I'm not familiar with assembler code. Anyway I set up a test code: #include <stdio.h> int main(int argc, char *argv[]){ long double y, x = argc; y = 1.0l * x + 0.0l; return printf("%Lg\n", y); } With or without -o, instruction faddp is in the asm code generated from obj2asm. So, this means that x + 0.0l is left? What about for 1.0l * x?Does DMC perform floating-point optimizations with the -o option? For example: y = 2.0l * (1.0l * x + 0.0l); after optimization becomes: y = x + x;To check what kinds it does, it's pretty easy to write up a sample, compile it, then obj2asm the result.For the above case, the two statements aren't equivalent.So, 2.0l * x is not equivalent to x + x? Why? Thanks, Brian
Oct 02 2006
Brian Gardner wrote:So, 2.0l * x is not equivalent to x + x? Why?(x + x) would be equivalent to (2.00 * x).
Oct 02 2006