Mercurial > projects > ldc
view tango.patch @ 1083:c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
previous code that allowed dual operand form of fstp but dissallowed the single
operand form accidently
author | Kelly Wilson <wilsonk cpsc.ucalgary.ca> |
---|---|
date | Tue, 10 Mar 2009 06:23:26 -0600 |
parents | 5710440ea420 |
children |
line wrap: on
line source
Index: tango/tango/math/Math.d =================================================================== --- tango/tango/math/Math.d (revision 4388) +++ tango/tango/math/Math.d (working copy) @@ -80,13 +80,9 @@ } else version(D_InlineAsm_X86) { version = Naked_D_InlineAsm_X86; } -else version(LDC) +version(LDC) { import ldc.intrinsics; - version(X86) - { - version = LDC_X86; - } } /* @@ -312,28 +308,14 @@ * Results are undefined if |x| >= $(POWER 2,64). */ -version(LDC) +real cos(real x) /* intrinsic */ { - alias llvm_cos_f32 cos; - alias llvm_cos_f64 cos; - version(X86) + version(LDC) { - alias llvm_cos_f80 cos; + return llvm_cos(x); } - else + else version(D_InlineAsm_X86) { - real cos(real x) - { - return tango.stdc.math.cosl(x); - } - } -} -else -{ -real cos(real x) /* intrinsic */ -{ - version(D_InlineAsm_X86) - { asm { fld x; @@ -345,7 +327,6 @@ return tango.stdc.math.cosl(x); } } -} debug(UnitTest) { unittest { @@ -366,28 +347,14 @@ * Bugs: * Results are undefined if |x| >= $(POWER 2,64). */ -version(LDC) +real sin(real x) /* intrinsic */ { - alias llvm_sin_f32 sin; - alias llvm_sin_f64 sin; - version(X86) + version(LDC) { - alias llvm_sin_f80 sin; + return llvm_sin(x); } - else + else version(D_InlineAsm_X86) { - real sin(real x) - { - return tango.stdc.math.sinl(x); - } - } -} -else -{ -real sin(real x) /* intrinsic */ -{ - version(D_InlineAsm_X86) - { asm { fld x; @@ -399,7 +366,6 @@ return tango.stdc.math.sinl(x); } } -} debug(UnitTest) { unittest { @@ -999,29 +965,14 @@ * $(TR $(TD +$(INFIN)) $(TD +$(INFIN)) $(TD no)) * ) */ -version(LDC) +float sqrt(float x) /* intrinsic */ { - alias llvm_sqrt_f32 sqrt; - alias llvm_sqrt_f64 sqrt; - version(X86) + version(LDC) { - alias llvm_sqrt_f80 sqrt; + return llvm_sqrt(x); } - else + else version(D_InlineAsm_X86) { - real sqrt(real x) - { - return tango.stdc.math.sqrtl(x); - } - } -} -else -{ - -float sqrt(float x) /* intrinsic */ -{ - version(D_InlineAsm_X86) - { asm { fld x; @@ -1036,8 +987,12 @@ double sqrt(double x) /* intrinsic */ /// ditto { - version(D_InlineAsm_X86) + version(LDC) { + return llvm_sqrt(x); + } + else version(D_InlineAsm_X86) + { asm { fld x; @@ -1052,8 +1007,12 @@ real sqrt(real x) /* intrinsic */ /// ditto { - version(D_InlineAsm_X86) + version(LDC) { + return llvm_sqrt(x); + } + else version(D_InlineAsm_X86) + { asm { fld x; @@ -1066,8 +1025,6 @@ } } -} - /** ditto */ creal sqrt(creal z) { @@ -1714,9 +1671,9 @@ } } } - version(LDC_X86) + version(LDC) { - return llvm_pow_f80(x, y); + return llvm_pow(x, y); } else {