www.digitalmars.com Home | Search | C & C++ | D | DMDScript | News Groups | index | prev | next
Archives

D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript

c++ - floating-point optimization

↑ ↓ ← Brian Gardner <briangr friberg.us> writes:
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
↑ ↓ Walter Bright <newshound digitalmars.com> writes:
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
↑ ↓ Brian Gardner <briangr friberg.us> writes:
Walter Bright wrote:
 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.

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?
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
↑ ↓ → Walter Bright <newshound digitalmars.com> writes:
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