| ... | ... | @@ -1,6 +1,6 @@ |
| 1 | 1 | const CHAR_BIT = 8; |
| 2 | | const du_int = c_ulonglong; |
| 3 | | const di_int = c_longlong; |
| 2 | const du_int = u64; |
| 3 | const di_int = i64; |
| 4 | 4 | const si_int = c_int; |
| 5 | 5 | const su_int = c_uint; |
| 6 | 6 | |
| ... | ... | @@ -204,11 +204,11 @@ export fn __udivmoddi4(a: du_int, b: du_int, maybe_rem: ?&du_int) -> du_int { |
| 204 | 204 | */ |
| 205 | 205 | const s: di_int = (di_int)(*(&du_int)(&d[0]) - *(&du_int)(&r[0]) - 1) >> (n_udword_bits - 1); |
| 206 | 206 | carry = su_int(s & 1); |
| 207 | | *(&du_int)(&r[0]) -= *(&du_int)(&d[0]) & c_ulonglong(s); |
| 207 | *(&du_int)(&r[0]) -= *(&du_int)(&d[0]) & u64(s); |
| 208 | 208 | |
| 209 | 209 | sr -= 1; |
| 210 | 210 | } |
| 211 | | *(&du_int)(&q[0]) = (*(&du_int)(&q[0]) << 1) | carry; |
| 211 | *(&du_int)(&q[0]) = (*(&du_int)(&q[0]) << 1) | u64(carry); |
| 212 | 212 | if (var rem ?= maybe_rem) { |
| 213 | 213 | *rem = *(&du_int)(&r[0]); |
| 214 | 214 | } |
| ... | ... | @@ -222,6 +222,17 @@ export fn __umoddi3(a: du_int, b: du_int) -> du_int { |
| 222 | 222 | return r; |
| 223 | 223 | } |
| 224 | 224 | |
| 225 | struct AeabiUlDivModResult { |
| 226 | quot: u64, |
| 227 | rem: u64, |
| 228 | } |
| 229 | #debug_safety(false) |
| 230 | export fn __aeabi_uldivmod(numerator: u64, denominator: u64) -> AeabiUlDivModResult{ |
| 231 | var result: AeabiUlDivModResult = undefined; |
| 232 | result.quot = __udivmoddi4(numerator, denominator, &result.rem); |
| 233 | return result; |
| 234 | } |
| 235 | |
| 225 | 236 | |
| 226 | 237 | #attribute("test") |
| 227 | 238 | fn test_umoddi3() { |