@@ -63,69 +63,258 @@ pub extern "rust-intrinsic" {
63
63
64
64
pub fn memmove32 ( dst : * mut u8 , src : * u8 , size : u32 ) ;
65
65
pub fn memmove64 ( dst : * mut u8 , src : * u8 , size : u64 ) ;
66
+ }
66
67
68
+ #[ nolink]
69
+ pub extern mod llvm {
70
+ #[ rust_stack]
71
+ #[ inline( always) ]
72
+ #[ constant_arg="3, i32, 1" ]
73
+ #[ constant_arg="4, i1, 0" ]
74
+ #[ link_name="llvm.memmove.p0i8.p0i8.i32" ]
75
+ #[ cfg( not( stage0) ) ]
76
+ pub fn memmove32 ( dst : * mut u8 , src : * u8 , size : i32 ) ;
77
+
78
+ #[ rust_stack]
79
+ #[ inline( always) ]
80
+ #[ constant_arg="3, i32, 1" ]
81
+ #[ constant_arg="4, i1, 0" ]
82
+ #[ link_name="llvm.memmove.p0i8.p0i8.i64" ]
83
+ #[ cfg( not( stage0) ) ]
84
+ pub fn memmove64 ( dst : * mut u8 , src : * u8 , size : i64 ) ;
85
+
86
+ #[ rust_stack]
87
+ #[ inline( always) ]
88
+ #[ link_name="llvm.sqrt.f32" ]
67
89
pub fn sqrtf32 ( x : f32 ) -> f32 ;
90
+
91
+ #[ rust_stack]
92
+ #[ inline( always) ]
93
+ #[ link_name="llvm.sqrt.f64" ]
68
94
pub fn sqrtf64 ( x : f64 ) -> f64 ;
69
95
96
+ #[ rust_stack]
97
+ #[ inline( always) ]
98
+ #[ link_name="llvm.powi.f32" ]
70
99
pub fn powif32 ( a : f32 , x : i32 ) -> f32 ;
100
+
101
+ #[ rust_stack]
102
+ #[ inline( always) ]
103
+ #[ link_name="llvm.powi.f64" ]
71
104
pub fn powif64 ( a : f64 , x : i32 ) -> f64 ;
72
105
106
+ #[ rust_stack]
107
+ #[ inline( always) ]
108
+ #[ link_name="llvm.sin.f32" ]
73
109
pub fn sinf32 ( x : f32 ) -> f32 ;
110
+
111
+ #[ rust_stack]
112
+ #[ inline( always) ]
113
+ #[ link_name="llvm.sin.f64" ]
74
114
pub fn sinf64 ( x : f64 ) -> f64 ;
75
115
116
+ #[ rust_stack]
117
+ #[ inline( always) ]
118
+ #[ link_name="llvm.cos.f32" ]
76
119
pub fn cosf32 ( x : f32 ) -> f32 ;
120
+
121
+ #[ rust_stack]
122
+ #[ inline( always) ]
123
+ #[ link_name="llvm.cos.f64" ]
77
124
pub fn cosf64 ( x : f64 ) -> f64 ;
78
125
126
+ #[ rust_stack]
127
+ #[ inline( always) ]
128
+ #[ link_name="llvm.pow.f32" ]
79
129
pub fn powf32 ( a : f32 , x : f32 ) -> f32 ;
130
+
131
+ #[ rust_stack]
132
+ #[ inline( always) ]
133
+ #[ link_name="llvm.pow.f64" ]
80
134
pub fn powf64 ( a : f64 , x : f64 ) -> f64 ;
81
135
136
+ #[ rust_stack]
137
+ #[ inline( always) ]
138
+ #[ link_name="llvm.exp.f32" ]
82
139
pub fn expf32 ( x : f32 ) -> f32 ;
83
- pub fn expf64 ( x : f64 ) -> f64 ;
84
140
85
- pub fn exp2f32 ( x : f32 ) -> f32 ;
86
- pub fn exp2f64 ( x : f64 ) -> f64 ;
141
+ #[ rust_stack]
142
+ #[ inline( always) ]
143
+ #[ link_name="llvm.exp.f64" ]
144
+ pub fn expf64 ( x : f64 ) -> f64 ;
87
145
146
+ #[ rust_stack]
147
+ #[ inline( always) ]
148
+ #[ link_name="llvm.log.f32" ]
88
149
pub fn logf32 ( x : f32 ) -> f32 ;
150
+
151
+ #[ rust_stack]
152
+ #[ inline( always) ]
153
+ #[ link_name="llvm.log.f64" ]
89
154
pub fn logf64 ( x : f64 ) -> f64 ;
90
155
156
+ /* NOTE: Do these intrinsics even exist?
157
+ pub fn exp2f32(x: f32) -> f32;
158
+ pub fn exp2f64(x: f64) -> f64;
159
+
91
160
pub fn log10f32(x: f32) -> f32;
92
161
pub fn log10f64(x: f64) -> f64;
93
162
94
163
pub fn log2f32(x: f32) -> f32;
95
164
pub fn log2f64(x: f64) -> f64;
165
+ */
96
166
167
+ #[ rust_stack]
168
+ #[ inline( always) ]
169
+ #[ link_name="llvm.fma.f32" ]
97
170
pub fn fmaf32 ( a : f32 , b : f32 , c : f32 ) -> f32 ;
171
+
172
+ #[ rust_stack]
173
+ #[ inline( always) ]
174
+ #[ link_name="llvm.fma.f64" ]
98
175
pub fn fmaf64 ( a : f64 , b : f64 , c : f64 ) -> f64 ;
99
176
177
+ #[ rust_stack]
178
+ #[ inline( always) ]
179
+ #[ link_name="llvm.fmuladd.f32" ]
180
+ pub fn fmuladdf32 ( a : f32 , b : f32 , c : f32 ) -> f32 ;
181
+
182
+ #[ rust_stack]
183
+ #[ inline( always) ]
184
+ #[ link_name="llvm.fmuladd.f64" ]
185
+ pub fn fmuladdf64 ( a : f64 , b : f64 , c : f64 ) -> f64 ;
186
+
187
+ #[ rust_stack]
188
+ #[ inline( always) ]
189
+ #[ link_name="llvm.fabs.f32" ]
100
190
pub fn fabsf32 ( x : f32 ) -> f32 ;
191
+
192
+ #[ rust_stack]
193
+ #[ inline( always) ]
194
+ #[ link_name="llvm.fabs.f64" ]
101
195
pub fn fabsf64 ( x : f64 ) -> f64 ;
102
196
197
+ #[ rust_stack]
198
+ #[ inline( always) ]
199
+ #[ link_name="llvm.floor.f32" ]
103
200
pub fn floorf32 ( x : f32 ) -> f32 ;
201
+
202
+ #[ rust_stack]
203
+ #[ inline( always) ]
204
+ #[ link_name="llvm.floor.f64" ]
104
205
pub fn floorf64 ( x : f64 ) -> f64 ;
105
206
207
+ /* NOTE: Needs LLVM 3.3
208
+ #[rust_stack]
209
+ #[link_name="llvm.ceil.f32"]
106
210
pub fn ceilf32(x: f32) -> f32;
211
+
212
+ #[rust_stack]
213
+ #[link_name="llvm.ceil.f64"]
107
214
pub fn ceilf64(x: f64) -> f64;
108
215
216
+ #[rust_stack]
217
+ #[link_name="llvm.trunc.f32"]
109
218
pub fn truncf32(x: f32) -> f32;
219
+
220
+ #[rust_stack]
221
+ #[link_name="llvm.trunc.f64"]
110
222
pub fn truncf64(x: f64) -> f64;
223
+ */
111
224
225
+ #[ rust_stack]
226
+ #[ inline( always) ]
227
+ #[ link_name="llvm.ctpop.i8" ]
112
228
pub fn ctpop8 ( x : i8 ) -> i8 ;
229
+
230
+ #[ rust_stack]
231
+ #[ inline( always) ]
232
+ #[ link_name="llvm.ctpop.i16" ]
113
233
pub fn ctpop16 ( x : i16 ) -> i16 ;
234
+
235
+ #[ rust_stack]
236
+ #[ inline( always) ]
237
+ #[ link_name="llvm.ctpop.i32" ]
114
238
pub fn ctpop32 ( x : i32 ) -> i32 ;
239
+
240
+ #[ rust_stack]
241
+ #[ inline( always) ]
242
+ #[ link_name="llvm.ctpop.i64" ]
115
243
pub fn ctpop64 ( x : i64 ) -> i64 ;
116
244
245
+ #[ cfg( not( stage0) ) ]
246
+ #[ rust_stack]
247
+ #[ inline( always) ]
248
+ #[ constant_arg="1, i1, 0" ]
249
+ #[ link_name="llvm.ctlz.i8" ]
117
250
pub fn ctlz8 ( x : i8 ) -> i8 ;
251
+
252
+ #[ cfg( not( stage0) ) ]
253
+ #[ rust_stack]
254
+ #[ inline( always) ]
255
+ #[ constant_arg="1, i1, 0" ]
256
+ #[ link_name="llvm.ctlz.i16" ]
118
257
pub fn ctlz16 ( x : i16 ) -> i16 ;
258
+
259
+ #[ cfg( not( stage0) ) ]
260
+ #[ rust_stack]
261
+ #[ inline( always) ]
262
+ #[ constant_arg="1, i1, 0" ]
263
+ #[ link_name="llvm.ctlz.i32" ]
119
264
pub fn ctlz32 ( x : i32 ) -> i32 ;
265
+
266
+ #[ cfg( not( stage0) ) ]
267
+ #[ rust_stack]
268
+ #[ inline( always) ]
269
+ #[ constant_arg="1, i1, 0" ]
270
+ #[ link_name="llvm.ctlz.i64" ]
120
271
pub fn ctlz64 ( x : i64 ) -> i64 ;
121
272
273
+ #[ cfg( not( stage0) ) ]
274
+ #[ rust_stack]
275
+ #[ inline( always) ]
276
+ #[ constant_arg="1, i1, 0" ]
277
+ #[ link_name="llvm.cttz.i8" ]
122
278
pub fn cttz8 ( x : i8 ) -> i8 ;
279
+
280
+ #[ cfg( not( stage0) ) ]
281
+ #[ rust_stack]
282
+ #[ inline( always) ]
283
+ #[ constant_arg="1, i1, 0" ]
284
+ #[ link_name="llvm.cttz.i16" ]
123
285
pub fn cttz16 ( x : i16 ) -> i16 ;
286
+
287
+ #[ cfg( not( stage0) ) ]
288
+ #[ rust_stack]
289
+ #[ inline( always) ]
290
+ #[ constant_arg="1, i1, 0" ]
291
+ #[ link_name="llvm.cttz.i32" ]
124
292
pub fn cttz32 ( x : i32 ) -> i32 ;
293
+
294
+ #[ cfg( not( stage0) ) ]
295
+ #[ rust_stack]
296
+ #[ inline( always) ]
297
+ #[ constant_arg="1, i1, 0" ]
298
+ #[ link_name="llvm.cttz.i64" ]
125
299
pub fn cttz64 ( x : i64 ) -> i64 ;
126
300
301
+ #[ rust_stack]
302
+ #[ inline( always) ]
303
+ #[ link_name="llvm.bswap.i16" ]
127
304
pub fn bswap16 ( x : i16 ) -> i16 ;
305
+
306
+ #[ rust_stack]
307
+ #[ inline( always) ]
308
+ #[ link_name="llvm.bswap.i32" ]
128
309
pub fn bswap32 ( x : i32 ) -> i32 ;
310
+
311
+ #[ rust_stack]
312
+ #[ inline( always) ]
313
+ #[ link_name="llvm.bswap.i64" ]
129
314
pub fn bswap64 ( x : i64 ) -> i64 ;
130
- }
131
315
316
+ #[ rust_stack]
317
+ #[ inline( always) ]
318
+ #[ link_name="llvm.readcyclecounter" ]
319
+ pub fn read_cyclecounter ( ) -> i64 ;
320
+ }
0 commit comments