| ... | @@ -36,6 +36,23 @@ export fn __umoddi3(a: u64, b: u64) -> u64 { | ... | @@ -36,6 +36,23 @@ export fn __umoddi3(a: u64, b: u64) -> u64 { |
| 36 | return r; | 36 | return r; |
| 37 | } | 37 | } |
| 38 | | 38 | |
| | 39 | const AeabiUlDivModResult = extern struct { |
| | 40 | quot: u64, |
| | 41 | rem: u64, |
| | 42 | }; |
| | 43 | export fn __aeabi_uldivmod(numerator: u64, denominator: u64) -> AeabiUlDivModResult { |
| | 44 | @setDebugSafety(this, is_test); |
| | 45 | if (comptime isArmArch()) { |
| | 46 | @setGlobalLinkage(__aeabi_uldivmod, builtin.GlobalLinkage.LinkOnce); |
| | 47 | var result: AeabiUlDivModResult = undefined; |
| | 48 | result.quot = __udivmoddi4(numerator, denominator, &result.rem); |
| | 49 | return result; |
| | 50 | } |
| | 51 | |
| | 52 | @setGlobalLinkage(__aeabi_uldivmod, builtin.GlobalLinkage.Internal); |
| | 53 | unreachable; |
| | 54 | } |
| | 55 | |
| 39 | fn isArmArch() -> bool { | 56 | fn isArmArch() -> bool { |
| 40 | return switch (builtin.arch) { | 57 | return switch (builtin.arch) { |
| 41 | builtin.Arch.armv8_2a, | 58 | builtin.Arch.armv8_2a, |