diff tango.patch @ 1079:4e388d9d0e25

Intrinsics overhaul: - More error checking for pragma(intrinsic) - Properly handle templating for real (use actual nr of bits, not .sizeof * 8) - Template all .i* and .f* intrinsics - The old names are deprecated aliases now I also added a preliminary patch to make tango.math.Math use the new versions. (I think it looks a lot nicer now)
author Frits van Bommel <fvbommel wxs.nl>
date Tue, 10 Mar 2009 04:45:32 +0100
parents
children 5710440ea420
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tango.patch	Tue Mar 10 04:45:32 2009 +0100
@@ -0,0 +1,178 @@
+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,26 +308,12 @@
+  *      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
+-    {
+-        real cos(real x)
+-        {
+-            return tango.stdc.math.cosl(x);
+-        }
+-    }
+-}
+-else
+-{
+-real cos(real x) /* intrinsic */
+-{
+     version(D_InlineAsm_X86)
+     {
+         asm
+@@ -345,7 +327,6 @@
+         return tango.stdc.math.cosl(x);
+     }
+ }
+-}
+ 
+ debug(UnitTest) {
+ unittest {
+@@ -366,26 +347,12 @@
+  * 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
+-    {
+-        real sin(real x)
+-        {
+-            return tango.stdc.math.sinl(x);
+-        }
+-    }
+-}
+-else
+-{
+-real sin(real x) /* intrinsic */
+-{
+     version(D_InlineAsm_X86)
+     {
+         asm
+@@ -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
+     {