// Generated by CIRCT firtool-1.139.0 module ALU( input [4:0] io_fn, input [63:0] io_a, io_b, input io_isWord, output [63:0] io_out ); 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 = $unsigned($signed($signed({io_a[63], io_a}) / $signed({io_b[63], io_b}))); wire [63:0] raw = io_fn == 5'h0 ? io_a + io_b : io_fn == 5'h1 ? io_a - io_b : io_fn == 5'h2 ? _raw_T_4[63:0] : io_fn == 5'h3 ? {63'h0, $signed(io_a) < $signed(io_b)} : io_fn == 5'h4 ? {63'h0, io_a < io_b} : io_fn == 5'h5 ? io_a ^ io_b : io_fn == 5'h6 ? io_a >> _GEN : io_fn == 5'h7 ? $signed($signed(io_a) >>> _GEN) : 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 ? ((|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