sdiv.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use int::specialized_div_rem::*;
  2. intrinsics! {
  3. #[maybe_use_optimized_c_shim]
  4. #[arm_aeabi_alias = __aeabi_idiv]
  5. /// Returns `n / d`
  6. pub extern "C" fn __divsi3(a: i32, b: i32) -> i32 {
  7. i32_div_rem(a, b).0
  8. }
  9. #[maybe_use_optimized_c_shim]
  10. /// Returns `n % d`
  11. pub extern "C" fn __modsi3(a: i32, b: i32) -> i32 {
  12. i32_div_rem(a, b).1
  13. }
  14. #[maybe_use_optimized_c_shim]
  15. /// Returns `n / d` and sets `*rem = n % d`
  16. pub extern "C" fn __divmodsi4(a: i32, b: i32, rem: &mut i32) -> i32 {
  17. let quo_rem = i32_div_rem(a, b);
  18. *rem = quo_rem.1;
  19. quo_rem.0
  20. }
  21. #[maybe_use_optimized_c_shim]
  22. /// Returns `n / d`
  23. pub extern "C" fn __divdi3(a: i64, b: i64) -> i64 {
  24. i64_div_rem(a, b).0
  25. }
  26. #[maybe_use_optimized_c_shim]
  27. /// Returns `n % d`
  28. pub extern "C" fn __moddi3(a: i64, b: i64) -> i64 {
  29. i64_div_rem(a, b).1
  30. }
  31. #[maybe_use_optimized_c_shim]
  32. /// Returns `n / d` and sets `*rem = n % d`
  33. pub extern "C" fn __divmoddi4(a: i64, b: i64, rem: &mut i64) -> i64 {
  34. let quo_rem = i64_div_rem(a, b);
  35. *rem = quo_rem.1;
  36. quo_rem.0
  37. }
  38. #[win64_128bit_abi_hack]
  39. /// Returns `n / d`
  40. pub extern "C" fn __divti3(a: i128, b: i128) -> i128 {
  41. i128_div_rem(a, b).0
  42. }
  43. #[win64_128bit_abi_hack]
  44. /// Returns `n % d`
  45. pub extern "C" fn __modti3(a: i128, b: i128) -> i128 {
  46. i128_div_rem(a, b).1
  47. }
  48. // LLVM does not currently have a `__divmodti4` function, but GCC does
  49. #[maybe_use_optimized_c_shim]
  50. /// Returns `n / d` and sets `*rem = n % d`
  51. pub extern "C" fn __divmodti4(a: i128, b: i128, rem: &mut i128) -> i128 {
  52. let quo_rem = i128_div_rem(a, b);
  53. *rem = quo_rem.1;
  54. quo_rem.0
  55. }
  56. }