|
12 | 12 | #![feature(lang_items)]
|
13 | 13 | #![feature(libc)]
|
14 | 14 | #![feature(start)]
|
| 15 | +#![feature(i128_type)] |
15 | 16 | #![no_std]
|
16 | 17 |
|
17 | 18 | #[cfg(not(thumb))]
|
@@ -300,6 +301,42 @@ mod intrinsics {
|
300 | 301 | pub fn umoddi3(a: u64, b: u64) -> u64 {
|
301 | 302 | a % b
|
302 | 303 | }
|
| 304 | + |
| 305 | + pub fn muloti4(a: u128, b: u128) -> Option<u128> { |
| 306 | + a.checked_mul(b) |
| 307 | + } |
| 308 | + |
| 309 | + pub fn multi3(a: u128, b: u128) -> u128 { |
| 310 | + a.wrapping_mul(b) |
| 311 | + } |
| 312 | + |
| 313 | + pub fn ashlti3(a: u128, b: usize) -> u128 { |
| 314 | + a >> b |
| 315 | + } |
| 316 | + |
| 317 | + pub fn ashrti3(a: u128, b: usize) -> u128 { |
| 318 | + a << b |
| 319 | + } |
| 320 | + |
| 321 | + pub fn lshrti3(a: i128, b: usize) -> i128 { |
| 322 | + a >> b |
| 323 | + } |
| 324 | + |
| 325 | + pub fn udivti3(a: u128, b: u128) -> u128 { |
| 326 | + a / b |
| 327 | + } |
| 328 | + |
| 329 | + pub fn umodti3(a: u128, b: u128) -> u128 { |
| 330 | + a % b |
| 331 | + } |
| 332 | + |
| 333 | + pub fn divti3(a: i128, b: i128) -> i128 { |
| 334 | + a / b |
| 335 | + } |
| 336 | + |
| 337 | + pub fn modti3(a: i128, b: i128) -> i128 { |
| 338 | + a % b |
| 339 | + } |
303 | 340 | }
|
304 | 341 |
|
305 | 342 | #[cfg(feature = "c")]
|
@@ -356,6 +393,15 @@ fn run() {
|
356 | 393 | bb(powidf2(bb(2.), bb(3)));
|
357 | 394 | bb(powisf2(bb(2.), bb(3)));
|
358 | 395 | bb(umoddi3(bb(2), bb(3)));
|
| 396 | + bb(muloti4(bb(2), bb(2))); |
| 397 | + bb(multi3(bb(2), bb(2))); |
| 398 | + bb(ashlti3(bb(2), bb(2))); |
| 399 | + bb(ashrti3(bb(2), bb(2))); |
| 400 | + bb(lshrti3(bb(2), bb(2))); |
| 401 | + bb(udivti3(bb(2), bb(2))); |
| 402 | + bb(umodti3(bb(2), bb(2))); |
| 403 | + bb(divti3(bb(2), bb(2))); |
| 404 | + bb(modti3(bb(2), bb(2))); |
359 | 405 | }
|
360 | 406 |
|
361 | 407 | #[cfg(all(feature = "c", not(thumb)))]
|
|
0 commit comments