fix: pass remaining riscv isa tests

This commit is contained in:
abnerhexu
2026-06-27 07:07:07 +00:00
parent a2e0126199
commit a32db39c80
38 changed files with 81187 additions and 19321 deletions

View File

@@ -8,9 +8,15 @@ module ALU(
);
wire [5:0] shamt = io_isWord ? {1'h0, io_b[4:0]} : io_b[5:0];
wire [126:0] _raw_T_4 = {63'h0, io_a} << shamt;
wire [63:0] _GEN = {58'h0, shamt};
wire [64:0] _raw_T_22 =
wire [127:0] _GEN = {{64{io_a[63]}}, io_a};
wire [127:0] _signedProduct_T_2 = _GEN * {{64{io_b[63]}}, io_b};
wire [127:0] _GEN_0 = {64'h0, io_b};
wire [127:0] _signedUnsignedProduct_T_3 = _GEN * _GEN_0;
wire [127:0] unsignedProduct = {64'h0, io_a} * _GEN_0;
wire [126:0] _raw_T_5 = {63'h0, io_a} << shamt;
wire [31:0] _GEN_1 = {27'h0, io_b[4:0]};
wire [63:0] _GEN_2 = {58'h0, shamt};
wire [64:0] _raw_T_33 =
$unsigned($signed($signed({io_a[63], io_a}) / $signed({io_b[63], io_b})));
wire [63:0] raw =
io_fn == 5'h0
@@ -18,7 +24,7 @@ module ALU(
: io_fn == 5'h1
? io_a - io_b
: io_fn == 5'h2
? _raw_T_4[63:0]
? (io_isWord ? {1'h0, {31'h0, io_a[31:0]} << io_b[4:0]} : _raw_T_5[63:0])
: io_fn == 5'h3
? {63'h0, $signed(io_a) < $signed(io_b)}
: io_fn == 5'h4
@@ -26,35 +32,46 @@ module ALU(
: io_fn == 5'h5
? io_a ^ io_b
: io_fn == 5'h6
? io_a >> _GEN
? (io_isWord
? {32'h0, io_a[31:0] >> _GEN_1}
: io_a >> _GEN_2)
: io_fn == 5'h7
? $signed($signed(io_a) >>> _GEN)
? (io_isWord
? {32'h0, $signed($signed(io_a[31:0]) >>> _GEN_1)}
: $signed($signed(io_a) >>> _GEN_2))
: io_fn == 5'h8
? io_a | io_b
: io_fn == 5'h9
? io_a & io_b
: io_fn == 5'hA
? io_a * io_b
: io_fn == 5'hB
? ((|io_b)
? _raw_T_22[63:0]
: 64'hFFFFFFFFFFFFFFFF)
: io_fn == 5'hC
? ((|io_b)
? io_a / io_b
: 64'hFFFFFFFFFFFFFFFF)
: io_fn == 5'hD
? ((|io_b)
? $signed($signed(io_a)
% $signed(io_b))
: io_a)
: io_fn == 5'hE
? unsignedProduct[63:0]
: io_fn == 5'h10
? _signedProduct_T_2[127:64]
: io_fn == 5'h11
? _signedUnsignedProduct_T_3[127:64]
: io_fn == 5'h12
? unsignedProduct[127:64]
: io_fn == 5'hB
? ((|io_b)
? io_a % io_b
: io_a)
: io_fn == 5'hF
? io_b
: 64'h0;
? _raw_T_33[63:0]
: 64'hFFFFFFFFFFFFFFFF)
: io_fn == 5'hC
? ((|io_b)
? io_a / io_b
: 64'hFFFFFFFFFFFFFFFF)
: io_fn == 5'hD
? ((|io_b)
? $signed($signed(io_a)
% $signed(io_b))
: io_a)
: io_fn == 5'hE
? ((|io_b)
? io_a
% io_b
: io_a)
: io_fn == 5'hF
? io_b
: 64'h0;
assign io_out = io_isWord ? {{32{raw[31]}}, raw[31:0]} : raw;
endmodule