module __float32__add( input wire [31:0] x, input wire [31:0] y, output wire [31:0] out ); function automatic [1:0] priority_sel_2b_2way (input reg [1:0] sel, input reg [1:0] case0, input reg [1:0] case1, input reg [1:0] default_value); begin casez (sel) 2'b?1: begin priority_sel_2b_2way = case0; end 2'b10: begin priority_sel_2b_2way = case1; end 2'b00: begin priority_sel_2b_2way = default_value; end default: begin // Propagate X priority_sel_2b_2way = 2'dx; end endcase end endfunction function automatic [2:0] priority_sel_3b_2way (input reg [1:0] sel, input reg [2:0] case0, input reg [2:0] case1, input reg [2:0] default_value); begin casez (sel) 2'b?1: begin priority_sel_3b_2way = case0; end 2'b10: begin priority_sel_3b_2way = case1; end 2'b00: begin priority_sel_3b_2way = default_value; end default: begin // Propagate X priority_sel_3b_2way = 3'dx; end endcase end endfunction function automatic priority_sel_1b_2way (input reg [1:0] sel, input reg case0, input reg case1, input reg default_value); begin casez (sel) 2'b?1: begin priority_sel_1b_2way = case0; end 2'b10: begin priority_sel_1b_2way = case1; end 2'b00: begin priority_sel_1b_2way = default_value; end default: begin // Propagate X priority_sel_1b_2way = 1'dx; end endcase end endfunction wire [7:0] y_bexp__1; wire literal_28646; wire [7:0] x_bexp__1; wire [7:0] y_bexpnot; wire [8:0] x_bexp_extended__1; wire [8:0] y_bexpnot_extended; wire [8:0] full_result; wire overflow_detected; wire [22:0] tuple_index_28653; wire [22:0] tuple_index_28654; wire [7:0] x_bexp; wire [7:0] literal_28656; wire [7:0] y_bexp; wire literal_28658; wire [22:0] x_fraction; wire [22:0] y_fraction; wire nc; wire [23:0] fraction_x; wire [23:0] fraction_y; wire [23:0] sign_ext_28667; wire [7:0] narrowed_result; wire [7:0] x_bexpor_mask; wire tuple_index_28671; wire tuple_index_28672; wire [23:0] fraction_x__1; wire [23:0] fraction_y__1; wire [2:0] xddend_x__1_squeezed_const_lsb_bits; wire [7:0] result; wire x_sign; wire y_sign; wire [24:0] wide_x_squeezed; wire [26:0] wide_y_shift_bits; wire [7:0] shift; wire [26:0] shrl_28686; wire [27:0] shll_28688; wire [24:0] xddend_x__1_squeezed; wire [1:0] literal_28690; wire [23:0] literal_28698; wire [25:0] add_28699; wire sticky; wire [27:0] concat_28705; wire [27:0] xbs_fraction; wire carry_bit; wire nor_28746; wire nor_28741; wire nor_28742; wire nor_28732; wire nor_28733; wire and_28775; wire nor_28777; wire nor_28779; wire and_28772; wire nor_28768; wire and_28764; wire nor_28765; wire nor_28759; wire nor_28761; wire and_28804; wire nor_28785; wire nor_28786; wire and_28825; wire [1:0] priority_sel_28826; wire and_28821; wire and_28817; wire and_28813; wire [2:0] concat_28839; wire [2:0] concat_28836; wire [2:0] concat_28835; wire [2:0] concat_28833; wire [2:0] concat_28832; wire and_28844; wire [3:0] concat_28848; wire [3:0] sel_28957; wire [4:0] concat_28856; wire [4:0] leading_zeroes; wire [28:0] cancel_fraction; wire [26:0] cancel_fraction__1; wire [26:0] carry_fraction__1; wire [26:0] shifted_fraction; wire [2:0] normal_chunk; wire [2:0] fraction_shift__3; wire [1:0] half_way_chunk; wire do_round_up; wire [24:0] add_28876; wire rounding_carry; wire [8:0] add_28889; wire [5:0] sub_28890; wire fraction_is_zero; wire [9:0] wide_exponent_associative_element; wire [9:0] wide_exponent_associative_element__1; wire [9:0] wide_exponent; wire [9:0] wide_exponent__1; wire [7:0] MAX_EXPONENT; wire [22:0] literal_28903; wire [8:0] wide_exponent__2; wire eq_28905; wire eq_28906; wire eq_28907; wire eq_28908; wire [2:0] fraction_shift__2; wire is_operand_inf; wire and_reduce_28926; wire has_pos_inf; wire has_neg_inf; wire [27:0] rounded_fraction; wire [2:0] fraction_shift__1; wire [27:0] shrl_28939; wire is_result_nan; wire result_sign; wire [22:0] result_fraction; wire [22:0] sign_ext_28945; wire result_sign__1; wire [22:0] result_fraction__3; wire [22:0] FRACTION_HIGH_BIT; wire result_sign__2; wire [7:0] result_exponent__2; wire [22:0] result_fraction__4; assign y_bexp__1 = y[30:23]; assign literal_28646 = 1'h0; assign x_bexp__1 = x[30:23]; assign y_bexpnot = ~y_bexp__1; assign x_bexp_extended__1 = {literal_28646, x_bexp__1}; assign y_bexpnot_extended = {literal_28646, y_bexpnot}; assign full_result = x_bexp_extended__1 + y_bexpnot_extended; assign overflow_detected = full_result[8]; assign tuple_index_28653 = y[22:0]; assign tuple_index_28654 = x[22:0]; assign x_bexp = overflow_detected ? x_bexp__1 : y_bexp__1; assign literal_28656 = 8'h00; assign y_bexp = overflow_detected ? y_bexp__1 : x_bexp__1; assign literal_28658 = 1'h1; assign x_fraction = overflow_detected ? tuple_index_28654 : tuple_index_28653; assign y_fraction = overflow_detected ? tuple_index_28653 : tuple_index_28654; assign nc = ~overflow_detected; assign fraction_x = {literal_28658, x_fraction}; assign fraction_y = {literal_28658, y_fraction}; assign sign_ext_28667 = {24{y_bexp != literal_28656}}; assign narrowed_result = full_result[7:0]; assign x_bexpor_mask = {8{nc}}; assign tuple_index_28671 = y[31:31]; assign tuple_index_28672 = x[31:31]; assign fraction_x__1 = fraction_x & {24{x_bexp != literal_28656}}; assign fraction_y__1 = fraction_y & sign_ext_28667; assign xddend_x__1_squeezed_const_lsb_bits = 3'h0; assign result = narrowed_result ^ x_bexpor_mask; assign x_sign = overflow_detected ? tuple_index_28672 : tuple_index_28671; assign y_sign = overflow_detected ? tuple_index_28671 : tuple_index_28672; assign wide_x_squeezed = {literal_28646, fraction_x__1}; assign wide_y_shift_bits = {fraction_y__1, xddend_x__1_squeezed_const_lsb_bits}; assign shift = result + {7'h00, overflow_detected}; assign shrl_28686 = shift >= 8'h1b ? 27'h000_0000 : wide_y_shift_bits >> shift; assign shll_28688 = shift >= 8'h1c ? 28'h000_0000 : 28'hfff_ffff << shift; assign xddend_x__1_squeezed = x_sign ^ y_sign ? -wide_x_squeezed : wide_x_squeezed; assign literal_28690 = 2'h0; assign literal_28698 = 24'h00_0000; assign add_28699 = {{1{xddend_x__1_squeezed[24]}}, xddend_x__1_squeezed} + {literal_28690, shrl_28686[26:3]}; assign sticky = ~({literal_28646, ~y_fraction} | ~sign_ext_28667 | shll_28688[26:3]) != literal_28698; assign concat_28705 = {add_28699[24:0], shrl_28686[2:1], shrl_28686[0] | sticky}; assign xbs_fraction = add_28699[25] ? -concat_28705 : concat_28705; assign carry_bit = xbs_fraction[27]; assign nor_28746 = ~(xbs_fraction[25] | xbs_fraction[24]); assign nor_28741 = ~(xbs_fraction[17] | xbs_fraction[16]); assign nor_28742 = ~(xbs_fraction[19] | xbs_fraction[18]); assign nor_28732 = ~(xbs_fraction[9] | xbs_fraction[8]); assign nor_28733 = ~(xbs_fraction[11] | xbs_fraction[10]); assign and_28775 = ~(carry_bit | xbs_fraction[26]) & nor_28746; assign nor_28777 = ~(xbs_fraction[21] | xbs_fraction[20]); assign nor_28779 = ~(carry_bit | ~xbs_fraction[26]); assign and_28772 = nor_28742 & nor_28741; assign nor_28768 = ~(xbs_fraction[13] | xbs_fraction[12]); assign and_28764 = nor_28733 & nor_28732; assign nor_28765 = ~(xbs_fraction[11] | ~xbs_fraction[10]); assign nor_28759 = ~(xbs_fraction[5] | xbs_fraction[4]); assign nor_28761 = ~(xbs_fraction[7] | xbs_fraction[6]); assign and_28804 = ~(xbs_fraction[23] | xbs_fraction[22]) & nor_28777; assign nor_28785 = ~(xbs_fraction[1] | xbs_fraction[0]); assign nor_28786 = ~(xbs_fraction[3] | xbs_fraction[2]); assign and_28825 = and_28775 & and_28804; assign priority_sel_28826 = priority_sel_2b_2way({~(carry_bit | xbs_fraction[26] | nor_28746), and_28775}, {nor_28779, literal_28646}, {literal_28658, ~(xbs_fraction[25] | ~xbs_fraction[24])}, {literal_28646, nor_28779}); assign and_28821 = ~(xbs_fraction[15] | xbs_fraction[14]) & nor_28768; assign and_28817 = nor_28761 & nor_28759; assign and_28813 = nor_28786 & nor_28785; assign concat_28839 = {literal_28658, ~(xbs_fraction[23] | xbs_fraction[22] | nor_28777) ? {literal_28658, ~(xbs_fraction[21] | ~xbs_fraction[20])} : {literal_28646, ~(xbs_fraction[23] | ~xbs_fraction[22])}}; assign concat_28836 = {and_28772, priority_sel_2b_2way({~(xbs_fraction[19] | xbs_fraction[18] | nor_28741), and_28772}, literal_28690, {literal_28658, ~(xbs_fraction[17] | ~xbs_fraction[16])}, {nor_28742, ~(xbs_fraction[19] | ~xbs_fraction[18])})}; assign concat_28835 = {literal_28658, ~(xbs_fraction[15] | xbs_fraction[14] | nor_28768) ? {literal_28658, ~(xbs_fraction[13] | ~xbs_fraction[12])} : {literal_28646, ~(xbs_fraction[15] | ~xbs_fraction[14])}}; assign concat_28833 = {and_28764, priority_sel_2b_2way({~(xbs_fraction[11] | xbs_fraction[10] | nor_28732), and_28764}, {nor_28765, literal_28646}, {literal_28658, ~(xbs_fraction[9] | ~xbs_fraction[8])}, {nor_28733, nor_28765})}; assign concat_28832 = {literal_28658, ~(xbs_fraction[7] | xbs_fraction[6] | nor_28759) ? {literal_28658, ~(xbs_fraction[5] | ~xbs_fraction[4])} : {nor_28761, ~(xbs_fraction[7] | ~xbs_fraction[6])}}; assign and_28844 = and_28772 & and_28821; assign concat_28848 = {literal_28658, and_28813, priority_sel_2b_2way({~(xbs_fraction[3] | xbs_fraction[2] | nor_28785), and_28813}, literal_28690, {literal_28658, ~(xbs_fraction[1] | ~xbs_fraction[0])}, {nor_28786, ~(xbs_fraction[3] | ~xbs_fraction[2])})}; assign sel_28957 = ~(~and_28825 | and_28844) ? {literal_28658, ~(~and_28772 | and_28821) ? concat_28835 : concat_28836} : {and_28825, priority_sel_3b_2way({~(~and_28775 | and_28804), and_28825}, {priority_sel_28826, literal_28646}, concat_28839, {literal_28646, priority_sel_28826})}; assign concat_28856 = {literal_28658, and_28764 & and_28817 ? concat_28848 : {literal_28646, ~(~and_28764 | and_28817) ? concat_28832 : concat_28833}}; assign leading_zeroes = and_28825 & and_28844 ? concat_28856 : {literal_28646, sel_28957}; assign cancel_fraction = leading_zeroes >= 5'h1d ? 29'h0000_0000 : {literal_28646, xbs_fraction} << leading_zeroes; assign cancel_fraction__1 = cancel_fraction[27:1]; assign carry_fraction__1 = {xbs_fraction[27:2], xbs_fraction[1] | xbs_fraction[0]}; assign shifted_fraction = carry_bit ? carry_fraction__1 : cancel_fraction__1; assign normal_chunk = shifted_fraction[2:0]; assign fraction_shift__3 = 3'h4; assign half_way_chunk = shifted_fraction[3:2]; assign do_round_up = normal_chunk > fraction_shift__3 | half_way_chunk == 2'h3; assign add_28876 = {literal_28646, shifted_fraction[26:3]} + {literal_28698, do_round_up}; assign rounding_carry = add_28876[24]; assign add_28889 = {literal_28646, x_bexp} + 9'h001; assign sub_28890 = {5'h00, rounding_carry} - {literal_28646, leading_zeroes}; assign fraction_is_zero = add_28699 == 26'h000_0000 & ~(shrl_28686[1] | shrl_28686[2]) & ~(shrl_28686[0] | sticky); assign wide_exponent_associative_element = {literal_28646, add_28889}; assign wide_exponent_associative_element__1 = {{4{sub_28890[5]}}, sub_28890}; assign wide_exponent = wide_exponent_associative_element + wide_exponent_associative_element__1; assign wide_exponent__1 = wide_exponent & {10{~fraction_is_zero}}; assign MAX_EXPONENT = 8'hff; assign literal_28903 = 23'h00_0000; assign wide_exponent__2 = wide_exponent__1[8:0] & {9{~wide_exponent__1[9]}}; assign eq_28905 = x_bexp == MAX_EXPONENT; assign eq_28906 = x_fraction == literal_28903; assign eq_28907 = y_bexp == MAX_EXPONENT; assign eq_28908 = y_fraction == literal_28903; assign fraction_shift__2 = 3'h3; assign is_operand_inf = eq_28905 & eq_28906 | eq_28907 & eq_28908; assign and_reduce_28926 = &wide_exponent__2[7:0]; assign has_pos_inf = ~(~eq_28905 | ~eq_28906 | x_sign) | ~(~eq_28907 | ~eq_28908 | y_sign); assign has_neg_inf = eq_28905 & eq_28906 & x_sign | eq_28907 & eq_28908 & y_sign; assign rounded_fraction = {add_28876, normal_chunk}; assign fraction_shift__1 = rounding_carry ? fraction_shift__3 : fraction_shift__2; assign shrl_28939 = rounded_fraction >> fraction_shift__1; assign is_result_nan = ~(~eq_28905 | eq_28906) | ~(~eq_28907 | eq_28908) | has_pos_inf & has_neg_inf; assign result_sign = priority_sel_1b_2way({add_28699[25], fraction_is_zero}, x_sign & y_sign, ~y_sign, y_sign); assign result_fraction = shrl_28939[22:0]; assign sign_ext_28945 = {23{~(is_operand_inf | wide_exponent__2[8] | and_reduce_28926 | ~((|wide_exponent__2[8:1]) | wide_exponent__2[0]))}}; assign result_sign__1 = is_operand_inf ? ~has_pos_inf : result_sign; assign result_fraction__3 = result_fraction & sign_ext_28945; assign FRACTION_HIGH_BIT = 23'h40_0000; assign result_sign__2 = ~is_result_nan & result_sign__1; assign result_exponent__2 = is_result_nan | is_operand_inf | wide_exponent__2[8] | and_reduce_28926 ? MAX_EXPONENT : wide_exponent__2[7:0]; assign result_fraction__4 = is_result_nan ? FRACTION_HIGH_BIT : result_fraction__3; assign out = {result_sign__2, result_exponent__2, result_fraction__4}; endmodule