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
1719extern 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.
2830mod 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
273287fn 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