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 fraction__8; wire [7:0] add_34739; wire [9:0] exp; wire [22:0] tuple_index_34746; wire [24:0] fraction__2_squeezed; wire [24:0] fraction__3_squeezed; wire [22:0] fraction__5; wire [23:0] fraction__6; wire [23:0] fraction__7; wire [8:0] exp_squeezed; wire [8:0] exp__3_squeezed; wire is_subnormal; wire [8:0] result_exp__1; wire x_sign__1; wire and_reduce_34773; wire or_34777; wire [7:0] high_exp; wire [26:0] sub_34779; wire [22:0] result_fraction; wire [7:0] result_exp__4; wire [7:0] approx_bexp__1; wire [22:0] result_fraction__3; wire eq_34789; wire eq_34790; wire [23:0] half_x_fraction__4; wire [23:0] approx_fraction__4; wire nor_34793; wire [8:0] concat_34795; wire [47:0] umul_34796; wire [8:0] add_34798; wire [47:0] fraction__4; wire [9:0] exp__4; wire [47:0] fraction__9; wire [9:0] exp__5; wire [9:0] exp__6; wire fraction__10; wire [47:0] fraction__11; wire [47:0] fraction__12; wire or_34820; 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] add_34833; wire [9:0] exp__7; wire is_subnormal__1; wire [8:0] result_exp__2; wire eq_34841; wire eq_34842; wire eq_34843; wire eq_34844; wire [8:0] result_exp__3; wire and_34847; wire has_inf_arg__1; wire and_reduce_34851; wire has_0_arg__1; wire nor_34858; wire is_result_nan__1; wire [22:0] result_fraction__1; wire or_34864; 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_34869; wire [23:0] prod_fraction__3; wire nor_34871; wire [47:0] umul_34873; wire [8:0] add_34875; wire [47:0] fraction__16; wire [9:0] exp__8; wire [47:0] fraction__17; wire [9:0] exp__9; wire [9:0] exp__10; wire fraction__18; wire [47:0] fraction__19; wire [47:0] fraction__20; wire or_34896; 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_34908; wire [9:0] exp__11; wire is_subnormal__2; wire eq_34911; 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_34925; wire or_34926; wire [7:0] result_exp__8; wire [7:0] nprod_bexpnot; wire [22:0] result_fraction__6; wire overflow_detected; wire [22:0] result_fraction__7; wire approx_sign__2; wire [22:0] nprod_fraction; wire [7:0] ONE_POINT_FIVE_bexp__2; wire nc; wire result_sign__2; wire [23:0] fraction_y; wire [23:0] sign_ext_34946; wire [7:0] full_result__2; wire [7:0] ONE_POINT_FIVE_bexpor_mask__1; wire result_sign__3; wire [22:0] ONE_POINT_FIVE_fraction__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_34964; wire [27:0] shll_34966; wire [24:0] ONE_POINT_FIVEddend_x__2_squeezed; wire [25:0] add_34977; wire sticky; wire [27:0] concat_34983; wire [27:0] ONE_POINT_FIVEbs_fraction__1; wire carry_bit; wire nor_35026; wire nor_35031; wire nor_35032; wire nor_35021; wire nor_35022; wire nor_35012; wire nor_35013; wire and_35057; wire nor_35059; wire and_35062; wire nor_35063; wire and_35054; wire nor_35055; wire nor_35049; wire nor_35051; wire and_35045; wire nor_35046; wire nor_35040; wire nor_35042; wire nor_35066; wire nor_35067; wire and_35106; wire [1:0] priority_sel_35107; wire and_35102; wire and_35098; wire and_35094; wire nor_35095; wire [2:0] concat_35121; wire [2:0] concat_35118; wire [2:0] concat_35117; wire [2:0] concat_35115; wire [2:0] concat_35114; wire and_35126; wire [3:0] concat_35130; wire [3:0] sel_35314; wire [4:0] concat_35138; 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_35158; wire [7:0] ONE_POINT_FIVE_bexp__3; wire rounding_carry; wire [8:0] add_35172; wire [5:0] sub_35173; 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_35187; wire [2:0] fraction_shift__2; wire is_operand_inf; wire and_reduce_35194; wire [27:0] rounded_fraction; wire [2:0] fraction_shift__1; wire [27:0] shrl_35200; wire is_result_nan__3; wire [22:0] result_fraction__9; wire [22:0] sign_ext_35204; wire or_35205; wire [22:0] result_fraction__10; wire [7:0] result_exponent__2; wire [22:0] result_fraction__11; wire eq_35209; wire [23:0] diff_fraction__3; wire nor_35211; wire [47:0] umul_35213; wire [8:0] add_35215; wire [47:0] fraction__25; wire [9:0] exp__12; wire [47:0] fraction__26; wire [9:0] exp__13; wire [9:0] exp__14; wire fraction__27; wire [47:0] fraction__28; wire [47:0] fraction__29; wire or_35236; 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_35248; wire [9:0] exp__15; wire is_subnormal__3; wire [8:0] result_exp__9; wire eq_35255; wire [8:0] result_exp__10; wire nprod_sign; wire ONE_POINT_FIVE_sign__1; wire has_pos_inf; wire has_inf_arg__3; wire and_reduce_35266; wire has_0_arg__3; wire result_sign__6; wire result_sign__7; wire is_result_nan__4; wire result_sign__8; wire [22:0] result_fraction__12; wire eq_35281; wire eq_35282; wire result_sign__9; wire [22:0] result_fraction__13; wire nand_35286; wire has_inf_arg; wire result_sign__10; wire [22:0] result_fraction__14; wire has_0_arg; wire nor_35296; wire [7:0] result_exp__11; wire [31:0] result__4; assign x_bexp__2 = x[30:23]; assign fraction__8 = 1'h0; assign add_34739 = {fraction__8, x_bexp__2[7:1]} + 8'h3f; assign exp = {fraction__8, add_34739, x_bexp__2[0]} + 10'h381; assign tuple_index_34746 = x[22:0]; assign fraction__2_squeezed = {1'h1, tuple_index_34746, fraction__8}; assign fraction__3_squeezed = $signed(exp) <= $signed(10'h000) ? {2'h1, tuple_index_34746} : fraction__2_squeezed; assign fraction__5 = fraction__3_squeezed[23:1]; assign fraction__6 = {fraction__8, fraction__5}; assign fraction__7 = fraction__6 + {23'h00_0000, fraction__3_squeezed[0] & fraction__3_squeezed[1]}; assign exp_squeezed = exp[8:0]; assign exp__3_squeezed = fraction__7[23] ? {fraction__8, x_bexp__2} : exp_squeezed; assign is_subnormal = $signed(exp__3_squeezed) <= $signed(9'h000); assign result_exp__1 = exp__3_squeezed & {9{~is_subnormal}}; assign x_sign__1 = x[31:31]; assign and_reduce_34773 = &result_exp__1[7:0]; assign or_34777 = result_exp__1[8] | and_reduce_34773; assign high_exp = 8'hff; assign sub_34779 = 27'h2f9_bace - {fraction__8, x_sign__1, x_bexp__2, tuple_index_34746[22:6]}; assign result_fraction = fraction__7[22:0]; assign result_exp__4 = or_34777 ? high_exp : result_exp__1[7:0]; assign approx_bexp__1 = sub_34779[25:18]; assign result_fraction__3 = result_fraction & {23{~(result_exp__1[8] | and_reduce_34773 | is_subnormal)}}; assign eq_34789 = result_exp__4 == 8'h00; assign eq_34790 = approx_bexp__1 == 8'h00; assign half_x_fraction__4 = {1'h1, result_fraction__3}; assign approx_fraction__4 = {1'h1, sub_34779[17:0], ~tuple_index_34746[5:1]}; assign nor_34793 = ~(eq_34789 | eq_34790); assign concat_34795 = {fraction__8, approx_bexp__1}; assign umul_34796 = umul48b_24b_x_24b(half_x_fraction__4, approx_fraction__4); assign add_34798 = {fraction__8, result_exp__4} + concat_34795; assign fraction__4 = umul_34796 & {48{nor_34793}}; assign exp__4 = {fraction__8, add_34798} + 10'h381; assign fraction__9 = fraction__4 >> fraction__4[47]; assign exp__5 = exp__4 & {10{nor_34793}}; assign exp__6 = exp__5 + {9'h000, fraction__4[47]}; assign fraction__10 = fraction__9[0] | fraction__4[0]; assign fraction__11 = {fraction__9[47:1], fraction__10}; assign fraction__12 = $signed(exp__6) <= $signed(10'h000) ? {fraction__8, fraction__9[47:1]} : fraction__11; assign or_34820 = fraction__12[21:1] != 21'h00_0000 | fraction__12[0] | fraction__9[0] | fraction__4[0]; assign greater_than_half_way__1 = fraction__12[22] & or_34820; assign fraction__13 = fraction__12[45:23]; assign do_round_up__1 = greater_than_half_way__1 | fraction__12[22] & ~or_34820 & fraction__12[23]; assign fraction__14 = {fraction__8, fraction__13}; assign fraction__15 = fraction__14 + {23'h00_0000, do_round_up__1}; assign add_34833 = exp__6 + 10'h001; assign exp__7 = fraction__15[23] ? add_34833 : exp__6; assign is_subnormal__1 = $signed(exp__7) <= $signed(10'h000); assign result_exp__2 = exp__7[8:0]; assign eq_34841 = result_fraction__3 == 23'h00_0000; assign eq_34842 = approx_bexp__1 == high_exp; assign eq_34843 = sub_34779[17:0] == 18'h0_0000; assign eq_34844 = tuple_index_34746[5:1] == 5'h1f; assign result_exp__3 = result_exp__2 & {9{~is_subnormal__1}}; assign and_34847 = eq_34842 & eq_34843 & eq_34844; assign has_inf_arg__1 = or_34777 & eq_34841 | and_34847; assign and_reduce_34851 = &result_exp__3[7:0]; assign has_0_arg__1 = eq_34789 | eq_34790; assign nor_34858 = ~(~eq_34842 | eq_34843 & eq_34844); assign is_result_nan__1 = ~(~(result_exp__1[8] | and_reduce_34773) | eq_34841) | nor_34858 | has_0_arg__1 & has_inf_arg__1; assign result_fraction__1 = fraction__15[22:0]; assign or_34864 = is_result_nan__1 | has_inf_arg__1 | result_exp__3[8] | and_reduce_34851; assign result_fraction__2 = result_fraction__1 & {23{~(has_inf_arg__1 | result_exp__3[8] | and_reduce_34851 | is_subnormal__1)}}; assign nan_fraction = 23'h40_0000; assign result_exp__5 = or_34864 ? high_exp : result_exp__3[7:0]; assign result_fraction__5 = is_result_nan__1 ? nan_fraction : result_fraction__2; assign eq_34869 = result_exp__5 == 8'h00; assign prod_fraction__3 = {1'h1, result_fraction__5}; assign nor_34871 = ~(eq_34869 | eq_34790); assign umul_34873 = umul48b_24b_x_24b(prod_fraction__3, approx_fraction__4); assign add_34875 = {fraction__8, result_exp__5} + concat_34795; assign fraction__16 = umul_34873 & {48{nor_34871}}; assign exp__8 = {fraction__8, add_34875} + 10'h381; assign fraction__17 = fraction__16 >> fraction__16[47]; assign exp__9 = exp__8 & {10{nor_34871}}; assign exp__10 = exp__9 + {9'h000, fraction__16[47]}; assign fraction__18 = fraction__17[0] | fraction__16[0]; assign fraction__19 = {fraction__17[47:1], fraction__18}; assign fraction__20 = $signed(exp__10) <= $signed(10'h000) ? {fraction__8, fraction__17[47:1]} : fraction__19; assign or_34896 = fraction__20[21:1] != 21'h00_0000 | fraction__20[0] | fraction__17[0] | fraction__16[0]; assign greater_than_half_way__2 = fraction__20[22] & or_34896; assign fraction__21 = fraction__20[45:23]; assign do_round_up__2 = greater_than_half_way__2 | fraction__20[22] & ~or_34896 & fraction__20[23]; assign fraction__22 = {fraction__8, fraction__21}; assign fraction__23 = fraction__22 + {23'h00_0000, do_round_up__2}; assign add_34908 = exp__10 + 10'h001; assign exp__11 = fraction__23[23] ? add_34908 : exp__10; assign is_subnormal__2 = $signed(exp__11) <= $signed(10'h000); assign eq_34911 = result_fraction__5 == 23'h00_0000; assign result_exp__6 = exp__11[8:0]; assign has_0_arg__2 = eq_34869 | eq_34790; assign has_inf_arg__2 = or_34864 & eq_34911 | and_34847; assign result_exp__7 = result_exp__6 & {9{~is_subnormal__2}}; assign is_result_nan__2 = ~(~or_34864 | eq_34911) | nor_34858 | has_0_arg__2 & has_inf_arg__2; assign and_reduce_34925 = &result_exp__7[7:0]; assign or_34926 = is_result_nan__2 | has_inf_arg__2 | result_exp__7[8] | and_reduce_34925; assign result_exp__8 = or_34926 ? high_exp : result_exp__7[7:0]; assign nprod_bexpnot = ~result_exp__8; assign result_fraction__6 = fraction__23[22:0]; assign overflow_detected = nprod_bexpnot > 8'h80; assign result_fraction__7 = result_fraction__6 & {23{~(has_inf_arg__2 | result_exp__7[8] | and_reduce_34925 | is_subnormal__2)}}; assign approx_sign__2 = sub_34779[26]; assign nprod_fraction = overflow_detected ? result_fraction__7 : nan_fraction; assign ONE_POINT_FIVE_bexp__2 = 8'h7f; assign nc = ~overflow_detected; assign result_sign__2 = x_sign__1 ^ approx_sign__2; assign fraction_y = {1'h1, nprod_fraction}; assign sign_ext_34946 = {24{~(overflow_detected & result_exp__7[7:0] == 8'h00)}}; assign full_result__2 = nprod_bexpnot + ONE_POINT_FIVE_bexp__2; assign ONE_POINT_FIVE_bexpor_mask__1 = {8{nc}}; assign result_sign__3 = ~is_result_nan__1 & result_sign__2; assign ONE_POINT_FIVE_fraction__1 = overflow_detected | is_result_nan__2 ? nan_fraction : result_fraction__7; assign fraction_y__1 = fraction_y & sign_ext_34946; assign ONE_POINT_FIVEddend_x__2_squeezed_const_lsb_bits = 3'h0; assign result__5 = full_result__2 ^ ONE_POINT_FIVE_bexpor_mask__1; assign result_sign__4 = result_sign__3 ^ approx_sign__2; assign wide_x_squeezed = {2'h1, ONE_POINT_FIVE_fraction__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_34964 = shift >= 8'h1b ? 27'h000_0000 : wide_y_shift_bits >> shift; assign shll_34966 = 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 add_34977 = {{1{ONE_POINT_FIVEddend_x__2_squeezed[24]}}, ONE_POINT_FIVEddend_x__2_squeezed} + {2'h0, shrl_34964[26:3]}; assign sticky = ~({fraction__8, ~nprod_fraction} | ~sign_ext_34946 | shll_34966[26:3]) != 24'h00_0000; assign concat_34983 = {add_34977[24:0], shrl_34964[2:1], shrl_34964[0] | sticky}; assign ONE_POINT_FIVEbs_fraction__1 = add_34977[25] ? -concat_34983 : concat_34983; assign carry_bit = ONE_POINT_FIVEbs_fraction__1[27]; assign nor_35026 = ~(ONE_POINT_FIVEbs_fraction__1[25] | ONE_POINT_FIVEbs_fraction__1[24]); assign nor_35031 = ~(ONE_POINT_FIVEbs_fraction__1[21] | ONE_POINT_FIVEbs_fraction__1[20]); assign nor_35032 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22]); assign nor_35021 = ~(ONE_POINT_FIVEbs_fraction__1[17] | ONE_POINT_FIVEbs_fraction__1[16]); assign nor_35022 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18]); assign nor_35012 = ~(ONE_POINT_FIVEbs_fraction__1[9] | ONE_POINT_FIVEbs_fraction__1[8]); assign nor_35013 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10]); assign and_35057 = ~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26]) & nor_35026; assign nor_35059 = ~(carry_bit | ~ONE_POINT_FIVEbs_fraction__1[26]); assign and_35062 = nor_35032 & nor_35031; assign nor_35063 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ~ONE_POINT_FIVEbs_fraction__1[22]); assign and_35054 = nor_35022 & nor_35021; assign nor_35055 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ~ONE_POINT_FIVEbs_fraction__1[18]); assign nor_35049 = ~(ONE_POINT_FIVEbs_fraction__1[13] | ONE_POINT_FIVEbs_fraction__1[12]); assign nor_35051 = ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14]); assign and_35045 = nor_35013 & nor_35012; assign nor_35046 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ~ONE_POINT_FIVEbs_fraction__1[10]); assign nor_35040 = ~(ONE_POINT_FIVEbs_fraction__1[5] | ONE_POINT_FIVEbs_fraction__1[4]); assign nor_35042 = ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6]); assign nor_35066 = ~(ONE_POINT_FIVEbs_fraction__1[1] | ONE_POINT_FIVEbs_fraction__1[0]); assign nor_35067 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2]); assign and_35106 = and_35057 & and_35062; assign priority_sel_35107 = priority_sel_2b_2way({~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26] | nor_35026), and_35057}, {nor_35059, fraction__8}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[25] | ~ONE_POINT_FIVEbs_fraction__1[24])}, {fraction__8, nor_35059}); assign and_35102 = nor_35051 & nor_35049; assign and_35098 = nor_35042 & nor_35040; assign and_35094 = nor_35067 & nor_35066; assign nor_35095 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ~ONE_POINT_FIVEbs_fraction__1[2]); assign concat_35121 = {1'h1, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22] | nor_35031), and_35062}, {nor_35063, fraction__8}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[21] | ~ONE_POINT_FIVEbs_fraction__1[20])}, {nor_35032, nor_35063})}; assign concat_35118 = {and_35054, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18] | nor_35021), and_35054}, {nor_35055, fraction__8}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[17] | ~ONE_POINT_FIVEbs_fraction__1[16])}, {nor_35022, nor_35055})}; assign concat_35117 = {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14] | nor_35049) ? {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[13] | ~ONE_POINT_FIVEbs_fraction__1[12])} : {nor_35051, ~(ONE_POINT_FIVEbs_fraction__1[15] | ~ONE_POINT_FIVEbs_fraction__1[14])}}; assign concat_35115 = {and_35045, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10] | nor_35012), and_35045}, {nor_35046, fraction__8}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[9] | ~ONE_POINT_FIVEbs_fraction__1[8])}, {nor_35013, nor_35046})}; assign concat_35114 = {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6] | nor_35040) ? {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[5] | ~ONE_POINT_FIVEbs_fraction__1[4])} : {nor_35042, ~(ONE_POINT_FIVEbs_fraction__1[7] | ~ONE_POINT_FIVEbs_fraction__1[6])}}; assign and_35126 = and_35054 & and_35102; assign concat_35130 = {1'h1, and_35094, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2] | nor_35066), and_35094}, {nor_35095, fraction__8}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[1] | ~ONE_POINT_FIVEbs_fraction__1[0])}, {nor_35067, nor_35095})}; assign sel_35314 = ~(~and_35106 | and_35126) ? {1'h1, ~(~and_35054 | and_35102) ? concat_35117 : concat_35118} : {and_35106, priority_sel_3b_2way({~(~and_35057 | and_35062), and_35106}, {priority_sel_35107, fraction__8}, concat_35121, {fraction__8, priority_sel_35107})}; assign concat_35138 = {1'h1, and_35045 & and_35098 ? concat_35130 : {fraction__8, ~(~and_35045 | and_35098) ? concat_35114 : concat_35115}}; assign leading_zeroes = and_35106 & and_35126 ? concat_35138 : {fraction__8, sel_35314}; assign cancel_fraction = leading_zeroes >= 5'h1d ? 29'h0000_0000 : {fraction__8, 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_35158 = {fraction__8, shifted_fraction[26:3]} + {24'h00_0000, do_round_up__3}; assign ONE_POINT_FIVE_bexp__3 = overflow_detected ? ONE_POINT_FIVE_bexp__2 : result_exp__8; assign rounding_carry = add_35158[24]; assign add_35172 = {fraction__8, ONE_POINT_FIVE_bexp__3} + 9'h001; assign sub_35173 = {5'h00, rounding_carry} - {fraction__8, leading_zeroes}; assign fraction_is_zero = add_34977 == 26'h000_0000 & ~(shrl_34964[1] | shrl_34964[2]) & ~(shrl_34964[0] | sticky); assign wide_exponent_associative_element = {fraction__8, add_35172}; assign wide_exponent_associative_element__1 = {{4{sub_35173[5]}}, sub_35173}; 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_35187 = ONE_POINT_FIVE_fraction__1 == 23'h00_0000; assign fraction_shift__2 = 3'h3; assign is_operand_inf = or_34926 & eq_35187; assign and_reduce_35194 = &wide_exponent__2[7:0]; assign rounded_fraction = {add_35158, normal_chunk}; assign fraction_shift__1 = rounding_carry ? fraction_shift__3 : fraction_shift__2; assign shrl_35200 = rounded_fraction >> fraction_shift__1; assign is_result_nan__3 = ~(~or_34926 | eq_35187); assign result_fraction__9 = shrl_35200[22:0]; assign sign_ext_35204 = {23{~(is_operand_inf | wide_exponent__2[8] | and_reduce_35194 | ~((|wide_exponent__2[8:1]) | wide_exponent__2[0]))}}; assign or_35205 = is_result_nan__3 | is_operand_inf | wide_exponent__2[8] | and_reduce_35194; assign result_fraction__10 = result_fraction__9 & sign_ext_35204; assign result_exponent__2 = or_35205 ? high_exp : wide_exponent__2[7:0]; assign result_fraction__11 = is_result_nan__3 ? nan_fraction : result_fraction__10; assign eq_35209 = result_exponent__2 == 8'h00; assign diff_fraction__3 = {1'h1, result_fraction__11}; assign nor_35211 = ~(eq_34790 | eq_35209); assign umul_35213 = umul48b_24b_x_24b(approx_fraction__4, diff_fraction__3); assign add_35215 = concat_34795 + {fraction__8, result_exponent__2}; assign fraction__25 = umul_35213 & {48{nor_35211}}; assign exp__12 = {fraction__8, add_35215} + 10'h381; assign fraction__26 = fraction__25 >> fraction__25[47]; assign exp__13 = exp__12 & {10{nor_35211}}; assign exp__14 = exp__13 + {9'h000, fraction__25[47]}; assign fraction__27 = fraction__26[0] | fraction__25[0]; assign fraction__28 = {fraction__26[47:1], fraction__27}; assign fraction__29 = $signed(exp__14) <= $signed(10'h000) ? {fraction__8, fraction__26[47:1]} : fraction__28; assign or_35236 = fraction__29[21:1] != 21'h00_0000 | fraction__29[0] | fraction__26[0] | fraction__25[0]; assign greater_than_half_way__3 = fraction__29[22] & or_35236; assign fraction__30 = fraction__29[45:23]; assign do_round_up__4 = greater_than_half_way__3 | fraction__29[22] & ~or_35236 & fraction__29[23]; assign fraction__31 = {fraction__8, fraction__30}; assign fraction__32 = fraction__31 + {23'h00_0000, do_round_up__4}; assign add_35248 = exp__14 + 10'h001; assign exp__15 = fraction__32[23] ? add_35248 : exp__14; assign is_subnormal__3 = $signed(exp__15) <= $signed(10'h000); assign result_exp__9 = exp__15[8:0]; assign eq_35255 = result_fraction__11 == 23'h00_0000; assign result_exp__10 = result_exp__9 & {9{~is_subnormal__3}}; assign nprod_sign = overflow_detected & ~result_sign__5; assign ONE_POINT_FIVE_sign__1 = nc & ~result_sign__5; assign has_pos_inf = ~(~or_34926 | ONE_POINT_FIVE_sign__1); assign has_inf_arg__3 = and_34847 | or_35205 & eq_35255; assign and_reduce_35266 = &result_exp__10[7:0]; assign has_0_arg__3 = eq_34790 | eq_35209; assign result_sign__6 = priority_sel_1b_2way({add_34977[25], fraction_is_zero}, fraction__8, ~nprod_sign, nprod_sign); assign result_sign__7 = is_operand_inf ? ~has_pos_inf : result_sign__6; assign is_result_nan__4 = nor_34858 | ~(~or_35205 | eq_35255) | 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_35281 = x_bexp__2 == high_exp; assign eq_35282 = tuple_index_34746 == 23'h00_0000; 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_35266 | is_subnormal__3)}}; assign nand_35286 = ~(eq_35281 & eq_35282); assign has_inf_arg = eq_35281 & eq_35282; 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 has_0_arg = x_bexp__2 == 8'h00; assign nor_35296 = ~(~eq_35281 | eq_35282); assign result_exp__11 = is_result_nan__4 | has_inf_arg__3 | result_exp__10[8] | and_reduce_35266 ? high_exp : result_exp__10[7:0]; assign result__4 = {has_0_arg | nor_35296 ? x_sign__1 : ~(x_sign__1 | ~(has_inf_arg ? x_sign__1 : result_sign__10)), has_0_arg | nor_35296 | x_sign__1 ? high_exp : result_exp__11 & {8{nand_35286}}, (nor_35296 ? tuple_index_34746 : (x_sign__1 ? nan_fraction : result_fraction__14 & {23{nand_35286}})) & {23{~has_0_arg}}}; assign out = result__4; endmodule