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 [7:0] add_34668; wire [9:0] exp; wire [22:0] tuple_index_34675; 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_34702; wire or_34706; wire [7:0] high_exp; wire [26:0] sub_34708; 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_34718; wire eq_34719; wire [23:0] half_x_fraction__4; wire [23:0] approx_fraction__4; wire nor_34722; wire [8:0] concat_34724; wire [47:0] umul_34725; wire [8:0] add_34727; wire [47:0] fraction__8; 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 ne_34752; 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_34764; wire [9:0] exp__7; wire is_subnormal__1; wire [8:0] result_exp__2; wire eq_34772; wire eq_34773; wire eq_34774; wire eq_34775; wire [8:0] result_exp__3; wire and_34778; wire has_inf_arg__1; wire and_reduce_34782; wire has_0_arg__1; wire nor_34789; wire is_result_nan__1; wire [22:0] result_fraction__1; wire or_34795; 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_34800; wire [23:0] prod_fraction__3; wire nor_34802; wire [47:0] umul_34804; wire [8:0] add_34806; 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_34829; 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_34840; wire [9:0] exp__11; wire is_subnormal__2; wire eq_34843; 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_34857; 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_34886; 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_34904; wire [27:0] shll_34906; wire [24:0] ONE_POINT_FIVEddend_x__2_squeezed; wire [25:0] add_34917; wire sticky__6; wire [27:0] concat_34923; wire [27:0] ONE_POINT_FIVEbs_fraction__1; wire carry_bit; wire nor_34966; wire nor_34971; wire nor_34972; wire nor_34961; wire nor_34962; wire nor_34952; wire nor_34953; wire and_34997; wire nor_34999; wire and_35002; wire nor_35003; wire and_34994; wire nor_34995; wire nor_34989; wire nor_34991; wire and_34985; wire nor_34986; wire nor_34980; wire nor_34982; wire nor_35006; wire nor_35007; wire and_35046; wire [1:0] priority_sel_35047; wire and_35042; wire and_35038; wire and_35034; wire nor_35035; wire [2:0] concat_35061; wire [2:0] concat_35058; wire [2:0] concat_35057; wire [2:0] concat_35055; wire [2:0] concat_35054; wire and_35066; wire [3:0] concat_35070; wire [3:0] sel_35271; wire [4:0] concat_35078; 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_35098; wire rounding_carry; wire [8:0] add_35110; wire [5:0] sub_35111; 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_35124; wire eq_35125; wire eq_35127; wire eq_35128; wire ONE_POINT_FIVE_sign__1; wire nprod_sign; wire [2:0] fraction_shift__2; wire is_operand_inf; wire and_reduce_35148; wire has_pos_inf; wire has_neg_inf; wire [27:0] rounded_fraction; wire [2:0] fraction_shift__1; wire [27:0] shrl_35158; wire is_result_nan__3; wire [22:0] result_fraction__9; wire [22:0] sign_ext_35162; wire [22:0] result_fraction__10; wire [7:0] result_exponent__2; wire [22:0] result_fraction__11; wire eq_35167; wire [23:0] diff_fraction__3; wire nor_35169; wire [47:0] umul_35171; wire [8:0] add_35173; 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_35196; 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_35207; wire [9:0] exp__15; wire is_subnormal__3; wire [8:0] result_exp__9; wire eq_35213; wire eq_35214; wire [8:0] result_exp__10; wire has_0_arg; wire has_inf_arg__3; wire and_reduce_35223; wire has_0_arg__3; wire result_sign__6; wire [22:0] sign_ext_35230; 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_35241; wire eq_35242; wire result_sign__9; wire [22:0] result_fraction__13; wire nand_35246; wire has_inf_arg; wire result_sign__10; wire [22:0] result_fraction__14; wire nor_35255; wire [7:0] result_exp__11; wire [31:0] result__4; assign x_bexp__2 = x[30:23]; assign add_34668 = {1'h0, x_bexp__2[7:1]} + 8'h3f; assign exp = {1'h0, add_34668, x_bexp__2[0]} + 10'h381; assign tuple_index_34675 = x[22:0]; assign fraction__3_squeezed = $signed(exp) <= $signed(10'h000) ? {2'h1, tuple_index_34675} : {1'h1, tuple_index_34675, 1'h0}; assign fraction__5 = fraction__3_squeezed[23:1]; assign fraction__6 = {1'h0, 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] ? {1'h0, 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_34702 = &result_exp__1[7:0]; assign or_34706 = result_exp__1[8] | and_reduce_34702; assign high_exp = 8'hff; assign sub_34708 = 27'h2f9_bace - {1'h0, x_sign__1, x_bexp__2, tuple_index_34675[22:6]}; assign result_fraction = fraction__7[22:0]; assign result_exp__4 = or_34706 ? high_exp : result_exp__1[7:0]; assign approx_bexp__1 = sub_34708[25:18]; assign result_fraction__3 = result_fraction & {23{~(result_exp__1[8] | and_reduce_34702 | is_subnormal)}}; assign eq_34718 = result_exp__4 == 8'h00; assign eq_34719 = approx_bexp__1 == 8'h00; assign half_x_fraction__4 = {1'h1, result_fraction__3}; assign approx_fraction__4 = {1'h1, sub_34708[17:0], ~tuple_index_34675[5:1]}; assign nor_34722 = ~(eq_34718 | eq_34719); assign concat_34724 = {1'h0, approx_bexp__1}; assign umul_34725 = umul48b_24b_x_24b(half_x_fraction__4, approx_fraction__4); assign add_34727 = {1'h0, result_exp__4} + concat_34724; assign fraction__8 = umul_34725 & {48{nor_34722}}; assign exp__4 = {1'h0, add_34727} + 10'h381; assign fraction__9 = fraction__8 >> fraction__8[47]; assign sticky__2 = {47'h0000_0000_0000, fraction__8[0]}; assign exp__5 = exp__4 & {10{nor_34722}}; assign fraction__10 = fraction__9 | sticky__2; assign exp__6 = exp__5 + {9'h000, fraction__8[47]}; assign fraction__11 = $signed(exp__6) <= $signed(10'h000) ? {1'h0, fraction__10[47:1]} : fraction__10; assign sticky__3 = {47'h0000_0000_0000, fraction__10[0]}; assign fraction__12 = fraction__11 | sticky__3; assign ne_34752 = fraction__12[21:0] != 22'h00_0000; assign greater_than_half_way__1 = fraction__12[22] & ne_34752; assign fraction__13 = fraction__12[45:23]; assign do_round_up__1 = greater_than_half_way__1 | ~(~fraction__12[22] | ne_34752 | ~fraction__12[23]); assign fraction__14 = {1'h0, fraction__13}; assign fraction__15 = fraction__14 + {23'h00_0000, do_round_up__1}; assign add_34764 = exp__6 + 10'h001; assign exp__7 = fraction__15[23] ? add_34764 : exp__6; assign is_subnormal__1 = $signed(exp__7) <= $signed(10'h000); assign result_exp__2 = exp__7[8:0]; assign eq_34772 = result_fraction__3 == 23'h00_0000; assign eq_34773 = approx_bexp__1 == high_exp; assign eq_34774 = sub_34708[17:0] == 18'h0_0000; assign eq_34775 = ~tuple_index_34675[5:1] == 5'h00; assign result_exp__3 = result_exp__2 & {9{~is_subnormal__1}}; assign and_34778 = eq_34773 & eq_34774 & eq_34775; assign has_inf_arg__1 = or_34706 & eq_34772 | and_34778; assign and_reduce_34782 = &result_exp__3[7:0]; assign has_0_arg__1 = eq_34718 | eq_34719; assign nor_34789 = ~(~eq_34773 | eq_34774 & eq_34775); assign is_result_nan__1 = ~(~(result_exp__1[8] | and_reduce_34702) | eq_34772) | nor_34789 | has_0_arg__1 & has_inf_arg__1; assign result_fraction__1 = fraction__15[22:0]; assign or_34795 = is_result_nan__1 | has_inf_arg__1 | result_exp__3[8] | and_reduce_34782; assign result_fraction__2 = result_fraction__1 & {23{~(has_inf_arg__1 | result_exp__3[8] | and_reduce_34782 | is_subnormal__1)}}; assign nan_fraction = 23'h40_0000; assign result_exp__5 = or_34795 ? high_exp : result_exp__3[7:0]; assign result_fraction__5 = is_result_nan__1 ? nan_fraction : result_fraction__2; assign eq_34800 = result_exp__5 == 8'h00; assign prod_fraction__3 = {1'h1, result_fraction__5}; assign nor_34802 = ~(eq_34800 | eq_34719); assign umul_34804 = umul48b_24b_x_24b(prod_fraction__3, approx_fraction__4); assign add_34806 = {1'h0, result_exp__5} + concat_34724; assign fraction__16 = umul_34804 & {48{nor_34802}}; assign exp__8 = {1'h0, add_34806} + 10'h381; assign fraction__17 = fraction__16 >> fraction__16[47]; assign sticky__4 = {47'h0000_0000_0000, fraction__16[0]}; assign exp__9 = exp__8 & {10{nor_34802}}; assign fraction__18 = fraction__17 | sticky__4; assign exp__10 = exp__9 + {9'h000, fraction__16[47]}; assign fraction__19 = $signed(exp__10) <= $signed(10'h000) ? {1'h0, fraction__18[47:1]} : fraction__18; assign sticky__5 = {47'h0000_0000_0000, fraction__18[0]}; assign fraction__20 = fraction__19 | sticky__5; assign ne_34829 = fraction__20[21:0] != 22'h00_0000; assign greater_than_half_way__2 = fraction__20[22] & ne_34829; assign fraction__21 = fraction__20[45:23]; assign do_round_up__2 = greater_than_half_way__2 | ~(~fraction__20[22] | ne_34829 | ~fraction__20[23]); assign fraction__22 = {1'h0, fraction__21}; assign fraction__23 = fraction__22 + {23'h00_0000, do_round_up__2}; assign add_34840 = exp__10 + 10'h001; assign exp__11 = fraction__23[23] ? add_34840 : exp__10; assign is_subnormal__2 = $signed(exp__11) <= $signed(10'h000); assign eq_34843 = result_fraction__5 == 23'h00_0000; assign result_exp__6 = exp__11[8:0]; assign has_0_arg__2 = eq_34800 | eq_34719; assign has_inf_arg__2 = or_34795 & eq_34843 | and_34778; assign result_exp__7 = result_exp__6 & {9{~is_subnormal__2}}; assign is_result_nan__2 = ~(~or_34795 | eq_34843) | nor_34789 | has_0_arg__2 & has_inf_arg__2; assign and_reduce_34857 = &result_exp__7[7:0]; assign result_exp__8 = is_result_nan__2 | has_inf_arg__2 | result_exp__7[8] | and_reduce_34857 ? high_exp : result_exp__7[7:0]; assign nprod_bexpnot = ~result_exp__8; assign nprod_bexpnot_extended = {1'h0, 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_34857 | 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_34708[26]; 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 = {1'h1, ONE_POINT_FIVE_fraction__1}; assign fraction_y = {1'h1, nprod_fraction}; assign sign_ext_34886 = {24{nprod_bexp != 8'h00}}; 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 != 8'h00}}; assign fraction_y__1 = fraction_y & sign_ext_34886; 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 = {1'h0, 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_34904 = shift >= 8'h1b ? 27'h000_0000 : wide_y_shift_bits >> shift; assign shll_34906 = 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_34917 = {{1{ONE_POINT_FIVEddend_x__2_squeezed[24]}}, ONE_POINT_FIVEddend_x__2_squeezed} + {2'h0, shrl_34904[26:3]}; assign sticky__6 = ~({1'h0, ~nprod_fraction} | ~sign_ext_34886 | shll_34906[26:3]) != 24'h00_0000; assign concat_34923 = {add_34917[24:0], shrl_34904[2:1], shrl_34904[0] | sticky__6}; assign ONE_POINT_FIVEbs_fraction__1 = add_34917[25] ? -concat_34923 : concat_34923; assign carry_bit = ONE_POINT_FIVEbs_fraction__1[27]; assign nor_34966 = ~(ONE_POINT_FIVEbs_fraction__1[25] | ONE_POINT_FIVEbs_fraction__1[24]); assign nor_34971 = ~(ONE_POINT_FIVEbs_fraction__1[21] | ONE_POINT_FIVEbs_fraction__1[20]); assign nor_34972 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22]); assign nor_34961 = ~(ONE_POINT_FIVEbs_fraction__1[17] | ONE_POINT_FIVEbs_fraction__1[16]); assign nor_34962 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18]); assign nor_34952 = ~(ONE_POINT_FIVEbs_fraction__1[9] | ONE_POINT_FIVEbs_fraction__1[8]); assign nor_34953 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10]); assign and_34997 = ~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26]) & nor_34966; assign nor_34999 = ~(carry_bit | ~ONE_POINT_FIVEbs_fraction__1[26]); assign and_35002 = nor_34972 & nor_34971; assign nor_35003 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ~ONE_POINT_FIVEbs_fraction__1[22]); assign and_34994 = nor_34962 & nor_34961; assign nor_34995 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ~ONE_POINT_FIVEbs_fraction__1[18]); assign nor_34989 = ~(ONE_POINT_FIVEbs_fraction__1[13] | ONE_POINT_FIVEbs_fraction__1[12]); assign nor_34991 = ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14]); assign and_34985 = nor_34953 & nor_34952; assign nor_34986 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ~ONE_POINT_FIVEbs_fraction__1[10]); assign nor_34980 = ~(ONE_POINT_FIVEbs_fraction__1[5] | ONE_POINT_FIVEbs_fraction__1[4]); assign nor_34982 = ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6]); assign nor_35006 = ~(ONE_POINT_FIVEbs_fraction__1[1] | ONE_POINT_FIVEbs_fraction__1[0]); assign nor_35007 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2]); assign and_35046 = and_34997 & and_35002; assign priority_sel_35047 = priority_sel_2b_2way({~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26] | nor_34966), and_34997}, {nor_34999, 1'h0}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[25] | ~ONE_POINT_FIVEbs_fraction__1[24])}, {1'h0, nor_34999}); assign and_35042 = nor_34991 & nor_34989; assign and_35038 = nor_34982 & nor_34980; assign and_35034 = nor_35007 & nor_35006; assign nor_35035 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ~ONE_POINT_FIVEbs_fraction__1[2]); assign concat_35061 = {1'h1, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22] | nor_34971), and_35002}, {nor_35003, 1'h0}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[21] | ~ONE_POINT_FIVEbs_fraction__1[20])}, {nor_34972, nor_35003})}; assign concat_35058 = {and_34994, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18] | nor_34961), and_34994}, {nor_34995, 1'h0}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[17] | ~ONE_POINT_FIVEbs_fraction__1[16])}, {nor_34962, nor_34995})}; assign concat_35057 = {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14] | nor_34989) ? {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[13] | ~ONE_POINT_FIVEbs_fraction__1[12])} : {nor_34991, ~(ONE_POINT_FIVEbs_fraction__1[15] | ~ONE_POINT_FIVEbs_fraction__1[14])}}; assign concat_35055 = {and_34985, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10] | nor_34952), and_34985}, {nor_34986, 1'h0}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[9] | ~ONE_POINT_FIVEbs_fraction__1[8])}, {nor_34953, nor_34986})}; assign concat_35054 = {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6] | nor_34980) ? {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[5] | ~ONE_POINT_FIVEbs_fraction__1[4])} : {nor_34982, ~(ONE_POINT_FIVEbs_fraction__1[7] | ~ONE_POINT_FIVEbs_fraction__1[6])}}; assign and_35066 = and_34994 & and_35042; assign concat_35070 = {1'h1, and_35034, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2] | nor_35006), and_35034}, {nor_35035, 1'h0}, {1'h1, ~(ONE_POINT_FIVEbs_fraction__1[1] | ~ONE_POINT_FIVEbs_fraction__1[0])}, {nor_35007, nor_35035})}; assign sel_35271 = ~(~and_35046 | and_35066) ? {1'h1, ~(~and_34994 | and_35042) ? concat_35057 : concat_35058} : {and_35046, priority_sel_3b_2way({~(~and_34997 | and_35002), and_35046}, {priority_sel_35047, 1'h0}, concat_35061, {1'h0, priority_sel_35047})}; assign concat_35078 = {1'h1, and_34985 & and_35038 ? concat_35070 : {1'h0, ~(~and_34985 | and_35038) ? concat_35054 : concat_35055}}; assign leading_zeroes = and_35046 & and_35066 ? concat_35078 : {1'h0, sel_35271}; assign cancel_fraction = leading_zeroes >= 5'h1d ? 29'h0000_0000 : {1'h0, 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_35098 = {1'h0, shifted_fraction[26:3]} + {24'h00_0000, do_round_up__3}; assign rounding_carry = add_35098[24]; assign add_35110 = {1'h0, ONE_POINT_FIVE_bexp__3} + 9'h001; assign sub_35111 = {5'h00, rounding_carry} - {1'h0, leading_zeroes}; assign fraction_is_zero = add_34917 == 26'h000_0000 & ~(shrl_34904[1] | shrl_34904[2]) & ~(shrl_34904[0] | sticky__6); assign wide_exponent_associative_element = {1'h0, add_35110}; assign wide_exponent_associative_element__1 = {{4{sub_35111[5]}}, sub_35111}; 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_35124 = ONE_POINT_FIVE_bexp__3 == high_exp; assign eq_35125 = ONE_POINT_FIVE_fraction__1 == 23'h00_0000; assign eq_35127 = nprod_bexp == high_exp; assign eq_35128 = nprod_fraction == 23'h00_0000; 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_35124 & eq_35125 | eq_35127 & eq_35128; assign and_reduce_35148 = &wide_exponent__2[7:0]; assign has_pos_inf = ~(~eq_35124 | ~eq_35125 | ONE_POINT_FIVE_sign__1) | ~(~eq_35127 | ~eq_35128 | nprod_sign); assign has_neg_inf = eq_35124 & eq_35125 & ONE_POINT_FIVE_sign__1 | eq_35127 & eq_35128 & nprod_sign; assign rounded_fraction = {add_35098, normal_chunk}; assign fraction_shift__1 = rounding_carry ? fraction_shift__3 : fraction_shift__2; assign shrl_35158 = rounded_fraction >> fraction_shift__1; assign is_result_nan__3 = ~(~eq_35124 | eq_35125) | ~(~eq_35127 | eq_35128) | has_pos_inf & has_neg_inf; assign result_fraction__9 = shrl_35158[22:0]; assign sign_ext_35162 = {23{~(is_operand_inf | wide_exponent__2[8] | and_reduce_35148 | ~((|wide_exponent__2[8:1]) | wide_exponent__2[0]))}}; assign result_fraction__10 = result_fraction__9 & sign_ext_35162; assign result_exponent__2 = is_result_nan__3 | is_operand_inf | wide_exponent__2[8] | and_reduce_35148 ? high_exp : wide_exponent__2[7:0]; assign result_fraction__11 = is_result_nan__3 ? nan_fraction : result_fraction__10; assign eq_35167 = result_exponent__2 == 8'h00; assign diff_fraction__3 = {1'h1, result_fraction__11}; assign nor_35169 = ~(eq_34719 | eq_35167); assign umul_35171 = umul48b_24b_x_24b(approx_fraction__4, diff_fraction__3); assign add_35173 = concat_34724 + {1'h0, result_exponent__2}; assign fraction__25 = umul_35171 & {48{nor_35169}}; assign exp__12 = {1'h0, add_35173} + 10'h381; assign fraction__26 = fraction__25 >> fraction__25[47]; assign sticky__7 = {47'h0000_0000_0000, fraction__25[0]}; assign exp__13 = exp__12 & {10{nor_35169}}; assign fraction__27 = fraction__26 | sticky__7; assign exp__14 = exp__13 + {9'h000, fraction__25[47]}; assign fraction__28 = $signed(exp__14) <= $signed(10'h000) ? {1'h0, fraction__27[47:1]} : fraction__27; assign sticky__8 = {47'h0000_0000_0000, fraction__27[0]}; assign fraction__29 = fraction__28 | sticky__8; assign ne_35196 = fraction__29[21:0] != 22'h00_0000; assign greater_than_half_way__3 = fraction__29[22] & ne_35196; assign fraction__30 = fraction__29[45:23]; assign do_round_up__4 = greater_than_half_way__3 | ~(~fraction__29[22] | ne_35196 | ~fraction__29[23]); assign fraction__31 = {1'h0, fraction__30}; assign fraction__32 = fraction__31 + {23'h00_0000, do_round_up__4}; assign add_35207 = exp__14 + 10'h001; assign exp__15 = fraction__32[23] ? add_35207 : exp__14; assign is_subnormal__3 = $signed(exp__15) <= $signed(10'h000); assign result_exp__9 = exp__15[8:0]; assign eq_35213 = result_exponent__2 == high_exp; assign eq_35214 = result_fraction__11 == 23'h00_0000; assign result_exp__10 = result_exp__9 & {9{~is_subnormal__3}}; assign has_0_arg = x_bexp__2 == 8'h00; assign has_inf_arg__3 = and_34778 | eq_35213 & eq_35214; assign and_reduce_35223 = &result_exp__10[7:0]; assign has_0_arg__3 = eq_34719 | eq_35167; assign result_sign__6 = priority_sel_1b_2way({add_34917[25], fraction_is_zero}, 1'h0, ~nprod_sign, nprod_sign); assign sign_ext_35230 = {23{~has_0_arg}}; assign result_sign__7 = is_operand_inf ? ~has_pos_inf : result_sign__6; assign x__1_fraction__2 = tuple_index_34675 & sign_ext_35230; assign is_result_nan__4 = nor_34789 | ~(~eq_35213 | eq_35214) | 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_35241 = x_bexp__2 == high_exp; assign eq_35242 = x__1_fraction__2 == 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_35223 | is_subnormal__3)}}; assign nand_35246 = ~(eq_35241 & eq_35242); assign has_inf_arg = eq_35241 & eq_35242; 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_35255 = ~(~eq_35241 | eq_35242); assign result_exp__11 = is_result_nan__4 | has_inf_arg__3 | result_exp__10[8] | and_reduce_35223 ? high_exp : result_exp__10[7:0]; assign result__4 = {has_0_arg | nor_35255 ? x_sign__1 : ~(x_sign__1 | ~(has_inf_arg ? x_sign__1 : result_sign__10)), has_0_arg | nor_35255 | x_sign__1 ? high_exp : result_exp__11 & {8{nand_35246}}, (nor_35255 ? tuple_index_34675 : (x_sign__1 ? nan_fraction : result_fraction__14 & {23{nand_35246}})) & sign_ext_35230}; assign out = result__4; endmodule