module __float32__sub( 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__2; wire literal_29222; wire [7:0] x_bexp__2; wire [7:0] y__1_bexpnot__1; wire [8:0] x_bexp_extended__2; wire [8:0] y__1_bexpnot_extended__1; wire [8:0] full_result; wire overflow_detected; wire [22:0] y_fraction__2; wire [22:0] tuple_index_29230; wire [7:0] x_bexp__3; wire [7:0] literal_29232; wire [7:0] y_bexp__3; wire literal_29234; wire [22:0] x_fraction__1; wire [22:0] y_fraction__3; wire nc; wire y_sign__2; wire [23:0] fraction_x; wire [23:0] fraction_y; wire [23:0] sign_ext_29244; wire [7:0] narrowed_result; wire [7:0] x_bexpor_mask__1; wire tuple_index_29249; wire [23:0] fraction_x__1; wire [23:0] fraction_y__1; wire [2:0] xddend_x__2_squeezed_const_lsb_bits; wire [7:0] result; wire x_sign__1; wire y_sign__3; wire [24:0] wide_x_squeezed; wire [26:0] wide_y_shift_bits; wire [7:0] shift; wire [26:0] shrl_29263; wire [27:0] shll_29265; wire [24:0] xddend_x__2_squeezed; wire [1:0] literal_29267; wire [23:0] literal_29275; wire [25:0] add_29276; wire sticky; wire [27:0] concat_29282; wire [27:0] xbs_fraction__1; wire carry_bit; wire nor_29323; wire nor_29318; wire nor_29319; wire nor_29309; wire nor_29310; wire and_29352; wire nor_29354; wire nor_29356; wire and_29349; wire nor_29345; wire and_29341; wire nor_29342; wire nor_29336; wire nor_29338; wire and_29381; wire nor_29362; wire nor_29363; wire and_29402; wire [1:0] priority_sel_29403; wire and_29398; wire and_29394; wire and_29390; wire [2:0] concat_29416; wire [2:0] concat_29413; wire [2:0] concat_29412; wire [2:0] concat_29410; wire [2:0] concat_29409; wire and_29421; wire [3:0] concat_29425; wire [3:0] sel_29534; wire [4:0] concat_29433; 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_29453; wire rounding_carry; wire [8:0] add_29466; wire [5:0] sub_29467; 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_29480; wire [8:0] wide_exponent__2; wire eq_29482; wire eq_29483; wire eq_29484; wire eq_29485; wire [2:0] fraction_shift__2; wire is_operand_inf; wire and_reduce_29503; wire has_pos_inf; wire has_neg_inf; wire [27:0] rounded_fraction; wire [2:0] fraction_shift__1; wire [27:0] shrl_29516; wire is_result_nan; wire result_sign; wire [22:0] result_fraction; wire [22:0] sign_ext_29522; 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__2 = y[30:23]; assign literal_29222 = 1'h0; assign x_bexp__2 = x[30:23]; assign y__1_bexpnot__1 = ~y_bexp__2; assign x_bexp_extended__2 = {literal_29222, x_bexp__2}; assign y__1_bexpnot_extended__1 = {literal_29222, y__1_bexpnot__1}; assign full_result = x_bexp_extended__2 + y__1_bexpnot_extended__1; assign overflow_detected = full_result[8]; assign y_fraction__2 = y[22:0]; assign tuple_index_29230 = x[22:0]; assign x_bexp__3 = overflow_detected ? x_bexp__2 : y_bexp__2; assign literal_29232 = 8'h00; assign y_bexp__3 = overflow_detected ? y_bexp__2 : x_bexp__2; assign literal_29234 = 1'h1; assign x_fraction__1 = overflow_detected ? tuple_index_29230 : y_fraction__2; assign y_fraction__3 = overflow_detected ? y_fraction__2 : tuple_index_29230; assign nc = ~overflow_detected; assign y_sign__2 = y[31:31]; assign fraction_x = {literal_29234, x_fraction__1}; assign fraction_y = {literal_29234, y_fraction__3}; assign sign_ext_29244 = {24{y_bexp__3 != literal_29232}}; assign narrowed_result = full_result[7:0]; assign x_bexpor_mask__1 = {8{nc}}; assign tuple_index_29249 = x[31:31]; assign fraction_x__1 = fraction_x & {24{x_bexp__3 != literal_29232}}; assign fraction_y__1 = fraction_y & sign_ext_29244; assign xddend_x__2_squeezed_const_lsb_bits = 3'h0; assign result = narrowed_result ^ x_bexpor_mask__1; assign x_sign__1 = overflow_detected ? tuple_index_29249 : ~y_sign__2; assign y_sign__3 = overflow_detected ? ~y_sign__2 : tuple_index_29249; assign wide_x_squeezed = {literal_29222, fraction_x__1}; assign wide_y_shift_bits = {fraction_y__1, xddend_x__2_squeezed_const_lsb_bits}; assign shift = result + {7'h00, overflow_detected}; assign shrl_29263 = shift >= 8'h1b ? 27'h000_0000 : wide_y_shift_bits >> shift; assign shll_29265 = shift >= 8'h1c ? 28'h000_0000 : 28'hfff_ffff << shift; assign xddend_x__2_squeezed = x_sign__1 ^ y_sign__3 ? -wide_x_squeezed : wide_x_squeezed; assign literal_29267 = 2'h0; assign literal_29275 = 24'h00_0000; assign add_29276 = {{1{xddend_x__2_squeezed[24]}}, xddend_x__2_squeezed} + {literal_29267, shrl_29263[26:3]}; assign sticky = ~({literal_29222, ~y_fraction__3} | ~sign_ext_29244 | shll_29265[26:3]) != literal_29275; assign concat_29282 = {add_29276[24:0], shrl_29263[2:1], shrl_29263[0] | sticky}; assign xbs_fraction__1 = add_29276[25] ? -concat_29282 : concat_29282; assign carry_bit = xbs_fraction__1[27]; assign nor_29323 = ~(xbs_fraction__1[25] | xbs_fraction__1[24]); assign nor_29318 = ~(xbs_fraction__1[17] | xbs_fraction__1[16]); assign nor_29319 = ~(xbs_fraction__1[19] | xbs_fraction__1[18]); assign nor_29309 = ~(xbs_fraction__1[9] | xbs_fraction__1[8]); assign nor_29310 = ~(xbs_fraction__1[11] | xbs_fraction__1[10]); assign and_29352 = ~(carry_bit | xbs_fraction__1[26]) & nor_29323; assign nor_29354 = ~(xbs_fraction__1[21] | xbs_fraction__1[20]); assign nor_29356 = ~(carry_bit | ~xbs_fraction__1[26]); assign and_29349 = nor_29319 & nor_29318; assign nor_29345 = ~(xbs_fraction__1[13] | xbs_fraction__1[12]); assign and_29341 = nor_29310 & nor_29309; assign nor_29342 = ~(xbs_fraction__1[11] | ~xbs_fraction__1[10]); assign nor_29336 = ~(xbs_fraction__1[5] | xbs_fraction__1[4]); assign nor_29338 = ~(xbs_fraction__1[7] | xbs_fraction__1[6]); assign and_29381 = ~(xbs_fraction__1[23] | xbs_fraction__1[22]) & nor_29354; assign nor_29362 = ~(xbs_fraction__1[1] | xbs_fraction__1[0]); assign nor_29363 = ~(xbs_fraction__1[3] | xbs_fraction__1[2]); assign and_29402 = and_29352 & and_29381; assign priority_sel_29403 = priority_sel_2b_2way({~(carry_bit | xbs_fraction__1[26] | nor_29323), and_29352}, {nor_29356, literal_29222}, {literal_29234, ~(xbs_fraction__1[25] | ~xbs_fraction__1[24])}, {literal_29222, nor_29356}); assign and_29398 = ~(xbs_fraction__1[15] | xbs_fraction__1[14]) & nor_29345; assign and_29394 = nor_29338 & nor_29336; assign and_29390 = nor_29363 & nor_29362; assign concat_29416 = {literal_29234, ~(xbs_fraction__1[23] | xbs_fraction__1[22] | nor_29354) ? {literal_29234, ~(xbs_fraction__1[21] | ~xbs_fraction__1[20])} : {literal_29222, ~(xbs_fraction__1[23] | ~xbs_fraction__1[22])}}; assign concat_29413 = {and_29349, priority_sel_2b_2way({~(xbs_fraction__1[19] | xbs_fraction__1[18] | nor_29318), and_29349}, literal_29267, {literal_29234, ~(xbs_fraction__1[17] | ~xbs_fraction__1[16])}, {nor_29319, ~(xbs_fraction__1[19] | ~xbs_fraction__1[18])})}; assign concat_29412 = {literal_29234, ~(xbs_fraction__1[15] | xbs_fraction__1[14] | nor_29345) ? {literal_29234, ~(xbs_fraction__1[13] | ~xbs_fraction__1[12])} : {literal_29222, ~(xbs_fraction__1[15] | ~xbs_fraction__1[14])}}; assign concat_29410 = {and_29341, priority_sel_2b_2way({~(xbs_fraction__1[11] | xbs_fraction__1[10] | nor_29309), and_29341}, {nor_29342, literal_29222}, {literal_29234, ~(xbs_fraction__1[9] | ~xbs_fraction__1[8])}, {nor_29310, nor_29342})}; assign concat_29409 = {literal_29234, ~(xbs_fraction__1[7] | xbs_fraction__1[6] | nor_29336) ? {literal_29234, ~(xbs_fraction__1[5] | ~xbs_fraction__1[4])} : {nor_29338, ~(xbs_fraction__1[7] | ~xbs_fraction__1[6])}}; assign and_29421 = and_29349 & and_29398; assign concat_29425 = {literal_29234, and_29390, priority_sel_2b_2way({~(xbs_fraction__1[3] | xbs_fraction__1[2] | nor_29362), and_29390}, literal_29267, {literal_29234, ~(xbs_fraction__1[1] | ~xbs_fraction__1[0])}, {nor_29363, ~(xbs_fraction__1[3] | ~xbs_fraction__1[2])})}; assign sel_29534 = ~(~and_29402 | and_29421) ? {literal_29234, ~(~and_29349 | and_29398) ? concat_29412 : concat_29413} : {and_29402, priority_sel_3b_2way({~(~and_29352 | and_29381), and_29402}, {priority_sel_29403, literal_29222}, concat_29416, {literal_29222, priority_sel_29403})}; assign concat_29433 = {literal_29234, and_29341 & and_29394 ? concat_29425 : {literal_29222, ~(~and_29341 | and_29394) ? concat_29409 : concat_29410}}; assign leading_zeroes = and_29402 & and_29421 ? concat_29433 : {literal_29222, sel_29534}; assign cancel_fraction = leading_zeroes >= 5'h1d ? 29'h0000_0000 : {literal_29222, xbs_fraction__1} << leading_zeroes; assign cancel_fraction__1 = cancel_fraction[27:1]; assign carry_fraction__1 = {xbs_fraction__1[27:2], xbs_fraction__1[1] | xbs_fraction__1[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_29453 = {literal_29222, shifted_fraction[26:3]} + {literal_29275, do_round_up}; assign rounding_carry = add_29453[24]; assign add_29466 = {literal_29222, x_bexp__3} + 9'h001; assign sub_29467 = {5'h00, rounding_carry} - {literal_29222, leading_zeroes}; assign fraction_is_zero = add_29276 == 26'h000_0000 & ~(shrl_29263[1] | shrl_29263[2]) & ~(shrl_29263[0] | sticky); assign wide_exponent_associative_element = {literal_29222, add_29466}; assign wide_exponent_associative_element__1 = {{4{sub_29467[5]}}, sub_29467}; 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_29480 = 23'h00_0000; assign wide_exponent__2 = wide_exponent__1[8:0] & {9{~wide_exponent__1[9]}}; assign eq_29482 = x_bexp__3 == MAX_EXPONENT; assign eq_29483 = x_fraction__1 == literal_29480; assign eq_29484 = y_bexp__3 == MAX_EXPONENT; assign eq_29485 = y_fraction__3 == literal_29480; assign fraction_shift__2 = 3'h3; assign is_operand_inf = eq_29482 & eq_29483 | eq_29484 & eq_29485; assign and_reduce_29503 = &wide_exponent__2[7:0]; assign has_pos_inf = ~(~eq_29482 | ~eq_29483 | x_sign__1) | ~(~eq_29484 | ~eq_29485 | y_sign__3); assign has_neg_inf = eq_29482 & eq_29483 & x_sign__1 | eq_29484 & eq_29485 & y_sign__3; assign rounded_fraction = {add_29453, normal_chunk}; assign fraction_shift__1 = rounding_carry ? fraction_shift__3 : fraction_shift__2; assign shrl_29516 = rounded_fraction >> fraction_shift__1; assign is_result_nan = ~(~eq_29482 | eq_29483) | ~(~eq_29484 | eq_29485) | has_pos_inf & has_neg_inf; assign result_sign = priority_sel_1b_2way({add_29276[25], fraction_is_zero}, x_sign__1 & y_sign__3, ~y_sign__3, y_sign__3); assign result_fraction = shrl_29516[22:0]; assign sign_ext_29522 = {23{~(is_operand_inf | wide_exponent__2[8] | and_reduce_29503 | ~((|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_29522; 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_29503 ? 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