@@ -63,69 +63,213 @@ 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
+ #[ link_name="llvm.sqrt.f32" ]
67
73
pub fn sqrtf32 ( x : f32 ) -> f32 ;
74
+
75
+ #[ rust_stack]
76
+ #[ inline( always) ]
77
+ #[ link_name="llvm.sqrt.f64" ]
68
78
pub fn sqrtf64 ( x : f64 ) -> f64 ;
69
79
80
+ #[ rust_stack]
81
+ #[ inline( always) ]
82
+ #[ link_name="llvm.powi.f32" ]
70
83
pub fn powif32 ( a : f32 , x : i32 ) -> f32 ;
84
+
85
+ #[ rust_stack]
86
+ #[ inline( always) ]
87
+ #[ link_name="llvm.powi.f64" ]
71
88
pub fn powif64 ( a : f64 , x : i32 ) -> f64 ;
72
89
90
+ #[ rust_stack]
91
+ #[ inline( always) ]
92
+ #[ link_name="llvm.sin.f32" ]
73
93
pub fn sinf32 ( x : f32 ) -> f32 ;
94
+
95
+ #[ rust_stack]
96
+ #[ inline( always) ]
97
+ #[ link_name="llvm.sin.f64" ]
74
98
pub fn sinf64 ( x : f64 ) -> f64 ;
75
99
100
+ #[ rust_stack]
101
+ #[ inline( always) ]
102
+ #[ link_name="llvm.cos.f32" ]
76
103
pub fn cosf32 ( x : f32 ) -> f32 ;
104
+
105
+ #[ rust_stack]
106
+ #[ inline( always) ]
107
+ #[ link_name="llvm.cos.f64" ]
77
108
pub fn cosf64 ( x : f64 ) -> f64 ;
78
109
110
+ #[ rust_stack]
111
+ #[ inline( always) ]
112
+ #[ link_name="llvm.pow.f32" ]
79
113
pub fn powf32 ( a : f32 , x : f32 ) -> f32 ;
114
+
115
+ #[ rust_stack]
116
+ #[ inline( always) ]
117
+ #[ link_name="llvm.pow.f64" ]
80
118
pub fn powf64 ( a : f64 , x : f64 ) -> f64 ;
81
119
120
+ #[ rust_stack]
121
+ #[ inline( always) ]
122
+ #[ link_name="llvm.exp.f32" ]
82
123
pub fn expf32 ( x : f32 ) -> f32 ;
83
- pub fn expf64 ( x : f64 ) -> f64 ;
84
124
85
- pub fn exp2f32 ( x : f32 ) -> f32 ;
86
- pub fn exp2f64 ( x : f64 ) -> f64 ;
125
+ #[ rust_stack]
126
+ #[ inline( always) ]
127
+ #[ link_name="llvm.exp.f64" ]
128
+ pub fn expf64 ( x : f64 ) -> f64 ;
87
129
130
+ #[ rust_stack]
131
+ #[ inline( always) ]
132
+ #[ link_name="llvm.log.f32" ]
88
133
pub fn logf32 ( x : f32 ) -> f32 ;
134
+
135
+ #[ rust_stack]
136
+ #[ inline( always) ]
137
+ #[ link_name="llvm.log.f64" ]
89
138
pub fn logf64 ( x : f64 ) -> f64 ;
90
139
140
+ /* NOTE: Do these intrinsics even exist?
141
+ pub fn exp2f32(x: f32) -> f32;
142
+ pub fn exp2f64(x: f64) -> f64;
143
+
91
144
pub fn log10f32(x: f32) -> f32;
92
145
pub fn log10f64(x: f64) -> f64;
93
146
94
147
pub fn log2f32(x: f32) -> f32;
95
148
pub fn log2f64(x: f64) -> f64;
149
+ */
96
150
151
+ #[ rust_stack]
152
+ #[ inline( always) ]
153
+ #[ link_name="llvm.fma.f32" ]
97
154
pub fn fmaf32 ( a : f32 , b : f32 , c : f32 ) -> f32 ;
155
+
156
+ #[ rust_stack]
157
+ #[ inline( always) ]
158
+ #[ link_name="llvm.fma.f64" ]
98
159
pub fn fmaf64 ( a : f64 , b : f64 , c : f64 ) -> f64 ;
99
160
161
+ #[ rust_stack]
162
+ #[ inline( always) ]
163
+ #[ link_name="llvm.fabs.f32" ]
100
164
pub fn fabsf32 ( x : f32 ) -> f32 ;
165
+
166
+ #[ rust_stack]
167
+ #[ inline( always) ]
168
+ #[ link_name="llvm.fabs.f64" ]
101
169
pub fn fabsf64 ( x : f64 ) -> f64 ;
102
170
171
+ #[ rust_stack]
172
+ #[ inline( always) ]
173
+ #[ link_name="llvm.floor.f32" ]
103
174
pub fn floorf32 ( x : f32 ) -> f32 ;
175
+
176
+ #[ rust_stack]
177
+ #[ inline( always) ]
178
+ #[ link_name="llvm.floor.f64" ]
104
179
pub fn floorf64 ( x : f64 ) -> f64 ;
105
180
181
+ /* NOTE: Needs LLVM 3.3
182
+ #[rust_stack]
183
+ #[link_name="llvm.ceil.f32"]
106
184
pub fn ceilf32(x: f32) -> f32;
185
+
186
+ #[rust_stack]
187
+ #[link_name="llvm.ceil.f64"]
107
188
pub fn ceilf64(x: f64) -> f64;
108
189
190
+ #[rust_stack]
191
+ #[link_name="llvm.trunc.f32"]
109
192
pub fn truncf32(x: f32) -> f32;
193
+
194
+ #[rust_stack]
195
+ #[link_name="llvm.trunc.f64"]
110
196
pub fn truncf64(x: f64) -> f64;
197
+ */
111
198
199
+ #[ rust_stack]
200
+ #[ inline( always) ]
201
+ #[ link_name="llvm.ctpop.i8" ]
112
202
pub fn ctpop8 ( x : i8 ) -> i8 ;
203
+
204
+ #[ rust_stack]
205
+ #[ inline( always) ]
206
+ #[ link_name="llvm.ctpop.i16" ]
113
207
pub fn ctpop16 ( x : i16 ) -> i16 ;
114
- pub fn ctpop32 ( x : i32 ) -> i32 ;
115
- pub fn ctpop64 ( x : i64 ) -> i64 ;
116
208
117
- pub fn ctlz8 ( x : i8 ) -> i8 ;
118
- pub fn ctlz16 ( x : i16 ) -> i16 ;
119
- pub fn ctlz32 ( x : i32 ) -> i32 ;
120
- pub fn ctlz64 ( x : i64 ) -> i64 ;
209
+ # [ rust_stack ]
210
+ # [ inline ( always ) ]
211
+ # [ link_name= "llvm.ctpop. i32" ]
212
+ pub fn ctpop32 ( x : i32 ) -> i32 ;
121
213
122
- pub fn cttz8 ( x : i8 ) -> i8 ;
123
- pub fn cttz16 ( x : i16 ) -> i16 ;
124
- pub fn cttz32 ( x : i32 ) -> i32 ;
125
- pub fn cttz64 ( x : i64 ) -> i64 ;
214
+ # [ rust_stack ]
215
+ # [ inline ( always ) ]
216
+ # [ link_name= "llvm.ctpop.i64" ]
217
+ pub fn ctpop64 ( x : i64 ) -> i64 ;
126
218
219
+ /* NOTE: Needs i1 constants
220
+ #[rust_stack]
221
+ #[inline(always)]
222
+ #[link_name="llvm.ctlz.i8"]
223
+ pub fn ctlz8(x: i8, is_zero_undef: bool) -> i8;
224
+
225
+ #[rust_stack]
226
+ #[inline(always)]
227
+ #[link_name="llvm.ctlz.i16"]
228
+ pub fn ctlz16(x: i16, is_zero_undef: bool) -> i16;
229
+
230
+ #[rust_stack]
231
+ #[inline(always)]
232
+ #[link_name="llvm.ctlz.i32"]
233
+ pub fn ctlz32(x: i32, is_zero_undef: bool) -> i32;
234
+
235
+ #[rust_stack]
236
+ #[inline(always)]
237
+ #[link_name="llvm.ctlz.i64"]
238
+ pub fn ctlz64(x: i64, is_zero_undef: bool) -> i64;
239
+
240
+ #[rust_stack]
241
+ #[inline(always)]
242
+ #[link_name="llvm.cttz.i8"]
243
+ pub fn cttz8(x: i8, is_zero_undef: bool) -> i8;
244
+
245
+ #[rust_stack]
246
+ #[inline(always)]
247
+ #[link_name="llvm.cttz.i16"]
248
+ pub fn cttz16(x: i16, is_zero_undef: bool) -> i16;
249
+
250
+ #[rust_stack]
251
+ #[inline(always)]
252
+ #[link_name="llvm.cttz.i32"]
253
+ pub fn cttz32(x: i32, is_zero_undef: bool) -> i32;
254
+
255
+ #[rust_stack]
256
+ #[inline(always)]
257
+ #[link_name="llvm.cttz.i64"]
258
+ pub fn cttz64(x: i64, is_zero_undef: bool) -> i64;
259
+ */
260
+
261
+ #[ rust_stack]
262
+ #[ inline( always) ]
263
+ #[ link_name="llvm.bswap.i16" ]
127
264
pub fn bswap16 ( x : i16 ) -> i16 ;
265
+
266
+ #[ rust_stack]
267
+ #[ inline( always) ]
268
+ #[ link_name="llvm.bswap.i32" ]
128
269
pub fn bswap32 ( x : i32 ) -> i32 ;
270
+
271
+ #[ rust_stack]
272
+ #[ inline( always) ]
273
+ #[ link_name="llvm.bswap.i64" ]
129
274
pub fn bswap64 ( x : i64 ) -> i64 ;
130
275
}
131
-
0 commit comments