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_32115; wire [7:0] add_32119; wire [9:0] literal_32122; wire [9:0] exp; wire [9:0] literal_32124; wire literal_32125; wire [22:0] tuple_index_32126; wire [24:0] fraction__3_squeezed; wire [22:0] fraction__5; wire [22:0] literal_32135; 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_32144; wire is_subnormal; wire [8:0] result_exp__1; wire x_sign__1; wire and_reduce_32153; wire [31:0] MAGIC_NUMBER; wire or_32157; wire [7:0] high_exp; wire [31:0] sub_32159; wire [22:0] result_fraction; wire [7:0] result_exp__4; wire [7:0] literal_32163; wire [7:0] approx_bexp__1; wire [22:0] result_fraction__3; wire [22:0] approx_fraction__2; wire eq_32167; wire eq_32168; wire [23:0] half_x_fraction__4; wire [23:0] approx_fraction__4; wire nor_32171; wire [8:0] concat_32173; wire [47:0] umul_32174; wire [8:0] add_32176; wire [47:0] fraction__8; wire [46:0] literal_32180; 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_32198; wire ne_32201; 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_32211; wire [9:0] add_32213; wire [9:0] exp__7; wire is_subnormal__1; wire [8:0] result_exp__2; wire eq_32219; wire eq_32220; wire eq_32221; wire [8:0] result_exp__3; wire and_32224; wire has_inf_arg__1; wire and_reduce_32228; wire has_0_arg__1; wire nor_32234; wire is_result_nan__1; wire [22:0] result_fraction__1; wire or_32240; 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_32245; wire [23:0] prod_fraction__3; wire nor_32247; wire [47:0] umul_32249; wire [8:0] add_32251; 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_32274; 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_32285; wire [9:0] exp__11; wire is_subnormal__2; wire eq_32288; 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_32302; 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_32331; 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_32349; wire [27:0] shll_32351; wire [24:0] ONE_POINT_FIVEddend_x__2_squeezed; wire [23:0] literal_32361; wire [25:0] add_32362; wire sticky__6; wire [27:0] concat_32368; wire [27:0] ONE_POINT_FIVEbs_fraction__1; wire carry_bit; wire nor_32411; wire nor_32416; wire nor_32417; wire nor_32406; wire nor_32407; wire nor_32397; wire nor_32398; wire and_32442; wire nor_32444; wire and_32447; wire nor_32448; wire and_32439; wire nor_32440; wire nor_32434; wire nor_32436; wire and_32430; wire nor_32431; wire nor_32425; wire nor_32427; wire nor_32451; wire nor_32452; wire and_32491; wire [1:0] priority_sel_32492; wire and_32487; wire and_32483; wire and_32479; wire nor_32480; wire [2:0] concat_32506; wire [2:0] concat_32503; wire [2:0] concat_32502; wire [2:0] concat_32500; wire [2:0] concat_32499; wire and_32511; wire [3:0] concat_32515; wire [3:0] sel_32717; wire [4:0] concat_32523; 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_32543; wire rounding_carry; wire [8:0] add_32556; wire [5:0] sub_32557; 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_32570; wire eq_32571; wire eq_32573; wire eq_32574; wire ONE_POINT_FIVE_sign__1; wire nprod_sign; wire [2:0] fraction_shift__2; wire is_operand_inf; wire and_reduce_32594; wire has_pos_inf; wire has_neg_inf; wire [27:0] rounded_fraction; wire [2:0] fraction_shift__1; wire [27:0] shrl_32604; wire is_result_nan__3; wire [22:0] result_fraction__9; wire [22:0] sign_ext_32608; wire [22:0] result_fraction__10; wire [7:0] result_exponent__2; wire [22:0] result_fraction__11; wire eq_32613; wire [23:0] diff_fraction__3; wire nor_32615; wire [47:0] umul_32617; wire [8:0] add_32619; 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_32642; 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_32653; wire [9:0] exp__15; wire is_subnormal__3; wire [8:0] result_exp__9; wire eq_32659; wire eq_32660; wire [8:0] result_exp__10; wire has_0_arg; wire has_inf_arg__3; wire and_reduce_32669; wire has_0_arg__3; wire result_sign__6; wire [22:0] sign_ext_32676; 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_32687; wire eq_32688; wire result_sign__9; wire [22:0] result_fraction__13; wire nand_32692; wire has_inf_arg; wire result_sign__10; wire [22:0] result_fraction__14; wire nor_32701; wire [7:0] result_exp__11; wire [31:0] result__4; assign x_bexp__2 = x[30:23]; assign literal_32115 = 1'h0; assign add_32119 = {literal_32115, x_bexp__2[7:1]} + 8'h3f; assign literal_32122 = 10'h381; assign exp = {literal_32115, add_32119, x_bexp__2[0]} + literal_32122; assign literal_32124 = 10'h000; assign literal_32125 = 1'h1; assign tuple_index_32126 = x[22:0]; assign fraction__3_squeezed = $signed(exp) <= $signed(literal_32124) ? {2'h1, tuple_index_32126} : {literal_32125, tuple_index_32126, literal_32115}; assign fraction__5 = fraction__3_squeezed[23:1]; assign literal_32135 = 23'h00_0000; assign fraction__6 = {literal_32115, fraction__5}; assign fraction__7 = fraction__6 + {literal_32135, fraction__3_squeezed[0] & fraction__3_squeezed[1]}; assign exp_squeezed = exp[8:0]; assign exp__3_squeezed = fraction__7[23] ? {literal_32115, x_bexp__2} : exp_squeezed; assign literal_32144 = 9'h000; assign is_subnormal = $signed(exp__3_squeezed) <= $signed(literal_32144); assign result_exp__1 = exp__3_squeezed & {9{~is_subnormal}}; assign x_sign__1 = x[31:31]; assign and_reduce_32153 = &result_exp__1[7:0]; assign MAGIC_NUMBER = 32'h5f37_59df; assign or_32157 = result_exp__1[8] | and_reduce_32153; assign high_exp = 8'hff; assign sub_32159 = MAGIC_NUMBER - {literal_32115, x_sign__1, x_bexp__2, tuple_index_32126[22:1]}; assign result_fraction = fraction__7[22:0]; assign result_exp__4 = or_32157 ? high_exp : result_exp__1[7:0]; assign literal_32163 = 8'h00; assign approx_bexp__1 = sub_32159[30:23]; assign result_fraction__3 = result_fraction & {23{~(result_exp__1[8] | and_reduce_32153 | is_subnormal)}}; assign approx_fraction__2 = sub_32159[22:0]; assign eq_32167 = result_exp__4 == literal_32163; assign eq_32168 = approx_bexp__1 == literal_32163; assign half_x_fraction__4 = {literal_32125, result_fraction__3}; assign approx_fraction__4 = {literal_32125, approx_fraction__2}; assign nor_32171 = ~(eq_32167 | eq_32168); assign concat_32173 = {literal_32115, approx_bexp__1}; assign umul_32174 = umul48b_24b_x_24b(half_x_fraction__4, approx_fraction__4); assign add_32176 = {literal_32115, result_exp__4} + concat_32173; assign fraction__8 = umul_32174 & {48{nor_32171}}; assign literal_32180 = 47'h0000_0000_0000; assign exp__4 = {literal_32115, add_32176} + literal_32122; assign fraction__9 = fraction__8 >> fraction__8[47]; assign sticky__2 = {literal_32180, fraction__8[0]}; assign exp__5 = exp__4 & {10{nor_32171}}; assign fraction__10 = fraction__9 | sticky__2; assign exp__6 = exp__5 + {literal_32144, fraction__8[47]}; assign fraction__11 = $signed(exp__6) <= $signed(literal_32124) ? {literal_32115, fraction__10[47:1]} : fraction__10; assign sticky__3 = {literal_32180, fraction__10[0]}; assign fraction__12 = fraction__11 | sticky__3; assign literal_32198 = 22'h00_0000; assign ne_32201 = fraction__12[21:0] != literal_32198; assign greater_than_half_way__1 = fraction__12[22] & ne_32201; assign fraction__13 = fraction__12[45:23]; assign do_round_up__1 = greater_than_half_way__1 | ~(~fraction__12[22] | ne_32201 | ~fraction__12[23]); assign fraction__14 = {literal_32115, fraction__13}; assign fraction__15 = fraction__14 + {literal_32135, do_round_up__1}; assign literal_32211 = 10'h001; assign add_32213 = exp__6 + literal_32211; assign exp__7 = fraction__15[23] ? add_32213 : exp__6; assign is_subnormal__1 = $signed(exp__7) <= $signed(literal_32124); assign result_exp__2 = exp__7[8:0]; assign eq_32219 = result_fraction__3 == literal_32135; assign eq_32220 = approx_bexp__1 == high_exp; assign eq_32221 = approx_fraction__2 == literal_32135; assign result_exp__3 = result_exp__2 & {9{~is_subnormal__1}}; assign and_32224 = eq_32220 & eq_32221; assign has_inf_arg__1 = or_32157 & eq_32219 | and_32224; assign and_reduce_32228 = &result_exp__3[7:0]; assign has_0_arg__1 = eq_32167 | eq_32168; assign nor_32234 = ~(~eq_32220 | eq_32221); assign is_result_nan__1 = ~(~(result_exp__1[8] | and_reduce_32153) | eq_32219) | nor_32234 | has_0_arg__1 & has_inf_arg__1; assign result_fraction__1 = fraction__15[22:0]; assign or_32240 = is_result_nan__1 | has_inf_arg__1 | result_exp__3[8] | and_reduce_32228; assign result_fraction__2 = result_fraction__1 & {23{~(has_inf_arg__1 | result_exp__3[8] | and_reduce_32228 | is_subnormal__1)}}; assign nan_fraction = 23'h40_0000; assign result_exp__5 = or_32240 ? high_exp : result_exp__3[7:0]; assign result_fraction__5 = is_result_nan__1 ? nan_fraction : result_fraction__2; assign eq_32245 = result_exp__5 == literal_32163; assign prod_fraction__3 = {literal_32125, result_fraction__5}; assign nor_32247 = ~(eq_32245 | eq_32168); assign umul_32249 = umul48b_24b_x_24b(prod_fraction__3, approx_fraction__4); assign add_32251 = {literal_32115, result_exp__5} + concat_32173; assign fraction__16 = umul_32249 & {48{nor_32247}}; assign exp__8 = {literal_32115, add_32251} + literal_32122; assign fraction__17 = fraction__16 >> fraction__16[47]; assign sticky__4 = {literal_32180, fraction__16[0]}; assign exp__9 = exp__8 & {10{nor_32247}}; assign fraction__18 = fraction__17 | sticky__4; assign exp__10 = exp__9 + {literal_32144, fraction__16[47]}; assign fraction__19 = $signed(exp__10) <= $signed(literal_32124) ? {literal_32115, fraction__18[47:1]} : fraction__18; assign sticky__5 = {literal_32180, fraction__18[0]}; assign fraction__20 = fraction__19 | sticky__5; assign ne_32274 = fraction__20[21:0] != literal_32198; assign greater_than_half_way__2 = fraction__20[22] & ne_32274; assign fraction__21 = fraction__20[45:23]; assign do_round_up__2 = greater_than_half_way__2 | ~(~fraction__20[22] | ne_32274 | ~fraction__20[23]); assign fraction__22 = {literal_32115, fraction__21}; assign fraction__23 = fraction__22 + {literal_32135, do_round_up__2}; assign add_32285 = exp__10 + literal_32211; assign exp__11 = fraction__23[23] ? add_32285 : exp__10; assign is_subnormal__2 = $signed(exp__11) <= $signed(literal_32124); assign eq_32288 = result_fraction__5 == literal_32135; assign result_exp__6 = exp__11[8:0]; assign has_0_arg__2 = eq_32245 | eq_32168; assign has_inf_arg__2 = or_32240 & eq_32288 | and_32224; assign result_exp__7 = result_exp__6 & {9{~is_subnormal__2}}; assign is_result_nan__2 = ~(~or_32240 | eq_32288) | nor_32234 | has_0_arg__2 & has_inf_arg__2; assign and_reduce_32302 = &result_exp__7[7:0]; assign result_exp__8 = is_result_nan__2 | has_inf_arg__2 | result_exp__7[8] | and_reduce_32302 ? high_exp : result_exp__7[7:0]; assign nprod_bexpnot = ~result_exp__8; assign nprod_bexpnot_extended = {literal_32115, 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_32302 | 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_32159[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_32125, ONE_POINT_FIVE_fraction__1}; assign fraction_y = {literal_32125, nprod_fraction}; assign sign_ext_32331 = {24{nprod_bexp != literal_32163}}; 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_32163}}; assign fraction_y__1 = fraction_y & sign_ext_32331; 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_32115, 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_32349 = shift >= 8'h1b ? 27'h000_0000 : wide_y_shift_bits >> shift; assign shll_32351 = 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_32361 = 24'h00_0000; assign add_32362 = {{1{ONE_POINT_FIVEddend_x__2_squeezed[24]}}, ONE_POINT_FIVEddend_x__2_squeezed} + {2'h0, shrl_32349[26:3]}; assign sticky__6 = ~({literal_32115, ~nprod_fraction} | ~sign_ext_32331 | shll_32351[26:3]) != literal_32361; assign concat_32368 = {add_32362[24:0], shrl_32349[2:1], shrl_32349[0] | sticky__6}; assign ONE_POINT_FIVEbs_fraction__1 = add_32362[25] ? -concat_32368 : concat_32368; assign carry_bit = ONE_POINT_FIVEbs_fraction__1[27]; assign nor_32411 = ~(ONE_POINT_FIVEbs_fraction__1[25] | ONE_POINT_FIVEbs_fraction__1[24]); assign nor_32416 = ~(ONE_POINT_FIVEbs_fraction__1[21] | ONE_POINT_FIVEbs_fraction__1[20]); assign nor_32417 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22]); assign nor_32406 = ~(ONE_POINT_FIVEbs_fraction__1[17] | ONE_POINT_FIVEbs_fraction__1[16]); assign nor_32407 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18]); assign nor_32397 = ~(ONE_POINT_FIVEbs_fraction__1[9] | ONE_POINT_FIVEbs_fraction__1[8]); assign nor_32398 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10]); assign and_32442 = ~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26]) & nor_32411; assign nor_32444 = ~(carry_bit | ~ONE_POINT_FIVEbs_fraction__1[26]); assign and_32447 = nor_32417 & nor_32416; assign nor_32448 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ~ONE_POINT_FIVEbs_fraction__1[22]); assign and_32439 = nor_32407 & nor_32406; assign nor_32440 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ~ONE_POINT_FIVEbs_fraction__1[18]); assign nor_32434 = ~(ONE_POINT_FIVEbs_fraction__1[13] | ONE_POINT_FIVEbs_fraction__1[12]); assign nor_32436 = ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14]); assign and_32430 = nor_32398 & nor_32397; assign nor_32431 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ~ONE_POINT_FIVEbs_fraction__1[10]); assign nor_32425 = ~(ONE_POINT_FIVEbs_fraction__1[5] | ONE_POINT_FIVEbs_fraction__1[4]); assign nor_32427 = ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6]); assign nor_32451 = ~(ONE_POINT_FIVEbs_fraction__1[1] | ONE_POINT_FIVEbs_fraction__1[0]); assign nor_32452 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2]); assign and_32491 = and_32442 & and_32447; assign priority_sel_32492 = priority_sel_2b_2way({~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26] | nor_32411), and_32442}, {nor_32444, literal_32115}, {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[25] | ~ONE_POINT_FIVEbs_fraction__1[24])}, {literal_32115, nor_32444}); assign and_32487 = nor_32436 & nor_32434; assign and_32483 = nor_32427 & nor_32425; assign and_32479 = nor_32452 & nor_32451; assign nor_32480 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ~ONE_POINT_FIVEbs_fraction__1[2]); assign concat_32506 = {literal_32125, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22] | nor_32416), and_32447}, {nor_32448, literal_32115}, {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[21] | ~ONE_POINT_FIVEbs_fraction__1[20])}, {nor_32417, nor_32448})}; assign concat_32503 = {and_32439, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18] | nor_32406), and_32439}, {nor_32440, literal_32115}, {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[17] | ~ONE_POINT_FIVEbs_fraction__1[16])}, {nor_32407, nor_32440})}; assign concat_32502 = {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14] | nor_32434) ? {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[13] | ~ONE_POINT_FIVEbs_fraction__1[12])} : {nor_32436, ~(ONE_POINT_FIVEbs_fraction__1[15] | ~ONE_POINT_FIVEbs_fraction__1[14])}}; assign concat_32500 = {and_32430, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10] | nor_32397), and_32430}, {nor_32431, literal_32115}, {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[9] | ~ONE_POINT_FIVEbs_fraction__1[8])}, {nor_32398, nor_32431})}; assign concat_32499 = {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6] | nor_32425) ? {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[5] | ~ONE_POINT_FIVEbs_fraction__1[4])} : {nor_32427, ~(ONE_POINT_FIVEbs_fraction__1[7] | ~ONE_POINT_FIVEbs_fraction__1[6])}}; assign and_32511 = and_32439 & and_32487; assign concat_32515 = {literal_32125, and_32479, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2] | nor_32451), and_32479}, {nor_32480, literal_32115}, {literal_32125, ~(ONE_POINT_FIVEbs_fraction__1[1] | ~ONE_POINT_FIVEbs_fraction__1[0])}, {nor_32452, nor_32480})}; assign sel_32717 = ~(~and_32491 | and_32511) ? {literal_32125, ~(~and_32439 | and_32487) ? concat_32502 : concat_32503} : {and_32491, priority_sel_3b_2way({~(~and_32442 | and_32447), and_32491}, {priority_sel_32492, literal_32115}, concat_32506, {literal_32115, priority_sel_32492})}; assign concat_32523 = {literal_32125, and_32430 & and_32483 ? concat_32515 : {literal_32115, ~(~and_32430 | and_32483) ? concat_32499 : concat_32500}}; assign leading_zeroes = and_32491 & and_32511 ? concat_32523 : {literal_32115, sel_32717}; assign cancel_fraction = leading_zeroes >= 5'h1d ? 29'h0000_0000 : {literal_32115, 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_32543 = {literal_32115, shifted_fraction[26:3]} + {literal_32361, do_round_up__3}; assign rounding_carry = add_32543[24]; assign add_32556 = {literal_32115, ONE_POINT_FIVE_bexp__3} + 9'h001; assign sub_32557 = {5'h00, rounding_carry} - {literal_32115, leading_zeroes}; assign fraction_is_zero = add_32362 == 26'h000_0000 & ~(shrl_32349[1] | shrl_32349[2]) & ~(shrl_32349[0] | sticky__6); assign wide_exponent_associative_element = {literal_32115, add_32556}; assign wide_exponent_associative_element__1 = {{4{sub_32557[5]}}, sub_32557}; 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_32570 = ONE_POINT_FIVE_bexp__3 == high_exp; assign eq_32571 = ONE_POINT_FIVE_fraction__1 == literal_32135; assign eq_32573 = nprod_bexp == high_exp; assign eq_32574 = nprod_fraction == literal_32135; 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_32570 & eq_32571 | eq_32573 & eq_32574; assign and_reduce_32594 = &wide_exponent__2[7:0]; assign has_pos_inf = ~(~eq_32570 | ~eq_32571 | ONE_POINT_FIVE_sign__1) | ~(~eq_32573 | ~eq_32574 | nprod_sign); assign has_neg_inf = eq_32570 & eq_32571 & ONE_POINT_FIVE_sign__1 | eq_32573 & eq_32574 & nprod_sign; assign rounded_fraction = {add_32543, normal_chunk}; assign fraction_shift__1 = rounding_carry ? fraction_shift__3 : fraction_shift__2; assign shrl_32604 = rounded_fraction >> fraction_shift__1; assign is_result_nan__3 = ~(~eq_32570 | eq_32571) | ~(~eq_32573 | eq_32574) | has_pos_inf & has_neg_inf; assign result_fraction__9 = shrl_32604[22:0]; assign sign_ext_32608 = {23{~(is_operand_inf | wide_exponent__2[8] | and_reduce_32594 | ~((|wide_exponent__2[8:1]) | wide_exponent__2[0]))}}; assign result_fraction__10 = result_fraction__9 & sign_ext_32608; assign result_exponent__2 = is_result_nan__3 | is_operand_inf | wide_exponent__2[8] | and_reduce_32594 ? high_exp : wide_exponent__2[7:0]; assign result_fraction__11 = is_result_nan__3 ? nan_fraction : result_fraction__10; assign eq_32613 = result_exponent__2 == literal_32163; assign diff_fraction__3 = {literal_32125, result_fraction__11}; assign nor_32615 = ~(eq_32168 | eq_32613); assign umul_32617 = umul48b_24b_x_24b(approx_fraction__4, diff_fraction__3); assign add_32619 = concat_32173 + {literal_32115, result_exponent__2}; assign fraction__25 = umul_32617 & {48{nor_32615}}; assign exp__12 = {literal_32115, add_32619} + literal_32122; assign fraction__26 = fraction__25 >> fraction__25[47]; assign sticky__7 = {literal_32180, fraction__25[0]}; assign exp__13 = exp__12 & {10{nor_32615}}; assign fraction__27 = fraction__26 | sticky__7; assign exp__14 = exp__13 + {literal_32144, fraction__25[47]}; assign fraction__28 = $signed(exp__14) <= $signed(literal_32124) ? {literal_32115, fraction__27[47:1]} : fraction__27; assign sticky__8 = {literal_32180, fraction__27[0]}; assign fraction__29 = fraction__28 | sticky__8; assign ne_32642 = fraction__29[21:0] != literal_32198; assign greater_than_half_way__3 = fraction__29[22] & ne_32642; assign fraction__30 = fraction__29[45:23]; assign do_round_up__4 = greater_than_half_way__3 | ~(~fraction__29[22] | ne_32642 | ~fraction__29[23]); assign fraction__31 = {literal_32115, fraction__30}; assign fraction__32 = fraction__31 + {literal_32135, do_round_up__4}; assign add_32653 = exp__14 + literal_32211; assign exp__15 = fraction__32[23] ? add_32653 : exp__14; assign is_subnormal__3 = $signed(exp__15) <= $signed(literal_32124); assign result_exp__9 = exp__15[8:0]; assign eq_32659 = result_exponent__2 == high_exp; assign eq_32660 = result_fraction__11 == literal_32135; assign result_exp__10 = result_exp__9 & {9{~is_subnormal__3}}; assign has_0_arg = x_bexp__2 == literal_32163; assign has_inf_arg__3 = and_32224 | eq_32659 & eq_32660; assign and_reduce_32669 = &result_exp__10[7:0]; assign has_0_arg__3 = eq_32168 | eq_32613; assign result_sign__6 = priority_sel_1b_2way({add_32362[25], fraction_is_zero}, literal_32115, ~nprod_sign, nprod_sign); assign sign_ext_32676 = {23{~has_0_arg}}; assign result_sign__7 = is_operand_inf ? ~has_pos_inf : result_sign__6; assign x__1_fraction__2 = tuple_index_32126 & sign_ext_32676; assign is_result_nan__4 = nor_32234 | ~(~eq_32659 | eq_32660) | 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_32687 = x_bexp__2 == high_exp; assign eq_32688 = x__1_fraction__2 == literal_32135; 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_32669 | is_subnormal__3)}}; assign nand_32692 = ~(eq_32687 & eq_32688); assign has_inf_arg = eq_32687 & eq_32688; 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_32701 = ~(~eq_32687 | eq_32688); assign result_exp__11 = is_result_nan__4 | has_inf_arg__3 | result_exp__10[8] | and_reduce_32669 ? high_exp : result_exp__10[7:0]; assign result__4 = {has_0_arg | nor_32701 ? x_sign__1 : ~(x_sign__1 | ~(has_inf_arg ? x_sign__1 : result_sign__10)), has_0_arg | nor_32701 | x_sign__1 ? high_exp : result_exp__11 & {8{nand_32692}}, (nor_32701 ? tuple_index_32126 : (x_sign__1 ? nan_fraction : result_fraction__14 & {23{nand_32692}})) & sign_ext_32676}; assign out = result__4; endmodule