| ... | @@ -79,16 +79,16 @@ fn divmod(q: ?[]u32, r: ?[]u32, u: []const u32, v: []const u32) !void { | ... | @@ -79,16 +79,16 @@ fn divmod(q: ?[]u32, r: ?[]u32, u: []const u32, v: []const u32) !void { |
| 79 | } | 79 | } |
| 80 | break; | 80 | break; |
| 81 | } | 81 | } |
| 82 | var carry: u64 = 0; | 82 | var carry: i64 = 0; |
| 83 | i = 0; | 83 | i = 0; |
| 84 | while (i <= n) : (i += 1) { | 84 | while (i <= n) : (i += 1) { |
| 85 | const p = qhat * limb(&vn, i); | 85 | const p = qhat * limb(&vn, i); |
| 86 | const t = limb(&un, i + j) - carry - @truncate(u32, p); | 86 | const t = limb(&un, i + j) - carry - @truncate(u32, p); |
| 87 | limb_set(&un, i + j, @truncate(u32, t)); | 87 | limb_set(&un, i + j, @truncate(u32, @bitCast(u64, t))); |
| 88 | carry = @intCast(u64, p >> 32) - @intCast(u64, t >> 32); | 88 | carry = @intCast(i64, p >> 32) - @intCast(i64, t >> 32); |
| 89 | } | 89 | } |
| 90 | const t = limb(&un, j + n + 1) - carry; | 90 | const t = limb(&un, j + n + 1) -% carry; |
| 91 | limb_set(&un, j + n + 1, @truncate(u32, t)); | 91 | limb_set(&un, j + n + 1, @truncate(u32, @bitCast(u64, t))); |
| 92 | if (q) |q_| limb_set(q_, j, @truncate(u32, qhat)); | 92 | if (q) |q_| limb_set(q_, j, @truncate(u32, qhat)); |
| 93 | if (t < 0) { | 93 | if (t < 0) { |
| 94 | if (q) |q_| limb_set(q_, j, limb(q_, j) - 1); | 94 | if (q) |q_| limb_set(q_, j, limb(q_, j) - 1); |
| ... | @@ -99,7 +99,7 @@ fn divmod(q: ?[]u32, r: ?[]u32, u: []const u32, v: []const u32) !void { | ... | @@ -99,7 +99,7 @@ fn divmod(q: ?[]u32, r: ?[]u32, u: []const u32, v: []const u32) !void { |
| 99 | limb_set(&un, i + j, @truncate(u32, t2)); | 99 | limb_set(&un, i + j, @truncate(u32, t2)); |
| 100 | carry2 = t2 >> 32; | 100 | carry2 = t2 >> 32; |
| 101 | } | 101 | } |
| 102 | limb_set(un, j + n + 1, @truncate(u32, limb(&un, j + n + 1) + carry2)); | 102 | limb_set(&un, j + n + 1, @truncate(u32, limb(&un, j + n + 1) + carry2)); |
| 103 | } | 103 | } |
| 104 | if (j == 0) break; | 104 | if (j == 0) break; |
| 105 | } | 105 | } |