Skip to content

Commit 182a8fb

Browse files
committed
Organize functions in intrinsics example
1 parent 1f701b0 commit 182a8fb

File tree

1 file changed

+96
-83
lines changed

1 file changed

+96
-83
lines changed

examples/intrinsics.rs

Lines changed: 96 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
#![allow(internal_features)]
99
#![cfg_attr(thumb, no_main)]
1010
#![deny(dead_code)]
11+
#![feature(allocator_api)]
1112
#![feature(bench_black_box)]
13+
#![feature(f128)]
14+
#![feature(f16)]
1215
#![feature(lang_items)]
1316
#![feature(start)]
14-
#![feature(allocator_api)]
1517
#![no_std]
1618

1719
extern crate panic_handler;
@@ -26,126 +28,132 @@ extern "C" {}
2628
// have an additional comment: the function name is the ARM name for the intrinsic and the comment
2729
// in the non-ARM name for the intrinsic.
2830
mod intrinsics {
29-
// truncdfsf2
30-
pub fn aeabi_d2f(x: f64) -> f32 {
31-
x as f32
31+
/* f32 operations */
32+
33+
// extendsfdf2
34+
pub fn aeabi_f2d(x: f32) -> f64 {
35+
x as f64
3236
}
3337

34-
// fixdfsi
35-
pub fn aeabi_d2i(x: f64) -> i32 {
38+
// fixsfsi
39+
pub fn aeabi_f2iz(x: f32) -> i32 {
3640
x as i32
3741
}
3842

39-
// fixdfdi
40-
pub fn aeabi_d2l(x: f64) -> i64 {
43+
// fixsfdi
44+
pub fn aeabi_f2lz(x: f32) -> i64 {
4145
x as i64
4246
}
4347

44-
// fixunsdfsi
45-
pub fn aeabi_d2uiz(x: f64) -> u32 {
48+
// fixunssfsi
49+
pub fn aeabi_f2uiz(x: f32) -> u32 {
4650
x as u32
4751
}
4852

49-
// fixunsdfdi
50-
pub fn aeabi_d2ulz(x: f64) -> u64 {
53+
// fixunssfdi
54+
pub fn aeabi_f2ulz(x: f32) -> u64 {
5155
x as u64
5256
}
5357

54-
// adddf3
55-
pub fn aeabi_dadd(a: f64, b: f64) -> f64 {
58+
// addsf3
59+
pub fn aeabi_fadd(a: f32, b: f32) -> f32 {
5660
a + b
5761
}
5862

59-
// eqdf2
60-
pub fn aeabi_dcmpeq(a: f64, b: f64) -> bool {
63+
// eqsf2
64+
pub fn aeabi_fcmpeq(a: f32, b: f32) -> bool {
6165
a == b
6266
}
6367

64-
// gtdf2
65-
pub fn aeabi_dcmpgt(a: f64, b: f64) -> bool {
68+
// gtsf2
69+
pub fn aeabi_fcmpgt(a: f32, b: f32) -> bool {
6670
a > b
6771
}
6872

69-
// ltdf2
70-
pub fn aeabi_dcmplt(a: f64, b: f64) -> bool {
73+
// ltsf2
74+
pub fn aeabi_fcmplt(a: f32, b: f32) -> bool {
7175
a < b
7276
}
7377

74-
// divdf3
75-
pub fn aeabi_ddiv(a: f64, b: f64) -> f64 {
78+
// divsf3
79+
pub fn aeabi_fdiv(a: f32, b: f32) -> f32 {
7680
a / b
7781
}
7882

79-
// muldf3
80-
pub fn aeabi_dmul(a: f64, b: f64) -> f64 {
83+
// mulsf3
84+
pub fn aeabi_fmul(a: f32, b: f32) -> f32 {
8185
a * b
8286
}
8387

84-
// subdf3
85-
pub fn aeabi_dsub(a: f64, b: f64) -> f64 {
88+
// subsf3
89+
pub fn aeabi_fsub(a: f32, b: f32) -> f32 {
8690
a - b
8791
}
8892

89-
// extendsfdf2
90-
pub fn aeabi_f2d(x: f32) -> f64 {
91-
x as f64
93+
/* f64 operations */
94+
95+
// truncdfsf2
96+
pub fn aeabi_d2f(x: f64) -> f32 {
97+
x as f32
9298
}
9399

94-
// fixsfsi
95-
pub fn aeabi_f2iz(x: f32) -> i32 {
100+
// fixdfsi
101+
pub fn aeabi_d2i(x: f64) -> i32 {
96102
x as i32
97103
}
98104

99-
// fixsfdi
100-
pub fn aeabi_f2lz(x: f32) -> i64 {
105+
// fixdfdi
106+
pub fn aeabi_d2l(x: f64) -> i64 {
101107
x as i64
102108
}
103109

104-
// fixunssfsi
105-
pub fn aeabi_f2uiz(x: f32) -> u32 {
110+
// fixunsdfsi
111+
pub fn aeabi_d2uiz(x: f64) -> u32 {
106112
x as u32
107113
}
108114

109-
// fixunssfdi
110-
pub fn aeabi_f2ulz(x: f32) -> u64 {
115+
// fixunsdfdi
116+
pub fn aeabi_d2ulz(x: f64) -> u64 {
111117
x as u64
112118
}
113119

114-
// addsf3
115-
pub fn aeabi_fadd(a: f32, b: f32) -> f32 {
120+
// adddf3
121+
pub fn aeabi_dadd(a: f64, b: f64) -> f64 {
116122
a + b
117123
}
118124

119-
// eqsf2
120-
pub fn aeabi_fcmpeq(a: f32, b: f32) -> bool {
125+
// eqdf2
126+
pub fn aeabi_dcmpeq(a: f64, b: f64) -> bool {
121127
a == b
122128
}
123129

124-
// gtsf2
125-
pub fn aeabi_fcmpgt(a: f32, b: f32) -> bool {
130+
// gtdf2
131+
pub fn aeabi_dcmpgt(a: f64, b: f64) -> bool {
126132
a > b
127133
}
128134

129-
// ltsf2
130-
pub fn aeabi_fcmplt(a: f32, b: f32) -> bool {
135+
// ltdf2
136+
pub fn aeabi_dcmplt(a: f64, b: f64) -> bool {
131137
a < b
132138
}
133139

134-
// divsf3
135-
pub fn aeabi_fdiv(a: f32, b: f32) -> f32 {
140+
// divdf3
141+
pub fn aeabi_ddiv(a: f64, b: f64) -> f64 {
136142
a / b
137143
}
138144

139-
// mulsf3
140-
pub fn aeabi_fmul(a: f32, b: f32) -> f32 {
145+
// muldf3
146+
pub fn aeabi_dmul(a: f64, b: f64) -> f64 {
141147
a * b
142148
}
143149

144-
// subsf3
145-
pub fn aeabi_fsub(a: f32, b: f32) -> f32 {
150+
// subdf3
151+
pub fn aeabi_dsub(a: f64, b: f64) -> f64 {
146152
a - b
147153
}
148154

155+
/* i32 operations */
156+
149157
// floatsidf
150158
pub fn aeabi_i2d(x: i32) -> f64 {
151159
x as f64
@@ -164,26 +172,52 @@ mod intrinsics {
164172
a % b
165173
}
166174

175+
/* i64 operations */
176+
177+
// floatdisf
178+
pub fn aeabi_l2f(x: i64) -> f32 {
179+
x as f32
180+
}
181+
167182
// floatdidf
168183
pub fn aeabi_l2d(x: i64) -> f64 {
169184
x as f64
170185
}
171186

172-
// floatdisf
173-
pub fn aeabi_l2f(x: i64) -> f32 {
174-
x as f32
187+
pub fn mulodi4(a: i64, b: i64) -> i64 {
188+
a * b
175189
}
176190

177191
// divdi3
178192
pub fn aeabi_ldivmod(a: i64, b: i64) -> i64 {
179193
a / b
180194
}
181195

196+
pub fn moddi3(a: i64, b: i64) -> i64 {
197+
a % b
198+
}
199+
182200
// muldi3
183201
pub fn aeabi_lmul(a: i64, b: i64) -> i64 {
184202
a.wrapping_mul(b)
185203
}
186204

205+
/* i128 operations */
206+
207+
pub fn lshrti3(a: i128, b: usize) -> i128 {
208+
a >> b
209+
}
210+
211+
pub fn divti3(a: i128, b: i128) -> i128 {
212+
a / b
213+
}
214+
215+
pub fn modti3(a: i128, b: i128) -> i128 {
216+
a % b
217+
}
218+
219+
/* u32 operations */
220+
187221
// floatunsidf
188222
pub fn aeabi_ui2d(x: u32) -> f64 {
189223
x as f64
@@ -202,33 +236,29 @@ mod intrinsics {
202236
a % b
203237
}
204238

205-
// floatundidf
206-
pub fn aeabi_ul2d(x: u64) -> f64 {
207-
x as f64
208-
}
239+
/* u64 operations */
209240

210241
// floatundisf
211242
pub fn aeabi_ul2f(x: u64) -> f32 {
212243
x as f32
213244
}
214245

215-
// udivdi3
216-
pub fn aeabi_uldivmod(a: u64, b: u64) -> u64 {
217-
a * b
218-
}
219-
220-
pub fn moddi3(a: i64, b: i64) -> i64 {
221-
a % b
246+
// floatundidf
247+
pub fn aeabi_ul2d(x: u64) -> f64 {
248+
x as f64
222249
}
223250

224-
pub fn mulodi4(a: i64, b: i64) -> i64 {
251+
// udivdi3
252+
pub fn aeabi_uldivmod(a: u64, b: u64) -> u64 {
225253
a * b
226254
}
227255

228256
pub fn umoddi3(a: u64, b: u64) -> u64 {
229257
a % b
230258
}
231259

260+
/* u128 operations */
261+
232262
pub fn muloti4(a: u128, b: u128) -> Option<u128> {
233263
a.checked_mul(b)
234264
}
@@ -245,29 +275,13 @@ mod intrinsics {
245275
a << b
246276
}
247277

248-
pub fn lshrti3(a: i128, b: usize) -> i128 {
249-
a >> b
250-
}
251-
252278
pub fn udivti3(a: u128, b: u128) -> u128 {
253279
a / b
254280
}
255281

256282
pub fn umodti3(a: u128, b: u128) -> u128 {
257283
a % b
258284
}
259-
260-
pub fn divti3(a: i128, b: i128) -> i128 {
261-
a / b
262-
}
263-
264-
pub fn modti3(a: i128, b: i128) -> i128 {
265-
a % b
266-
}
267-
268-
pub fn udivsi3(a: u32, b: u32) -> u32 {
269-
a / b
270-
}
271285
}
272286

273287
fn run() {
@@ -325,7 +339,6 @@ fn run() {
325339
bb(umodti3(bb(2), bb(2)));
326340
bb(divti3(bb(2), bb(2)));
327341
bb(modti3(bb(2), bb(2)));
328-
bb(udivsi3(bb(2), bb(2)));
329342

330343
something_with_a_dtor(&|| assert_eq!(bb(1), 1));
331344

0 commit comments

Comments
 (0)