// 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 [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 ? io_a + io_b : io_fn == 5'h1 ? io_a - io_b : io_fn == 5'h2 ? (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 ? {63'h0, io_a < io_b} : io_fn == 5'h5 ? io_a ^ io_b : io_fn == 5'h6 ? (io_isWord ? {32'h0, io_a[31:0] >> _GEN_1} : io_a >> _GEN_2) : io_fn == 5'h7 ? (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 ? 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) ? _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