module __float32__fast_rsqrt( input wire [31:0] x, output wire [31:0] out ); // lint_off MULTIPLY function automatic [47:0] umul48b_24b_x_24b (input reg [23:0] lhs, input reg [23:0] rhs); begin umul48b_24b_x_24b = lhs * rhs; end endfunction // lint_on MULTIPLY 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] x_bexp__2; wire literal_32252; wire [7:0] add_32256; wire [9:0] literal_32259; wire [9:0] exp; wire [9:0] literal_32261; wire literal_32262; wire [22:0] tuple_index_32263; wire [24:0] fraction__3_squeezed; wire [22:0] fraction__5; wire [22:0] literal_32272; wire [23:0] fraction__6; wire [23:0] fraction__7; wire [8:0] exp_squeezed; wire [8:0] exp__3_squeezed; wire [8:0] literal_32281; wire is_subnormal; wire [8:0] result_exp__1; wire x_sign__1; wire and_reduce_32290; wire [31:0] MAGIC_NUMBER; wire or_32294; wire [7:0] high_exp; wire [31:0] sub_32296; wire [22:0] result_fraction; wire [7:0] result_exp__4; wire [7:0] literal_32300; wire [7:0] approx_bexp__1; wire [22:0] result_fraction__3; wire [22:0] approx_fraction__2; wire eq_32304; wire eq_32305; wire [23:0] half_x_fraction__4; wire [23:0] approx_fraction__4; wire nor_32308; wire [8:0] concat_32310; wire [47:0] umul_32311; wire [8:0] add_32313; wire [47:0] fraction__8; wire [46:0] literal_32317; wire [9:0] exp__4; wire [47:0] fraction__9; wire [47:0] sticky__2; wire [9:0] exp__5; wire [47:0] fraction__10; wire [9:0] exp__6; wire [47:0] fraction__11; wire [47:0] sticky__3; wire [47:0] fraction__12; wire [21:0] literal_32335; wire ne_32338; wire greater_than_half_way__1; wire [22:0] fraction__13; wire do_round_up__1; wire [23:0] fraction__14; wire [23:0] fraction__15; wire [9:0] literal_32348; wire [9:0] add_32350; wire [9:0] exp__7; wire is_subnormal__1; wire [8:0] result_exp__2; wire eq_32356; wire eq_32357; wire eq_32358; wire [8:0] result_exp__3; wire and_32361; wire has_inf_arg__1; wire and_reduce_32365; wire has_0_arg__1; wire nor_32371; wire is_result_nan__1; wire [22:0] result_fraction__1; wire or_32377; wire [22:0] result_fraction__2; wire [22:0] nan_fraction; wire [7:0] result_exp__5; wire [22:0] result_fraction__5; wire eq_32382; wire [23:0] prod_fraction__3; wire nor_32384; wire [47:0] umul_32386; wire [8:0] add_32388; wire [47:0] fraction__16; wire [9:0] exp__8; wire [47:0] fraction__17; wire [47:0] sticky__4; wire [9:0] exp__9; wire [47:0] fraction__18; wire [9:0] exp__10; wire [47:0] fraction__19; wire [47:0] sticky__5; wire [47:0] fraction__20; wire ne_32411; wire greater_than_half_way__2; wire [22:0] fraction__21; wire do_round_up__2; wire [23:0] fraction__22; wire [23:0] fraction__23; wire [9:0] add_32422; wire [9:0] exp__11; wire is_subnormal__2; wire eq_32425; wire [8:0] result_exp__6; wire has_0_arg__2; wire has_inf_arg__2; wire [8:0] result_exp__7; wire is_result_nan__2; wire and_reduce_32439; wire [7:0] result_exp__8; wire [7:0] nprod_bexpnot; wire [8:0] nprod_bexpnot_extended; wire [8:0] ONE_POINT_FIVE_bexp_extended__2; wire [8:0] full_result__1; wire overflow_detected; wire [22:0] result_fraction__6; wire [7:0] ONE_POINT_FIVE_bexp__2; wire nc; wire [22:0] result_fraction__7; wire [7:0] ONE_POINT_FIVE_bexp__3; wire [7:0] nprod_bexp; wire approx_sign__2; wire [22:0] ONE_POINT_FIVE_fraction__1; wire [22:0] nprod_fraction; wire result_sign__2; wire [23:0] fraction_x; wire [23:0] fraction_y; wire [23:0] sign_ext_32468; wire [7:0] narrowed_result; wire [7:0] ONE_POINT_FIVE_bexpor_mask__1; wire result_sign__3; wire [23:0] fraction_x__1; wire [23:0] fraction_y__1; wire [2:0] ONE_POINT_FIVEddend_x__2_squeezed_const_lsb_bits; wire [7:0] result__5; wire result_sign__4; wire [24:0] wide_x_squeezed; wire [26:0] wide_y_shift_bits; wire [7:0] shift; wire result_sign__5; wire [26:0] shrl_32486; wire [27:0] shll_32488; wire [24:0] ONE_POINT_FIVEddend_x__2_squeezed; wire [23:0] literal_32498; wire [25:0] add_32499; wire sticky__6; wire [27:0] concat_32505; wire [27:0] ONE_POINT_FIVEbs_fraction__1; wire carry_bit; wire nor_32548; wire nor_32553; wire nor_32554; wire nor_32543; wire nor_32544; wire nor_32534; wire nor_32535; wire and_32579; wire nor_32581; wire and_32584; wire nor_32585; wire and_32576; wire nor_32577; wire nor_32571; wire nor_32573; wire and_32567; wire nor_32568; wire nor_32562; wire nor_32564; wire nor_32588; wire nor_32589; wire and_32628; wire [1:0] priority_sel_32629; wire and_32624; wire and_32620; wire and_32616; wire nor_32617; wire [2:0] concat_32643; wire [2:0] concat_32640; wire [2:0] concat_32639; wire [2:0] concat_32637; wire [2:0] concat_32636; wire and_32648; wire [3:0] concat_32652; wire [3:0] sel_32854; wire [4:0] concat_32660; 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__3; wire [24:0] add_32680; wire rounding_carry; wire [8:0] add_32693; wire [5:0] sub_32694; 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 [8:0] wide_exponent__2; wire eq_32707; wire eq_32708; wire eq_32710; wire eq_32711; wire ONE_POINT_FIVE_sign__1; wire nprod_sign; wire [2:0] fraction_shift__2; wire is_operand_inf; wire and_reduce_32731; wire has_pos_inf; wire has_neg_inf; wire [27:0] rounded_fraction; wire [2:0] fraction_shift__1; wire [27:0] shrl_32741; wire is_result_nan__3; wire [22:0] result_fraction__9; wire [22:0] sign_ext_32745; wire [22:0] result_fraction__10; wire [7:0] result_exponent__2; wire [22:0] result_fraction__11; wire eq_32750; wire [23:0] diff_fraction__3; wire nor_32752; wire [47:0] umul_32754; wire [8:0] add_32756; wire [47:0] fraction__25; wire [9:0] exp__12; wire [47:0] fraction__26; wire [47:0] sticky__7; wire [9:0] exp__13; wire [47:0] fraction__27; wire [9:0] exp__14; wire [47:0] fraction__28; wire [47:0] sticky__8; wire [47:0] fraction__29; wire ne_32779; wire greater_than_half_way__3; wire [22:0] fraction__30; wire do_round_up__4; wire [23:0] fraction__31; wire [23:0] fraction__32; wire [9:0] add_32790; wire [9:0] exp__15; wire is_subnormal__3; wire [8:0] result_exp__9; wire eq_32796; wire eq_32797; wire [8:0] result_exp__10; wire has_0_arg; wire has_inf_arg__3; wire and_reduce_32806; wire has_0_arg__3; wire result_sign__6; wire [22:0] sign_ext_32813; wire result_sign__7; wire [22:0] x__1_fraction__2; wire is_result_nan__4; wire result_sign__8; wire [22:0] result_fraction__12; wire eq_32824; wire eq_32825; wire result_sign__9; wire [22:0] result_fraction__13; wire nand_32829; wire has_inf_arg; wire result_sign__10; wire [22:0] result_fraction__14; wire nor_32838; wire [7:0] result_exp__11; wire [31:0] result__4; assign x_bexp__2 = x[30:23]; assign literal_32252 = 1'h0; assign add_32256 = {literal_32252, x_bexp__2[7:1]} + 8'h3f; assign literal_32259 = 10'h381; assign exp = {literal_32252, add_32256, x_bexp__2[0]} + literal_32259; assign literal_32261 = 10'h000; assign literal_32262 = 1'h1; assign tuple_index_32263 = x[22:0]; assign fraction__3_squeezed = $signed(exp) <= $signed(literal_32261) ? {2'h1, tuple_index_32263} : {literal_32262, tuple_index_32263, literal_32252}; assign fraction__5 = fraction__3_squeezed[23:1]; assign literal_32272 = 23'h00_0000; assign fraction__6 = {literal_32252, fraction__5}; assign fraction__7 = fraction__6 + {literal_32272, fraction__3_squeezed[0] & fraction__3_squeezed[1]}; assign exp_squeezed = exp[8:0]; assign exp__3_squeezed = fraction__7[23] ? {literal_32252, x_bexp__2} : exp_squeezed; assign literal_32281 = 9'h000; assign is_subnormal = $signed(exp__3_squeezed) <= $signed(literal_32281); assign result_exp__1 = exp__3_squeezed & {9{~is_subnormal}}; assign x_sign__1 = x[31:31]; assign and_reduce_32290 = &result_exp__1[7:0]; assign MAGIC_NUMBER = 32'h5f37_59df; assign or_32294 = result_exp__1[8] | and_reduce_32290; assign high_exp = 8'hff; assign sub_32296 = MAGIC_NUMBER - {literal_32252, x_sign__1, x_bexp__2, tuple_index_32263[22:1]}; assign result_fraction = fraction__7[22:0]; assign result_exp__4 = or_32294 ? high_exp : result_exp__1[7:0]; assign literal_32300 = 8'h00; assign approx_bexp__1 = sub_32296[30:23]; assign result_fraction__3 = result_fraction & {23{~(result_exp__1[8] | and_reduce_32290 | is_subnormal)}}; assign approx_fraction__2 = sub_32296[22:0]; assign eq_32304 = result_exp__4 == literal_32300; assign eq_32305 = approx_bexp__1 == literal_32300; assign half_x_fraction__4 = {literal_32262, result_fraction__3}; assign approx_fraction__4 = {literal_32262, approx_fraction__2}; assign nor_32308 = ~(eq_32304 | eq_32305); assign concat_32310 = {literal_32252, approx_bexp__1}; assign umul_32311 = umul48b_24b_x_24b(half_x_fraction__4, approx_fraction__4); assign add_32313 = {literal_32252, result_exp__4} + concat_32310; assign fraction__8 = umul_32311 & {48{nor_32308}}; assign literal_32317 = 47'h0000_0000_0000; assign exp__4 = {literal_32252, add_32313} + literal_32259; assign fraction__9 = fraction__8 >> fraction__8[47]; assign sticky__2 = {literal_32317, fraction__8[0]}; assign exp__5 = exp__4 & {10{nor_32308}}; assign fraction__10 = fraction__9 | sticky__2; assign exp__6 = exp__5 + {literal_32281, fraction__8[47]}; assign fraction__11 = $signed(exp__6) <= $signed(literal_32261) ? {literal_32252, fraction__10[47:1]} : fraction__10; assign sticky__3 = {literal_32317, fraction__10[0]}; assign fraction__12 = fraction__11 | sticky__3; assign literal_32335 = 22'h00_0000; assign ne_32338 = fraction__12[21:0] != literal_32335; assign greater_than_half_way__1 = fraction__12[22] & ne_32338; assign fraction__13 = fraction__12[45:23]; assign do_round_up__1 = greater_than_half_way__1 | ~(~fraction__12[22] | ne_32338 | ~fraction__12[23]); assign fraction__14 = {literal_32252, fraction__13}; assign fraction__15 = fraction__14 + {literal_32272, do_round_up__1}; assign literal_32348 = 10'h001; assign add_32350 = exp__6 + literal_32348; assign exp__7 = fraction__15[23] ? add_32350 : exp__6; assign is_subnormal__1 = $signed(exp__7) <= $signed(literal_32261); assign result_exp__2 = exp__7[8:0]; assign eq_32356 = result_fraction__3 == literal_32272; assign eq_32357 = approx_bexp__1 == high_exp; assign eq_32358 = approx_fraction__2 == literal_32272; assign result_exp__3 = result_exp__2 & {9{~is_subnormal__1}}; assign and_32361 = eq_32357 & eq_32358; assign has_inf_arg__1 = or_32294 & eq_32356 | and_32361; assign and_reduce_32365 = &result_exp__3[7:0]; assign has_0_arg__1 = eq_32304 | eq_32305; assign nor_32371 = ~(~eq_32357 | eq_32358); assign is_result_nan__1 = ~(~(result_exp__1[8] | and_reduce_32290) | eq_32356) | nor_32371 | has_0_arg__1 & has_inf_arg__1; assign result_fraction__1 = fraction__15[22:0]; assign or_32377 = is_result_nan__1 | has_inf_arg__1 | result_exp__3[8] | and_reduce_32365; assign result_fraction__2 = result_fraction__1 & {23{~(has_inf_arg__1 | result_exp__3[8] | and_reduce_32365 | is_subnormal__1)}}; assign nan_fraction = 23'h40_0000; assign result_exp__5 = or_32377 ? high_exp : result_exp__3[7:0]; assign result_fraction__5 = is_result_nan__1 ? nan_fraction : result_fraction__2; assign eq_32382 = result_exp__5 == literal_32300; assign prod_fraction__3 = {literal_32262, result_fraction__5}; assign nor_32384 = ~(eq_32382 | eq_32305); assign umul_32386 = umul48b_24b_x_24b(prod_fraction__3, approx_fraction__4); assign add_32388 = {literal_32252, result_exp__5} + concat_32310; assign fraction__16 = umul_32386 & {48{nor_32384}}; assign exp__8 = {literal_32252, add_32388} + literal_32259; assign fraction__17 = fraction__16 >> fraction__16[47]; assign sticky__4 = {literal_32317, fraction__16[0]}; assign exp__9 = exp__8 & {10{nor_32384}}; assign fraction__18 = fraction__17 | sticky__4; assign exp__10 = exp__9 + {literal_32281, fraction__16[47]}; assign fraction__19 = $signed(exp__10) <= $signed(literal_32261) ? {literal_32252, fraction__18[47:1]} : fraction__18; assign sticky__5 = {literal_32317, fraction__18[0]}; assign fraction__20 = fraction__19 | sticky__5; assign ne_32411 = fraction__20[21:0] != literal_32335; assign greater_than_half_way__2 = fraction__20[22] & ne_32411; assign fraction__21 = fraction__20[45:23]; assign do_round_up__2 = greater_than_half_way__2 | ~(~fraction__20[22] | ne_32411 | ~fraction__20[23]); assign fraction__22 = {literal_32252, fraction__21}; assign fraction__23 = fraction__22 + {literal_32272, do_round_up__2}; assign add_32422 = exp__10 + literal_32348; assign exp__11 = fraction__23[23] ? add_32422 : exp__10; assign is_subnormal__2 = $signed(exp__11) <= $signed(literal_32261); assign eq_32425 = result_fraction__5 == literal_32272; assign result_exp__6 = exp__11[8:0]; assign has_0_arg__2 = eq_32382 | eq_32305; assign has_inf_arg__2 = or_32377 & eq_32425 | and_32361; assign result_exp__7 = result_exp__6 & {9{~is_subnormal__2}}; assign is_result_nan__2 = ~(~or_32377 | eq_32425) | nor_32371 | has_0_arg__2 & has_inf_arg__2; assign and_reduce_32439 = &result_exp__7[7:0]; assign result_exp__8 = is_result_nan__2 | has_inf_arg__2 | result_exp__7[8] | and_reduce_32439 ? high_exp : result_exp__7[7:0]; assign nprod_bexpnot = ~result_exp__8; assign nprod_bexpnot_extended = {literal_32252, nprod_bexpnot}; assign ONE_POINT_FIVE_bexp_extended__2 = 9'h07f; assign full_result__1 = nprod_bexpnot_extended + ONE_POINT_FIVE_bexp_extended__2; assign overflow_detected = full_result__1[8]; assign result_fraction__6 = fraction__23[22:0]; assign ONE_POINT_FIVE_bexp__2 = 8'h7f; assign nc = ~overflow_detected; assign result_fraction__7 = result_fraction__6 & {23{~(has_inf_arg__2 | result_exp__7[8] | and_reduce_32439 | is_subnormal__2)}}; assign ONE_POINT_FIVE_bexp__3 = overflow_detected ? ONE_POINT_FIVE_bexp__2 : result_exp__8; assign nprod_bexp = overflow_detected ? result_exp__8 : ONE_POINT_FIVE_bexp__2; assign approx_sign__2 = sub_32296[31]; assign ONE_POINT_FIVE_fraction__1 = overflow_detected | is_result_nan__2 ? nan_fraction : result_fraction__7; assign nprod_fraction = nc | is_result_nan__2 ? nan_fraction : result_fraction__7; assign result_sign__2 = x_sign__1 ^ approx_sign__2; assign fraction_x = {literal_32262, ONE_POINT_FIVE_fraction__1}; assign fraction_y = {literal_32262, nprod_fraction}; assign sign_ext_32468 = {24{nprod_bexp != literal_32300}}; assign narrowed_result = full_result__1[7:0]; assign ONE_POINT_FIVE_bexpor_mask__1 = {8{nc}}; assign result_sign__3 = ~is_result_nan__1 & result_sign__2; assign fraction_x__1 = fraction_x & {24{ONE_POINT_FIVE_bexp__3 != literal_32300}}; assign fraction_y__1 = fraction_y & sign_ext_32468; assign ONE_POINT_FIVEddend_x__2_squeezed_const_lsb_bits = 3'h0; assign result__5 = narrowed_result ^ ONE_POINT_FIVE_bexpor_mask__1; assign result_sign__4 = result_sign__3 ^ approx_sign__2; assign wide_x_squeezed = {literal_32252, fraction_x__1}; assign wide_y_shift_bits = {fraction_y__1, ONE_POINT_FIVEddend_x__2_squeezed_const_lsb_bits}; assign shift = result__5 + {7'h00, overflow_detected}; assign result_sign__5 = ~is_result_nan__2 & result_sign__4; assign shrl_32486 = shift >= 8'h1b ? 27'h000_0000 : wide_y_shift_bits >> shift; assign shll_32488 = shift >= 8'h1c ? 28'h000_0000 : 28'hfff_ffff << shift; assign ONE_POINT_FIVEddend_x__2_squeezed = result_sign__5 ? wide_x_squeezed : -wide_x_squeezed; assign literal_32498 = 24'h00_0000; assign add_32499 = {{1{ONE_POINT_FIVEddend_x__2_squeezed[24]}}, ONE_POINT_FIVEddend_x__2_squeezed} + {2'h0, shrl_32486[26:3]}; assign sticky__6 = ~({literal_32252, ~nprod_fraction} | ~sign_ext_32468 | shll_32488[26:3]) != literal_32498; assign concat_32505 = {add_32499[24:0], shrl_32486[2:1], shrl_32486[0] | sticky__6}; assign ONE_POINT_FIVEbs_fraction__1 = add_32499[25] ? -concat_32505 : concat_32505; assign carry_bit = ONE_POINT_FIVEbs_fraction__1[27]; assign nor_32548 = ~(ONE_POINT_FIVEbs_fraction__1[25] | ONE_POINT_FIVEbs_fraction__1[24]); assign nor_32553 = ~(ONE_POINT_FIVEbs_fraction__1[21] | ONE_POINT_FIVEbs_fraction__1[20]); assign nor_32554 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22]); assign nor_32543 = ~(ONE_POINT_FIVEbs_fraction__1[17] | ONE_POINT_FIVEbs_fraction__1[16]); assign nor_32544 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18]); assign nor_32534 = ~(ONE_POINT_FIVEbs_fraction__1[9] | ONE_POINT_FIVEbs_fraction__1[8]); assign nor_32535 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10]); assign and_32579 = ~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26]) & nor_32548; assign nor_32581 = ~(carry_bit | ~ONE_POINT_FIVEbs_fraction__1[26]); assign and_32584 = nor_32554 & nor_32553; assign nor_32585 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ~ONE_POINT_FIVEbs_fraction__1[22]); assign and_32576 = nor_32544 & nor_32543; assign nor_32577 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ~ONE_POINT_FIVEbs_fraction__1[18]); assign nor_32571 = ~(ONE_POINT_FIVEbs_fraction__1[13] | ONE_POINT_FIVEbs_fraction__1[12]); assign nor_32573 = ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14]); assign and_32567 = nor_32535 & nor_32534; assign nor_32568 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ~ONE_POINT_FIVEbs_fraction__1[10]); assign nor_32562 = ~(ONE_POINT_FIVEbs_fraction__1[5] | ONE_POINT_FIVEbs_fraction__1[4]); assign nor_32564 = ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6]); assign nor_32588 = ~(ONE_POINT_FIVEbs_fraction__1[1] | ONE_POINT_FIVEbs_fraction__1[0]); assign nor_32589 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2]); assign and_32628 = and_32579 & and_32584; assign priority_sel_32629 = priority_sel_2b_2way({~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26] | nor_32548), and_32579}, {nor_32581, literal_32252}, {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[25] | ~ONE_POINT_FIVEbs_fraction__1[24])}, {literal_32252, nor_32581}); assign and_32624 = nor_32573 & nor_32571; assign and_32620 = nor_32564 & nor_32562; assign and_32616 = nor_32589 & nor_32588; assign nor_32617 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ~ONE_POINT_FIVEbs_fraction__1[2]); assign concat_32643 = {literal_32262, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22] | nor_32553), and_32584}, {nor_32585, literal_32252}, {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[21] | ~ONE_POINT_FIVEbs_fraction__1[20])}, {nor_32554, nor_32585})}; assign concat_32640 = {and_32576, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18] | nor_32543), and_32576}, {nor_32577, literal_32252}, {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[17] | ~ONE_POINT_FIVEbs_fraction__1[16])}, {nor_32544, nor_32577})}; assign concat_32639 = {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14] | nor_32571) ? {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[13] | ~ONE_POINT_FIVEbs_fraction__1[12])} : {nor_32573, ~(ONE_POINT_FIVEbs_fraction__1[15] | ~ONE_POINT_FIVEbs_fraction__1[14])}}; assign concat_32637 = {and_32567, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10] | nor_32534), and_32567}, {nor_32568, literal_32252}, {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[9] | ~ONE_POINT_FIVEbs_fraction__1[8])}, {nor_32535, nor_32568})}; assign concat_32636 = {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6] | nor_32562) ? {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[5] | ~ONE_POINT_FIVEbs_fraction__1[4])} : {nor_32564, ~(ONE_POINT_FIVEbs_fraction__1[7] | ~ONE_POINT_FIVEbs_fraction__1[6])}}; assign and_32648 = and_32576 & and_32624; assign concat_32652 = {literal_32262, and_32616, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2] | nor_32588), and_32616}, {nor_32617, literal_32252}, {literal_32262, ~(ONE_POINT_FIVEbs_fraction__1[1] | ~ONE_POINT_FIVEbs_fraction__1[0])}, {nor_32589, nor_32617})}; assign sel_32854 = ~(~and_32628 | and_32648) ? {literal_32262, ~(~and_32576 | and_32624) ? concat_32639 : concat_32640} : {and_32628, priority_sel_3b_2way({~(~and_32579 | and_32584), and_32628}, {priority_sel_32629, literal_32252}, concat_32643, {literal_32252, priority_sel_32629})}; assign concat_32660 = {literal_32262, and_32567 & and_32620 ? concat_32652 : {literal_32252, ~(~and_32567 | and_32620) ? concat_32636 : concat_32637}}; assign leading_zeroes = and_32628 & and_32648 ? concat_32660 : {literal_32252, sel_32854}; assign cancel_fraction = leading_zeroes >= 5'h1d ? 29'h0000_0000 : {literal_32252, ONE_POINT_FIVEbs_fraction__1} << leading_zeroes; assign cancel_fraction__1 = cancel_fraction[27:1]; assign carry_fraction__1 = {ONE_POINT_FIVEbs_fraction__1[27:2], ONE_POINT_FIVEbs_fraction__1[1] | ONE_POINT_FIVEbs_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__3 = normal_chunk > fraction_shift__3 | half_way_chunk == 2'h3; assign add_32680 = {literal_32252, shifted_fraction[26:3]} + {literal_32498, do_round_up__3}; assign rounding_carry = add_32680[24]; assign add_32693 = {literal_32252, ONE_POINT_FIVE_bexp__3} + 9'h001; assign sub_32694 = {5'h00, rounding_carry} - {literal_32252, leading_zeroes}; assign fraction_is_zero = add_32499 == 26'h000_0000 & ~(shrl_32486[1] | shrl_32486[2]) & ~(shrl_32486[0] | sticky__6); assign wide_exponent_associative_element = {literal_32252, add_32693}; assign wide_exponent_associative_element__1 = {{4{sub_32694[5]}}, sub_32694}; assign wide_exponent = wide_exponent_associative_element + wide_exponent_associative_element__1; assign wide_exponent__1 = wide_exponent & {10{~fraction_is_zero}}; assign wide_exponent__2 = wide_exponent__1[8:0] & {9{~wide_exponent__1[9]}}; assign eq_32707 = ONE_POINT_FIVE_bexp__3 == high_exp; assign eq_32708 = ONE_POINT_FIVE_fraction__1 == literal_32272; assign eq_32710 = nprod_bexp == high_exp; assign eq_32711 = nprod_fraction == literal_32272; assign ONE_POINT_FIVE_sign__1 = nc & ~result_sign__5; assign nprod_sign = overflow_detected & ~result_sign__5; assign fraction_shift__2 = 3'h3; assign is_operand_inf = eq_32707 & eq_32708 | eq_32710 & eq_32711; assign and_reduce_32731 = &wide_exponent__2[7:0]; assign has_pos_inf = ~(~eq_32707 | ~eq_32708 | ONE_POINT_FIVE_sign__1) | ~(~eq_32710 | ~eq_32711 | nprod_sign); assign has_neg_inf = eq_32707 & eq_32708 & ONE_POINT_FIVE_sign__1 | eq_32710 & eq_32711 & nprod_sign; assign rounded_fraction = {add_32680, normal_chunk}; assign fraction_shift__1 = rounding_carry ? fraction_shift__3 : fraction_shift__2; assign shrl_32741 = rounded_fraction >> fraction_shift__1; assign is_result_nan__3 = ~(~eq_32707 | eq_32708) | ~(~eq_32710 | eq_32711) | has_pos_inf & has_neg_inf; assign result_fraction__9 = shrl_32741[22:0]; assign sign_ext_32745 = {23{~(is_operand_inf | wide_exponent__2[8] | and_reduce_32731 | ~((|wide_exponent__2[8:1]) | wide_exponent__2[0]))}}; assign result_fraction__10 = result_fraction__9 & sign_ext_32745; assign result_exponent__2 = is_result_nan__3 | is_operand_inf | wide_exponent__2[8] | and_reduce_32731 ? high_exp : wide_exponent__2[7:0]; assign result_fraction__11 = is_result_nan__3 ? nan_fraction : result_fraction__10; assign eq_32750 = result_exponent__2 == literal_32300; assign diff_fraction__3 = {literal_32262, result_fraction__11}; assign nor_32752 = ~(eq_32305 | eq_32750); assign umul_32754 = umul48b_24b_x_24b(approx_fraction__4, diff_fraction__3); assign add_32756 = concat_32310 + {literal_32252, result_exponent__2}; assign fraction__25 = umul_32754 & {48{nor_32752}}; assign exp__12 = {literal_32252, add_32756} + literal_32259; assign fraction__26 = fraction__25 >> fraction__25[47]; assign sticky__7 = {literal_32317, fraction__25[0]}; assign exp__13 = exp__12 & {10{nor_32752}}; assign fraction__27 = fraction__26 | sticky__7; assign exp__14 = exp__13 + {literal_32281, fraction__25[47]}; assign fraction__28 = $signed(exp__14) <= $signed(literal_32261) ? {literal_32252, fraction__27[47:1]} : fraction__27; assign sticky__8 = {literal_32317, fraction__27[0]}; assign fraction__29 = fraction__28 | sticky__8; assign ne_32779 = fraction__29[21:0] != literal_32335; assign greater_than_half_way__3 = fraction__29[22] & ne_32779; assign fraction__30 = fraction__29[45:23]; assign do_round_up__4 = greater_than_half_way__3 | ~(~fraction__29[22] | ne_32779 | ~fraction__29[23]); assign fraction__31 = {literal_32252, fraction__30}; assign fraction__32 = fraction__31 + {literal_32272, do_round_up__4}; assign add_32790 = exp__14 + literal_32348; assign exp__15 = fraction__32[23] ? add_32790 : exp__14; assign is_subnormal__3 = $signed(exp__15) <= $signed(literal_32261); assign result_exp__9 = exp__15[8:0]; assign eq_32796 = result_exponent__2 == high_exp; assign eq_32797 = result_fraction__11 == literal_32272; assign result_exp__10 = result_exp__9 & {9{~is_subnormal__3}}; assign has_0_arg = x_bexp__2 == literal_32300; assign has_inf_arg__3 = and_32361 | eq_32796 & eq_32797; assign and_reduce_32806 = &result_exp__10[7:0]; assign has_0_arg__3 = eq_32305 | eq_32750; assign result_sign__6 = priority_sel_1b_2way({add_32499[25], fraction_is_zero}, literal_32252, ~nprod_sign, nprod_sign); assign sign_ext_32813 = {23{~has_0_arg}}; assign result_sign__7 = is_operand_inf ? ~has_pos_inf : result_sign__6; assign x__1_fraction__2 = tuple_index_32263 & sign_ext_32813; assign is_result_nan__4 = nor_32371 | ~(~eq_32796 | eq_32797) | has_0_arg__3 & has_inf_arg__3; assign result_sign__8 = ~is_result_nan__3 & result_sign__7; assign result_fraction__12 = fraction__32[22:0]; assign eq_32824 = x_bexp__2 == high_exp; assign eq_32825 = x__1_fraction__2 == literal_32272; assign result_sign__9 = approx_sign__2 ^ result_sign__8; assign result_fraction__13 = result_fraction__12 & {23{~(has_inf_arg__3 | result_exp__10[8] | and_reduce_32806 | is_subnormal__3)}}; assign nand_32829 = ~(eq_32824 & eq_32825); assign has_inf_arg = eq_32824 & eq_32825; assign result_sign__10 = ~is_result_nan__4 & result_sign__9; assign result_fraction__14 = is_result_nan__4 ? nan_fraction : result_fraction__13; assign nor_32838 = ~(~eq_32824 | eq_32825); assign result_exp__11 = is_result_nan__4 | has_inf_arg__3 | result_exp__10[8] | and_reduce_32806 ? high_exp : result_exp__10[7:0]; assign result__4 = {has_0_arg | nor_32838 ? x_sign__1 : ~(x_sign__1 | ~(has_inf_arg ? x_sign__1 : result_sign__10)), has_0_arg | nor_32838 | x_sign__1 ? high_exp : result_exp__11 & {8{nand_32829}}, (nor_32838 ? tuple_index_32263 : (x_sign__1 ? nan_fraction : result_fraction__14 & {23{nand_32829}})) & sign_ext_32813}; assign out = result__4; endmodule