Files
ldc/tango.patch
Frits van Bommel 5d9bd5d139 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)
2009-03-10 04:45:32 +01:00

179 lines
3.0 KiB
Diff

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
{