authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2024-07-29 03:28:30-07:00
committergravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2024-07-31 11:44:16-07:00
log00089347458b4c2544871666cc09570642b0d5b1
tree7d6d9d9be839703b27c48614ef3ca9a2471c8483
parenta69d403cb2c82ce6257bfa1ee7eba52f895c14e7
signaturelock-open Commit is signed but in an unrecognized format.

riscv: implement `@divExact`


1 files changed, 5 insertions(+), 3 deletions(-)

src/arch/riscv64/CodeGen.zig+5-3
......@@ -1510,6 +1510,7 @@ fn genBody(func: *Func, body: []const Air.Inst.Index) InnerError!void {
15101510 .mul,
15111511 .mul_wrap,
15121512 .div_trunc,
1513 .div_exact,
15131514 .rem,
15141515
15151516 .shl, .shl_exact,
......@@ -1533,7 +1534,6 @@ fn genBody(func: *Func, body: []const Air.Inst.Index) InnerError!void {
15331534 .mod,
15341535 .div_float,
15351536 .div_floor,
1536 .div_exact,
15371537 => return func.fail("TODO: {s}", .{@tagName(tag)}),
15381538
15391539 .sqrt,
......@@ -2563,10 +2563,12 @@ fn genBinOp(
25632563 .mul_wrap,
25642564 .rem,
25652565 .div_trunc,
2566 .div_exact,
25662567 => {
25672568 switch (tag) {
25682569 .rem,
25692570 .div_trunc,
2571 .div_exact,
25702572 => {
25712573 if (!math.isPowerOfTwo(bit_size)) {
25722574 try func.truncateRegister(lhs_ty, lhs_reg);
......@@ -2576,7 +2578,7 @@ fn genBinOp(
25762578 else => {
25772579 if (!math.isPowerOfTwo(bit_size))
25782580 return func.fail(
2579 "TODO: genBinOp verify {s} non-pow 2, found {}",
2581 "TODO: genBinOp verify if needs to truncate {s} non-pow 2, found {}",
25802582 .{ @tagName(tag), bit_size },
25812583 );
25822584 },
......@@ -2604,7 +2606,7 @@ fn genBinOp(
26042606 8, 16, 32 => if (is_unsigned) .remuw else .remw,
26052607 else => if (is_unsigned) .remu else .rem,
26062608 },
2607 .div_trunc => switch (bit_size) {
2609 .div_trunc, .div_exact => switch (bit_size) {
26082610 8, 16, 32 => if (is_unsigned) .divuw else .divw,
26092611 else => if (is_unsigned) .divu else .div,
26102612 },