@@ -28,13 +28,36 @@ extern "C" {}
28
28
// have an additional comment: the function name is the ARM name for the intrinsic and the comment
29
29
// in the non-ARM name for the intrinsic.
30
30
mod intrinsics {
31
+ /* f16 operations */
32
+
33
+ pub fn extendhfsf ( x : f16 ) -> f32 {
34
+ x as f32
35
+ }
36
+
37
+ pub fn extendhfdf ( x : f16 ) -> f64 {
38
+ x as f64
39
+ }
40
+
41
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
42
+ pub fn extendhftf ( x : f16 ) -> f128 {
43
+ x as f128
44
+ }
45
+
31
46
/* f32 operations */
32
47
48
+ pub fn truncsfhf ( x : f32 ) -> f16 {
49
+ x as f16
50
+ }
51
+
33
52
// extendsfdf2
34
53
pub fn aeabi_f2d ( x : f32 ) -> f64 {
35
54
x as f64
36
55
}
37
56
57
+ pub fn extendsftf ( x : f32 ) -> f128 {
58
+ x as f128
59
+ }
60
+
38
61
// fixsfsi
39
62
pub fn aeabi_f2iz ( x : f32 ) -> i32 {
40
63
x as i32
@@ -152,6 +175,75 @@ mod intrinsics {
152
175
a - b
153
176
}
154
177
178
+ /* f128 operations */
179
+
180
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
181
+ pub fn trunctfhf ( x : f128 ) -> f16 {
182
+ x as f16
183
+ }
184
+
185
+ pub fn trunctfsf ( x : f128 ) -> f32 {
186
+ x as f32
187
+ }
188
+
189
+ pub fn trunctfdf ( x : f128 ) -> f64 {
190
+ x as f64
191
+ }
192
+
193
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
194
+ pub fn fixtfsi ( x : f128 ) -> i32 {
195
+ x as i32
196
+ }
197
+
198
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
199
+ pub fn fixtfdi ( x : f128 ) -> i64 {
200
+ x as i64
201
+ }
202
+
203
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
204
+ pub fn fixtfti ( x : f128 ) -> i128 {
205
+ x as i128
206
+ }
207
+
208
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
209
+ pub fn fixunstfsi ( x : f128 ) -> u32 {
210
+ x as u32
211
+ }
212
+
213
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
214
+ pub fn fixunstfdi ( x : f128 ) -> u64 {
215
+ x as u64
216
+ }
217
+
218
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
219
+ pub fn fixunstfti ( x : f128 ) -> u128 {
220
+ x as u128
221
+ }
222
+
223
+ pub fn addtf ( a : f128 , b : f128 ) -> f128 {
224
+ a + b
225
+ }
226
+
227
+ pub fn eqtf ( a : f128 , b : f128 ) -> bool {
228
+ a == b
229
+ }
230
+
231
+ pub fn gttf ( a : f128 , b : f128 ) -> bool {
232
+ a > b
233
+ }
234
+
235
+ pub fn lttf ( a : f128 , b : f128 ) -> bool {
236
+ a < b
237
+ }
238
+
239
+ pub fn multf ( a : f128 , b : f128 ) -> f128 {
240
+ a * b
241
+ }
242
+
243
+ pub fn subtf ( a : f128 , b : f128 ) -> f128 {
244
+ a - b
245
+ }
246
+
155
247
/* i32 operations */
156
248
157
249
// floatsidf
@@ -288,6 +380,9 @@ fn run() {
288
380
use core:: hint:: black_box as bb;
289
381
use intrinsics:: * ;
290
382
383
+ // FIXME(f16_f128): some PPC f128 <-> int conversion functions have the wrong names
384
+
385
+ bb ( addtf ( bb ( 2. ) , bb ( 2. ) ) ) ;
291
386
bb ( aeabi_d2f ( bb ( 2. ) ) ) ;
292
387
bb ( aeabi_d2i ( bb ( 2. ) ) ) ;
293
388
bb ( aeabi_d2l ( bb ( 2. ) ) ) ;
@@ -327,18 +422,45 @@ fn run() {
327
422
bb ( aeabi_ul2d ( bb ( 2 ) ) ) ;
328
423
bb ( aeabi_ul2f ( bb ( 2 ) ) ) ;
329
424
bb ( aeabi_uldivmod ( bb ( 2 ) , bb ( 3 ) ) ) ;
425
+ bb ( ashlti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
426
+ bb ( ashrti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
427
+ bb ( divti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
428
+ bb ( eqtf ( bb ( 2. ) , bb ( 2. ) ) ) ;
429
+ bb ( extendhfdf ( bb ( 2. ) ) ) ;
430
+ bb ( extendhfsf ( bb ( 2. ) ) ) ;
431
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
432
+ bb ( extendhftf ( bb ( 2. ) ) ) ;
433
+ bb ( extendsftf ( bb ( 2. ) ) ) ;
434
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
435
+ bb ( fixtfdi ( bb ( 2. ) ) ) ;
436
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
437
+ bb ( fixtfsi ( bb ( 2. ) ) ) ;
438
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
439
+ bb ( fixtfti ( bb ( 2. ) ) ) ;
440
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
441
+ bb ( fixunstfdi ( bb ( 2. ) ) ) ;
442
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
443
+ bb ( fixunstfsi ( bb ( 2. ) ) ) ;
444
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
445
+ bb ( fixunstfti ( bb ( 2. ) ) ) ;
446
+ bb ( gttf ( bb ( 2. ) , bb ( 2. ) ) ) ;
447
+ bb ( lshrti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
448
+ bb ( lttf ( bb ( 2. ) , bb ( 2. ) ) ) ;
330
449
bb ( moddi3 ( bb ( 2 ) , bb ( 3 ) ) ) ;
450
+ bb ( modti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
331
451
bb ( mulodi4 ( bb ( 2 ) , bb ( 3 ) ) ) ;
332
- bb ( umoddi3 ( bb ( 2 ) , bb ( 3 ) ) ) ;
333
452
bb ( muloti4 ( bb ( 2 ) , bb ( 2 ) ) ) ;
453
+ bb ( multf ( bb ( 2. ) , bb ( 2. ) ) ) ;
334
454
bb ( multi3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
335
- bb ( ashlti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
336
- bb ( ashrti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
337
- bb ( lshrti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
455
+ bb ( subtf ( bb ( 2. ) , bb ( 2. ) ) ) ;
456
+ bb ( truncsfhf ( bb ( 2. ) ) ) ;
457
+ bb ( trunctfdf ( bb ( 2. ) ) ) ;
458
+ #[ cfg( not( any( target_arch = "powerpc" , target_arch = "powerpc64" ) ) ) ]
459
+ bb ( trunctfhf ( bb ( 2. ) ) ) ;
460
+ bb ( trunctfsf ( bb ( 2. ) ) ) ;
338
461
bb ( udivti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
462
+ bb ( umoddi3 ( bb ( 2 ) , bb ( 3 ) ) ) ;
339
463
bb ( umodti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
340
- bb ( divti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
341
- bb ( modti3 ( bb ( 2 ) , bb ( 2 ) ) ) ;
342
464
343
465
something_with_a_dtor ( & || assert_eq ! ( bb( 1 ) , 1 ) ) ;
344
466
0 commit comments