Skip to content
This repository was archived by the owner on Dec 9, 2018. It is now read-only.

Commit 0b69a47

Browse files
author
Jorge Aparicio
committed
list intrinsics provided by compiler_builtins
cc rust-lang/rust#36636
1 parent 46b90b7 commit 0b69a47

File tree

2 files changed

+134
-0
lines changed

2 files changed

+134
-0
lines changed

ci/script.sh

+13
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ run panic --release
3434
"
3535
}
3636

37+
run_intrinsics() {
38+
if [[ $LINUX ]]; then
39+
try 'intrinsics' "cargo build --target $TARGET --bin intrinsics"
40+
41+
cp src/bin/intrinsics.rs{,.bk}
42+
sed -i '/compiler_builtins/d' src/bin/intrinsics.rs
43+
echo 'Intrinsics provided by compiler_builtins'
44+
cargo build --target $TARGET --bin intrinsics 2>&1 | grep undefined | cut -d'`' -f2
45+
mv src/bin/intrinsics.rs{.bk,}
46+
fi
47+
}
48+
3749
run_unit_tests() {
3850
if [[ $QEMU_LD_PREFIX ]]; then
3951
export RUST_TEST_THREADS=1
@@ -132,6 +144,7 @@ su -c 'bash ci/install.sh && bash ci/script.sh' $user
132144
"
133145
else
134146
run_apps
147+
run_intrinsics
135148
run_unit_tests
136149
run_libc_test
137150
run_std_tests

src/bin/intrinsics.rs

+121
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#![allow(unused_features)]
2+
#![deny(dead_code)]
3+
#![feature(compiler_builtins_lib)]
4+
#![feature(lang_items)]
5+
#![feature(start)]
6+
#![no_std]
7+
8+
extern crate compiler_builtins;
9+
10+
// adddf3
11+
fn aeabi_dadd(a: f64, b: f64) -> f64 {
12+
a + b
13+
}
14+
15+
// divdf3
16+
fn aeabi_ddiv(a: f64, b: f64) -> f64 {
17+
a / b
18+
}
19+
20+
// muldf3
21+
fn aeabi_dmul(a: f64, b: f64) -> f64 {
22+
a * b
23+
}
24+
25+
// subdf3
26+
fn aeabi_dsub(a: f64, b: f64) -> f64 {
27+
a - b
28+
}
29+
30+
// addsf3
31+
fn aeabi_fadd(a: f32, b: f32) -> f32 {
32+
a + b
33+
}
34+
35+
// divsf3
36+
fn aeabi_fdiv(a: f32, b: f32) -> f32 {
37+
a / b
38+
}
39+
40+
// mulsf3
41+
fn aeabi_fmul(a: f32, b: f32) -> f32 {
42+
a * b
43+
}
44+
45+
// subsf3
46+
fn aeabi_fsub(a: f32, b: f32) -> f32 {
47+
a - b
48+
}
49+
50+
fn aeabi_idivmod(a: i32, b: i32) -> i32 {
51+
a % b
52+
}
53+
54+
// divdi3
55+
fn aeabi_ldivmod(a: i64, b: i64) -> i64 {
56+
a / b
57+
}
58+
59+
fn aeabi_uidiv(a: u32, b: u32) -> u32 {
60+
a / b
61+
}
62+
63+
fn aeabi_uidivmod(a: u32, b: u32) -> u32 {
64+
a % b
65+
}
66+
67+
// udivdi3
68+
fn aeabi_uldivmod(a: u64, b: u64) -> u64 {
69+
a * b
70+
}
71+
72+
fn moddi3(a: i64, b: i64) -> i64 {
73+
a % b
74+
}
75+
76+
fn mulodi4(a: i64, b: i64) -> i64 {
77+
a * b
78+
}
79+
80+
fn umoddi3(a: u64, b: u64) -> u64 {
81+
a % b
82+
}
83+
84+
#[start]
85+
fn main(_: isize, _: *const *const u8) -> isize {
86+
aeabi_dadd(2., 3.);
87+
aeabi_ddiv(2., 3.);
88+
aeabi_dmul(2., 3.);
89+
aeabi_dsub(2., 3.);
90+
aeabi_fadd(2., 3.);
91+
aeabi_fdiv(2., 3.);
92+
aeabi_fmul(2., 3.);
93+
aeabi_fsub(2., 3.);
94+
aeabi_idivmod(2, 3);
95+
aeabi_ldivmod(2, 3);
96+
aeabi_uidiv(2, 3);
97+
aeabi_uidivmod(2, 3);
98+
aeabi_uldivmod(2, 3);
99+
moddi3(2, 3);
100+
mulodi4(2, 3);
101+
umoddi3(2, 3);
102+
103+
0
104+
}
105+
106+
#[link(name = "c")]
107+
extern "C" {}
108+
109+
// ARM targets need these symbols
110+
#[no_mangle]
111+
pub fn __aeabi_unwind_cpp_pr0() {}
112+
113+
#[no_mangle]
114+
pub fn __aeabi_unwind_cpp_pr1() {}
115+
116+
// Lang items
117+
#[lang = "eh_personality"]
118+
extern fn eh_personality() {}
119+
120+
#[lang = "panic_fmt"]
121+
extern fn panic_fmt() {}

0 commit comments

Comments
 (0)