Mercurial > projects > ldc
annotate 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 |
rev | line source |
---|---|
1079 | 1 Index: tango/tango/math/Math.d |
2 =================================================================== | |
3 --- tango/tango/math/Math.d (revision 4388) | |
4 +++ tango/tango/math/Math.d (working copy) | |
5 @@ -80,13 +80,9 @@ | |
6 } else version(D_InlineAsm_X86) { | |
7 version = Naked_D_InlineAsm_X86; | |
8 } | |
9 -else version(LDC) | |
10 +version(LDC) | |
11 { | |
12 import ldc.intrinsics; | |
13 - version(X86) | |
14 - { | |
15 - version = LDC_X86; | |
16 - } | |
17 } | |
18 | |
19 /* | |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
20 @@ -312,28 +308,14 @@ |
1079 | 21 * Results are undefined if |x| >= $(POWER 2,64). |
22 */ | |
23 | |
24 -version(LDC) | |
25 +real cos(real x) /* intrinsic */ | |
26 { | |
27 - alias llvm_cos_f32 cos; | |
28 - alias llvm_cos_f64 cos; | |
29 - version(X86) | |
30 + version(LDC) | |
31 { | |
32 - alias llvm_cos_f80 cos; | |
33 + return llvm_cos(x); | |
34 } | |
35 - else | |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
36 + else version(D_InlineAsm_X86) |
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
37 { |
1079 | 38 - real cos(real x) |
39 - { | |
40 - return tango.stdc.math.cosl(x); | |
41 - } | |
42 - } | |
43 -} | |
44 -else | |
45 -{ | |
46 -real cos(real x) /* intrinsic */ | |
47 -{ | |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
48 - version(D_InlineAsm_X86) |
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
49 - { |
1079 | 50 asm |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
51 { |
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
52 fld x; |
1079 | 53 @@ -345,7 +327,6 @@ |
54 return tango.stdc.math.cosl(x); | |
55 } | |
56 } | |
57 -} | |
58 | |
59 debug(UnitTest) { | |
60 unittest { | |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
61 @@ -366,28 +347,14 @@ |
1079 | 62 * Bugs: |
63 * Results are undefined if |x| >= $(POWER 2,64). | |
64 */ | |
65 -version(LDC) | |
66 +real sin(real x) /* intrinsic */ | |
67 { | |
68 - alias llvm_sin_f32 sin; | |
69 - alias llvm_sin_f64 sin; | |
70 - version(X86) | |
71 + version(LDC) | |
72 { | |
73 - alias llvm_sin_f80 sin; | |
74 + return llvm_sin(x); | |
75 } | |
76 - else | |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
77 + else version(D_InlineAsm_X86) |
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
78 { |
1079 | 79 - real sin(real x) |
80 - { | |
81 - return tango.stdc.math.sinl(x); | |
82 - } | |
83 - } | |
84 -} | |
85 -else | |
86 -{ | |
87 -real sin(real x) /* intrinsic */ | |
88 -{ | |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
89 - version(D_InlineAsm_X86) |
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
90 - { |
1079 | 91 asm |
1081
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
92 { |
5710440ea420
Oops, had some unsaved changes
Frits van Bommel <fvbommel wxs.nl>
parents:
1079
diff
changeset
|
93 fld x; |
1079 | 94 @@ -399,7 +366,6 @@ |
95 return tango.stdc.math.sinl(x); | |
96 } | |
97 } | |
98 -} | |
99 | |
100 debug(UnitTest) { | |
101 unittest { | |
102 @@ -999,29 +965,14 @@ | |
103 * $(TR $(TD +$(INFIN)) $(TD +$(INFIN)) $(TD no)) | |
104 * ) | |
105 */ | |
106 -version(LDC) | |
107 +float sqrt(float x) /* intrinsic */ | |
108 { | |
109 - alias llvm_sqrt_f32 sqrt; | |
110 - alias llvm_sqrt_f64 sqrt; | |
111 - version(X86) | |
112 + version(LDC) | |
113 { | |
114 - alias llvm_sqrt_f80 sqrt; | |
115 + return llvm_sqrt(x); | |
116 } | |
117 - else | |
118 + else version(D_InlineAsm_X86) | |
119 { | |
120 - real sqrt(real x) | |
121 - { | |
122 - return tango.stdc.math.sqrtl(x); | |
123 - } | |
124 - } | |
125 -} | |
126 -else | |
127 -{ | |
128 - | |
129 -float sqrt(float x) /* intrinsic */ | |
130 -{ | |
131 - version(D_InlineAsm_X86) | |
132 - { | |
133 asm | |
134 { | |
135 fld x; | |
136 @@ -1036,8 +987,12 @@ | |
137 | |
138 double sqrt(double x) /* intrinsic */ /// ditto | |
139 { | |
140 - version(D_InlineAsm_X86) | |
141 + version(LDC) | |
142 { | |
143 + return llvm_sqrt(x); | |
144 + } | |
145 + else version(D_InlineAsm_X86) | |
146 + { | |
147 asm | |
148 { | |
149 fld x; | |
150 @@ -1052,8 +1007,12 @@ | |
151 | |
152 real sqrt(real x) /* intrinsic */ /// ditto | |
153 { | |
154 - version(D_InlineAsm_X86) | |
155 + version(LDC) | |
156 { | |
157 + return llvm_sqrt(x); | |
158 + } | |
159 + else version(D_InlineAsm_X86) | |
160 + { | |
161 asm | |
162 { | |
163 fld x; | |
164 @@ -1066,8 +1025,6 @@ | |
165 } | |
166 } | |
167 | |
168 -} | |
169 - | |
170 /** ditto */ | |
171 creal sqrt(creal z) | |
172 { | |
173 @@ -1714,9 +1671,9 @@ | |
174 } | |
175 } | |
176 } | |
177 - version(LDC_X86) | |
178 + version(LDC) | |
179 { | |
180 - return llvm_pow_f80(x, y); | |
181 + return llvm_pow(x, y); | |
182 } | |
183 else | |
184 { |