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
     {