|
4 | 4 | // to link due to the missing intrinsic (symbol).
|
5 | 5 |
|
6 | 6 | #![allow(unused_features)]
|
| 7 | +#![cfg_attr(thumb, no_main)] |
7 | 8 | #![deny(dead_code)]
|
| 9 | +#![feature(asm)] |
8 | 10 | #![feature(core_float)]
|
9 | 11 | #![feature(lang_items)]
|
10 | 12 | #![feature(libc)]
|
11 | 13 | #![feature(start)]
|
12 | 14 | #![no_std]
|
13 |
| -#![cfg_attr(thumb, no_main)] |
14 | 15 |
|
15 | 16 | #[cfg(not(thumb))]
|
16 | 17 | extern crate libc;
|
@@ -304,50 +305,56 @@ mod intrinsics {
|
304 | 305 | fn run() {
|
305 | 306 | use intrinsics::*;
|
306 | 307 |
|
307 |
| - aeabi_d2f(2.); |
308 |
| - aeabi_d2i(2.); |
309 |
| - aeabi_d2l(2.); |
310 |
| - aeabi_d2uiz(2.); |
311 |
| - aeabi_d2ulz(2.); |
312 |
| - aeabi_dadd(2., 3.); |
313 |
| - aeabi_dcmpeq(2., 3.); |
314 |
| - aeabi_dcmpgt(2., 3.); |
315 |
| - aeabi_dcmplt(2., 3.); |
316 |
| - aeabi_ddiv(2., 3.); |
317 |
| - aeabi_dmul(2., 3.); |
318 |
| - aeabi_dsub(2., 3.); |
319 |
| - aeabi_f2d(2.); |
320 |
| - aeabi_f2iz(2.); |
321 |
| - aeabi_f2lz(2.); |
322 |
| - aeabi_f2uiz(2.); |
323 |
| - aeabi_f2ulz(2.); |
324 |
| - aeabi_fadd(2., 3.); |
325 |
| - aeabi_fcmpeq(2., 3.); |
326 |
| - aeabi_fcmpgt(2., 3.); |
327 |
| - aeabi_fcmplt(2., 3.); |
328 |
| - aeabi_fdiv(2., 3.); |
329 |
| - aeabi_fmul(2., 3.); |
330 |
| - aeabi_fsub(2., 3.); |
331 |
| - aeabi_i2d(2); |
332 |
| - aeabi_i2f(2); |
333 |
| - aeabi_idiv(2, 3); |
334 |
| - aeabi_idivmod(2, 3); |
335 |
| - aeabi_l2d(2); |
336 |
| - aeabi_l2f(2); |
337 |
| - aeabi_ldivmod(2, 3); |
338 |
| - aeabi_lmul(2, 3); |
339 |
| - aeabi_ui2d(2); |
340 |
| - aeabi_ui2f(2); |
341 |
| - aeabi_uidiv(2, 3); |
342 |
| - aeabi_uidivmod(2, 3); |
343 |
| - aeabi_ul2d(2); |
344 |
| - aeabi_ul2f(2); |
345 |
| - aeabi_uldivmod(2, 3); |
346 |
| - moddi3(2, 3); |
347 |
| - mulodi4(2, 3); |
348 |
| - powidf2(2., 3); |
349 |
| - powisf2(2., 3); |
350 |
| - umoddi3(2, 3); |
| 308 | + // A copy of "test::black_box". Used to prevent LLVM from optimizing away the intrinsics during LTO |
| 309 | + fn bb<T>(dummy: T) -> T { |
| 310 | + unsafe { asm!("" : : "r"(&dummy)) } |
| 311 | + dummy |
| 312 | + } |
| 313 | + |
| 314 | + bb(aeabi_d2f(bb(2.))); |
| 315 | + bb(aeabi_d2i(bb(2.))); |
| 316 | + bb(aeabi_d2l(bb(2.))); |
| 317 | + bb(aeabi_d2uiz(bb(2.))); |
| 318 | + bb(aeabi_d2ulz(bb(2.))); |
| 319 | + bb(aeabi_dadd(bb(2.), bb(3.))); |
| 320 | + bb(aeabi_dcmpeq(bb(2.), bb(3.))); |
| 321 | + bb(aeabi_dcmpgt(bb(2.), bb(3.))); |
| 322 | + bb(aeabi_dcmplt(bb(2.), bb(3.))); |
| 323 | + bb(aeabi_ddiv(bb(2.), bb(3.))); |
| 324 | + bb(aeabi_dmul(bb(2.), bb(3.))); |
| 325 | + bb(aeabi_dsub(bb(2.), bb(3.))); |
| 326 | + bb(aeabi_f2d(bb(2.))); |
| 327 | + bb(aeabi_f2iz(bb(2.))); |
| 328 | + bb(aeabi_f2lz(bb(2.))); |
| 329 | + bb(aeabi_f2uiz(bb(2.))); |
| 330 | + bb(aeabi_f2ulz(bb(2.))); |
| 331 | + bb(aeabi_fadd(bb(2.), bb(3.))); |
| 332 | + bb(aeabi_fcmpeq(bb(2.), bb(3.))); |
| 333 | + bb(aeabi_fcmpgt(bb(2.), bb(3.))); |
| 334 | + bb(aeabi_fcmplt(bb(2.), bb(3.))); |
| 335 | + bb(aeabi_fdiv(bb(2.), bb(3.))); |
| 336 | + bb(aeabi_fmul(bb(2.), bb(3.))); |
| 337 | + bb(aeabi_fsub(bb(2.), bb(3.))); |
| 338 | + bb(aeabi_i2d(bb(2))); |
| 339 | + bb(aeabi_i2f(bb(2))); |
| 340 | + bb(aeabi_idiv(bb(2), bb(3))); |
| 341 | + bb(aeabi_idivmod(bb(2), bb(3))); |
| 342 | + bb(aeabi_l2d(bb(2))); |
| 343 | + bb(aeabi_l2f(bb(2))); |
| 344 | + bb(aeabi_ldivmod(bb(2), bb(3))); |
| 345 | + bb(aeabi_lmul(bb(2), bb(3))); |
| 346 | + bb(aeabi_ui2d(bb(2))); |
| 347 | + bb(aeabi_ui2f(bb(2))); |
| 348 | + bb(aeabi_uidiv(bb(2), bb(3))); |
| 349 | + bb(aeabi_uidivmod(bb(2), bb(3))); |
| 350 | + bb(aeabi_ul2d(bb(2))); |
| 351 | + bb(aeabi_ul2f(bb(2))); |
| 352 | + bb(aeabi_uldivmod(bb(2), bb(3))); |
| 353 | + bb(moddi3(bb(2), bb(3))); |
| 354 | + bb(mulodi4(bb(2), bb(3))); |
| 355 | + bb(powidf2(bb(2.), bb(3))); |
| 356 | + bb(powisf2(bb(2.), bb(3))); |
| 357 | + bb(umoddi3(bb(2), bb(3))); |
351 | 358 | }
|
352 | 359 |
|
353 | 360 | #[cfg(all(feature = "c", not(thumb)))]
|
|
0 commit comments