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_32282; wire [7:0] add_32286; wire [9:0] literal_32289; wire [9:0] exp; wire [9:0] literal_32291; wire literal_32292; wire [22:0] tuple_index_32293; wire [24:0] fraction__3_squeezed; wire [22:0] fraction__5; wire [22:0] literal_32302; 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_32311; wire is_subnormal; wire [8:0] result_exp__1; wire x_sign__1; wire and_reduce_32320; wire or_32324; wire [7:0] high_exp; wire [26:0] sub_32326; wire [22:0] result_fraction; wire [7:0] result_exp__4; wire [7:0] literal_32331; wire [7:0] approx_bexp__1; wire [22:0] result_fraction__3; wire eq_32336; wire eq_32337; wire [23:0] half_x_fraction__4; wire [23:0] approx_fraction__4; wire nor_32340; wire [8:0] concat_32342; wire [47:0] umul_32343; wire [8:0] add_32345; wire [47:0] fraction__8; wire [46:0] literal_32349; 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_32367; wire ne_32370; 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_32380; wire [9:0] add_32382; wire [9:0] exp__7; wire is_subnormal__1; wire [4:0] literal_32387; wire [8:0] result_exp__2; wire eq_32390; wire eq_32391; wire eq_32392; wire eq_32393; wire [8:0] result_exp__3; wire and_32396; wire has_inf_arg__1; wire and_reduce_32400; wire has_0_arg__1; wire nor_32407; wire is_result_nan__1; wire [22:0] result_fraction__1; wire or_32413; 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_32418; wire [23:0] prod_fraction__3; wire nor_32420; wire [47:0] umul_32422; wire [8:0] add_32424; 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_32447; 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_32458; wire [9:0] exp__11; wire is_subnormal__2; wire eq_32461; 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_32475; 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_32504; 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_32522; wire [27:0] shll_32524; wire [24:0] ONE_POINT_FIVEddend_x__2_squeezed; wire [23:0] literal_32534; wire [25:0] add_32535; wire sticky__6; wire [27:0] concat_32541; wire [27:0] ONE_POINT_FIVEbs_fraction__1; wire carry_bit; wire nor_32584; wire nor_32589; wire nor_32590; wire nor_32579; wire nor_32580; wire nor_32570; wire nor_32571; wire and_32615; wire nor_32617; wire and_32620; wire nor_32621; wire and_32612; wire nor_32613; wire nor_32607; wire nor_32609; wire and_32603; wire nor_32604; wire nor_32598; wire nor_32600; wire nor_32624; wire nor_32625; wire and_32664; wire [1:0] priority_sel_32665; wire and_32660; wire and_32656; wire and_32652; wire nor_32653; wire [2:0] concat_32679; wire [2:0] concat_32676; wire [2:0] concat_32675; wire [2:0] concat_32673; wire [2:0] concat_32672; wire and_32684; wire [3:0] concat_32688; wire [3:0] sel_32889; wire [4:0] concat_32696; 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_32716; wire rounding_carry; wire [8:0] add_32728; wire [5:0] sub_32729; 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_32742; wire eq_32743; wire eq_32745; wire eq_32746; wire ONE_POINT_FIVE_sign__1; wire nprod_sign; wire [2:0] fraction_shift__2; wire is_operand_inf; wire and_reduce_32766; wire has_pos_inf; wire has_neg_inf; wire [27:0] rounded_fraction; wire [2:0] fraction_shift__1; wire [27:0] shrl_32776; wire is_result_nan__3; wire [22:0] result_fraction__9; wire [22:0] sign_ext_32780; wire [22:0] result_fraction__10; wire [7:0] result_exponent__2; wire [22:0] result_fraction__11; wire eq_32785; wire [23:0] diff_fraction__3; wire nor_32787; wire [47:0] umul_32789; wire [8:0] add_32791; 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_32814; 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_32825; wire [9:0] exp__15; wire is_subnormal__3; wire [8:0] result_exp__9; wire eq_32831; wire eq_32832; wire [8:0] result_exp__10; wire has_0_arg; wire has_inf_arg__3; wire and_reduce_32841; wire has_0_arg__3; wire result_sign__6; wire [22:0] sign_ext_32848; 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_32859; wire eq_32860; wire result_sign__9; wire [22:0] result_fraction__13; wire nand_32864; wire has_inf_arg; wire result_sign__10; wire [22:0] result_fraction__14; wire nor_32873; wire [7:0] result_exp__11; wire [31:0] result__4; assign x_bexp__2 = x[30:23]; assign literal_32282 = 1'h0; assign add_32286 = {literal_32282, x_bexp__2[7:1]} + 8'h3f; assign literal_32289 = 10'h381; assign exp = {literal_32282, add_32286, x_bexp__2[0]} + literal_32289; assign literal_32291 = 10'h000; assign literal_32292 = 1'h1; assign tuple_index_32293 = x[22:0]; assign fraction__3_squeezed = $signed(exp) <= $signed(literal_32291) ? {2'h1, tuple_index_32293} : {literal_32292, tuple_index_32293, literal_32282}; assign fraction__5 = fraction__3_squeezed[23:1]; assign literal_32302 = 23'h00_0000; assign fraction__6 = {literal_32282, fraction__5}; assign fraction__7 = fraction__6 + {literal_32302, fraction__3_squeezed[0] & fraction__3_squeezed[1]}; assign exp_squeezed = exp[8:0]; assign exp__3_squeezed = fraction__7[23] ? {literal_32282, x_bexp__2} : exp_squeezed; assign literal_32311 = 9'h000; assign is_subnormal = $signed(exp__3_squeezed) <= $signed(literal_32311); assign result_exp__1 = exp__3_squeezed & {9{~is_subnormal}}; assign x_sign__1 = x[31:31]; assign and_reduce_32320 = &result_exp__1[7:0]; assign or_32324 = result_exp__1[8] | and_reduce_32320; assign high_exp = 8'hff; assign sub_32326 = 27'h2f9_bace - {literal_32282, x_sign__1, x_bexp__2, tuple_index_32293[22:6]}; assign result_fraction = fraction__7[22:0]; assign result_exp__4 = or_32324 ? high_exp : result_exp__1[7:0]; assign literal_32331 = 8'h00; assign approx_bexp__1 = sub_32326[25:18]; assign result_fraction__3 = result_fraction & {23{~(result_exp__1[8] | and_reduce_32320 | is_subnormal)}}; assign eq_32336 = result_exp__4 == literal_32331; assign eq_32337 = approx_bexp__1 == literal_32331; assign half_x_fraction__4 = {literal_32292, result_fraction__3}; assign approx_fraction__4 = {literal_32292, sub_32326[17:0], ~tuple_index_32293[5:1]}; assign nor_32340 = ~(eq_32336 | eq_32337); assign concat_32342 = {literal_32282, approx_bexp__1}; assign umul_32343 = umul48b_24b_x_24b(half_x_fraction__4, approx_fraction__4); assign add_32345 = {literal_32282, result_exp__4} + concat_32342; assign fraction__8 = umul_32343 & {48{nor_32340}}; assign literal_32349 = 47'h0000_0000_0000; assign exp__4 = {literal_32282, add_32345} + literal_32289; assign fraction__9 = fraction__8 >> fraction__8[47]; assign sticky__2 = {literal_32349, fraction__8[0]}; assign exp__5 = exp__4 & {10{nor_32340}}; assign fraction__10 = fraction__9 | sticky__2; assign exp__6 = exp__5 + {literal_32311, fraction__8[47]}; assign fraction__11 = $signed(exp__6) <= $signed(literal_32291) ? {literal_32282, fraction__10[47:1]} : fraction__10; assign sticky__3 = {literal_32349, fraction__10[0]}; assign fraction__12 = fraction__11 | sticky__3; assign literal_32367 = 22'h00_0000; assign ne_32370 = fraction__12[21:0] != literal_32367; assign greater_than_half_way__1 = fraction__12[22] & ne_32370; assign fraction__13 = fraction__12[45:23]; assign do_round_up__1 = greater_than_half_way__1 | ~(~fraction__12[22] | ne_32370 | ~fraction__12[23]); assign fraction__14 = {literal_32282, fraction__13}; assign fraction__15 = fraction__14 + {literal_32302, do_round_up__1}; assign literal_32380 = 10'h001; assign add_32382 = exp__6 + literal_32380; assign exp__7 = fraction__15[23] ? add_32382 : exp__6; assign is_subnormal__1 = $signed(exp__7) <= $signed(literal_32291); assign literal_32387 = 5'h00; assign result_exp__2 = exp__7[8:0]; assign eq_32390 = result_fraction__3 == literal_32302; assign eq_32391 = approx_bexp__1 == high_exp; assign eq_32392 = sub_32326[17:0] == 18'h0_0000; assign eq_32393 = ~tuple_index_32293[5:1] == literal_32387; assign result_exp__3 = result_exp__2 & {9{~is_subnormal__1}}; assign and_32396 = eq_32391 & eq_32392 & eq_32393; assign has_inf_arg__1 = or_32324 & eq_32390 | and_32396; assign and_reduce_32400 = &result_exp__3[7:0]; assign has_0_arg__1 = eq_32336 | eq_32337; assign nor_32407 = ~(~eq_32391 | eq_32392 & eq_32393); assign is_result_nan__1 = ~(~(result_exp__1[8] | and_reduce_32320) | eq_32390) | nor_32407 | has_0_arg__1 & has_inf_arg__1; assign result_fraction__1 = fraction__15[22:0]; assign or_32413 = is_result_nan__1 | has_inf_arg__1 | result_exp__3[8] | and_reduce_32400; assign result_fraction__2 = result_fraction__1 & {23{~(has_inf_arg__1 | result_exp__3[8] | and_reduce_32400 | is_subnormal__1)}}; assign nan_fraction = 23'h40_0000; assign result_exp__5 = or_32413 ? high_exp : result_exp__3[7:0]; assign result_fraction__5 = is_result_nan__1 ? nan_fraction : result_fraction__2; assign eq_32418 = result_exp__5 == literal_32331; assign prod_fraction__3 = {literal_32292, result_fraction__5}; assign nor_32420 = ~(eq_32418 | eq_32337); assign umul_32422 = umul48b_24b_x_24b(prod_fraction__3, approx_fraction__4); assign add_32424 = {literal_32282, result_exp__5} + concat_32342; assign fraction__16 = umul_32422 & {48{nor_32420}}; assign exp__8 = {literal_32282, add_32424} + literal_32289; assign fraction__17 = fraction__16 >> fraction__16[47]; assign sticky__4 = {literal_32349, fraction__16[0]}; assign exp__9 = exp__8 & {10{nor_32420}}; assign fraction__18 = fraction__17 | sticky__4; assign exp__10 = exp__9 + {literal_32311, fraction__16[47]}; assign fraction__19 = $signed(exp__10) <= $signed(literal_32291) ? {literal_32282, fraction__18[47:1]} : fraction__18; assign sticky__5 = {literal_32349, fraction__18[0]}; assign fraction__20 = fraction__19 | sticky__5; assign ne_32447 = fraction__20[21:0] != literal_32367; assign greater_than_half_way__2 = fraction__20[22] & ne_32447; assign fraction__21 = fraction__20[45:23]; assign do_round_up__2 = greater_than_half_way__2 | ~(~fraction__20[22] | ne_32447 | ~fraction__20[23]); assign fraction__22 = {literal_32282, fraction__21}; assign fraction__23 = fraction__22 + {literal_32302, do_round_up__2}; assign add_32458 = exp__10 + literal_32380; assign exp__11 = fraction__23[23] ? add_32458 : exp__10; assign is_subnormal__2 = $signed(exp__11) <= $signed(literal_32291); assign eq_32461 = result_fraction__5 == literal_32302; assign result_exp__6 = exp__11[8:0]; assign has_0_arg__2 = eq_32418 | eq_32337; assign has_inf_arg__2 = or_32413 & eq_32461 | and_32396; assign result_exp__7 = result_exp__6 & {9{~is_subnormal__2}}; assign is_result_nan__2 = ~(~or_32413 | eq_32461) | nor_32407 | has_0_arg__2 & has_inf_arg__2; assign and_reduce_32475 = &result_exp__7[7:0]; assign result_exp__8 = is_result_nan__2 | has_inf_arg__2 | result_exp__7[8] | and_reduce_32475 ? high_exp : result_exp__7[7:0]; assign nprod_bexpnot = ~result_exp__8; assign nprod_bexpnot_extended = {literal_32282, 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_32475 | 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_32326[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 = {literal_32292, ONE_POINT_FIVE_fraction__1}; assign fraction_y = {literal_32292, nprod_fraction}; assign sign_ext_32504 = {24{nprod_bexp != literal_32331}}; 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_32331}}; assign fraction_y__1 = fraction_y & sign_ext_32504; 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_32282, 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_32522 = shift >= 8'h1b ? 27'h000_0000 : wide_y_shift_bits >> shift; assign shll_32524 = 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_32534 = 24'h00_0000; assign add_32535 = {{1{ONE_POINT_FIVEddend_x__2_squeezed[24]}}, ONE_POINT_FIVEddend_x__2_squeezed} + {2'h0, shrl_32522[26:3]}; assign sticky__6 = ~({literal_32282, ~nprod_fraction} | ~sign_ext_32504 | shll_32524[26:3]) != literal_32534; assign concat_32541 = {add_32535[24:0], shrl_32522[2:1], shrl_32522[0] | sticky__6}; assign ONE_POINT_FIVEbs_fraction__1 = add_32535[25] ? -concat_32541 : concat_32541; assign carry_bit = ONE_POINT_FIVEbs_fraction__1[27]; assign nor_32584 = ~(ONE_POINT_FIVEbs_fraction__1[25] | ONE_POINT_FIVEbs_fraction__1[24]); assign nor_32589 = ~(ONE_POINT_FIVEbs_fraction__1[21] | ONE_POINT_FIVEbs_fraction__1[20]); assign nor_32590 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22]); assign nor_32579 = ~(ONE_POINT_FIVEbs_fraction__1[17] | ONE_POINT_FIVEbs_fraction__1[16]); assign nor_32580 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18]); assign nor_32570 = ~(ONE_POINT_FIVEbs_fraction__1[9] | ONE_POINT_FIVEbs_fraction__1[8]); assign nor_32571 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10]); assign and_32615 = ~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26]) & nor_32584; assign nor_32617 = ~(carry_bit | ~ONE_POINT_FIVEbs_fraction__1[26]); assign and_32620 = nor_32590 & nor_32589; assign nor_32621 = ~(ONE_POINT_FIVEbs_fraction__1[23] | ~ONE_POINT_FIVEbs_fraction__1[22]); assign and_32612 = nor_32580 & nor_32579; assign nor_32613 = ~(ONE_POINT_FIVEbs_fraction__1[19] | ~ONE_POINT_FIVEbs_fraction__1[18]); assign nor_32607 = ~(ONE_POINT_FIVEbs_fraction__1[13] | ONE_POINT_FIVEbs_fraction__1[12]); assign nor_32609 = ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14]); assign and_32603 = nor_32571 & nor_32570; assign nor_32604 = ~(ONE_POINT_FIVEbs_fraction__1[11] | ~ONE_POINT_FIVEbs_fraction__1[10]); assign nor_32598 = ~(ONE_POINT_FIVEbs_fraction__1[5] | ONE_POINT_FIVEbs_fraction__1[4]); assign nor_32600 = ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6]); assign nor_32624 = ~(ONE_POINT_FIVEbs_fraction__1[1] | ONE_POINT_FIVEbs_fraction__1[0]); assign nor_32625 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2]); assign and_32664 = and_32615 & and_32620; assign priority_sel_32665 = priority_sel_2b_2way({~(carry_bit | ONE_POINT_FIVEbs_fraction__1[26] | nor_32584), and_32615}, {nor_32617, literal_32282}, {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[25] | ~ONE_POINT_FIVEbs_fraction__1[24])}, {literal_32282, nor_32617}); assign and_32660 = nor_32609 & nor_32607; assign and_32656 = nor_32600 & nor_32598; assign and_32652 = nor_32625 & nor_32624; assign nor_32653 = ~(ONE_POINT_FIVEbs_fraction__1[3] | ~ONE_POINT_FIVEbs_fraction__1[2]); assign concat_32679 = {literal_32292, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[23] | ONE_POINT_FIVEbs_fraction__1[22] | nor_32589), and_32620}, {nor_32621, literal_32282}, {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[21] | ~ONE_POINT_FIVEbs_fraction__1[20])}, {nor_32590, nor_32621})}; assign concat_32676 = {and_32612, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[19] | ONE_POINT_FIVEbs_fraction__1[18] | nor_32579), and_32612}, {nor_32613, literal_32282}, {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[17] | ~ONE_POINT_FIVEbs_fraction__1[16])}, {nor_32580, nor_32613})}; assign concat_32675 = {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[15] | ONE_POINT_FIVEbs_fraction__1[14] | nor_32607) ? {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[13] | ~ONE_POINT_FIVEbs_fraction__1[12])} : {nor_32609, ~(ONE_POINT_FIVEbs_fraction__1[15] | ~ONE_POINT_FIVEbs_fraction__1[14])}}; assign concat_32673 = {and_32603, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[11] | ONE_POINT_FIVEbs_fraction__1[10] | nor_32570), and_32603}, {nor_32604, literal_32282}, {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[9] | ~ONE_POINT_FIVEbs_fraction__1[8])}, {nor_32571, nor_32604})}; assign concat_32672 = {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[7] | ONE_POINT_FIVEbs_fraction__1[6] | nor_32598) ? {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[5] | ~ONE_POINT_FIVEbs_fraction__1[4])} : {nor_32600, ~(ONE_POINT_FIVEbs_fraction__1[7] | ~ONE_POINT_FIVEbs_fraction__1[6])}}; assign and_32684 = and_32612 & and_32660; assign concat_32688 = {literal_32292, and_32652, priority_sel_2b_2way({~(ONE_POINT_FIVEbs_fraction__1[3] | ONE_POINT_FIVEbs_fraction__1[2] | nor_32624), and_32652}, {nor_32653, literal_32282}, {literal_32292, ~(ONE_POINT_FIVEbs_fraction__1[1] | ~ONE_POINT_FIVEbs_fraction__1[0])}, {nor_32625, nor_32653})}; assign sel_32889 = ~(~and_32664 | and_32684) ? {literal_32292, ~(~and_32612 | and_32660) ? concat_32675 : concat_32676} : {and_32664, priority_sel_3b_2way({~(~and_32615 | and_32620), and_32664}, {priority_sel_32665, literal_32282}, concat_32679, {literal_32282, priority_sel_32665})}; assign concat_32696 = {literal_32292, and_32603 & and_32656 ? concat_32688 : {literal_32282, ~(~and_32603 | and_32656) ? concat_32672 : concat_32673}}; assign leading_zeroes = and_32664 & and_32684 ? concat_32696 : {literal_32282, sel_32889}; assign cancel_fraction = leading_zeroes >= 5'h1d ? 29'h0000_0000 : {literal_32282, 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_32716 = {literal_32282, shifted_fraction[26:3]} + {literal_32534, do_round_up__3}; assign rounding_carry = add_32716[24]; assign add_32728 = {literal_32282, ONE_POINT_FIVE_bexp__3} + 9'h001; assign sub_32729 = {literal_32387, rounding_carry} - {literal_32282, leading_zeroes}; assign fraction_is_zero = add_32535 == 26'h000_0000 & ~(shrl_32522[1] | shrl_32522[2]) & ~(shrl_32522[0] | sticky__6); assign wide_exponent_associative_element = {literal_32282, add_32728}; assign wide_exponent_associative_element__1 = {{4{sub_32729[5]}}, sub_32729}; 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_32742 = ONE_POINT_FIVE_bexp__3 == high_exp; assign eq_32743 = ONE_POINT_FIVE_fraction__1 == literal_32302; assign eq_32745 = nprod_bexp == high_exp; assign eq_32746 = nprod_fraction == literal_32302; 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_32742 & eq_32743 | eq_32745 & eq_32746; assign and_reduce_32766 = &wide_exponent__2[7:0]; assign has_pos_inf = ~(~eq_32742 | ~eq_32743 | ONE_POINT_FIVE_sign__1) | ~(~eq_32745 | ~eq_32746 | nprod_sign); assign has_neg_inf = eq_32742 & eq_32743 & ONE_POINT_FIVE_sign__1 | eq_32745 & eq_32746 & nprod_sign; assign rounded_fraction = {add_32716, normal_chunk}; assign fraction_shift__1 = rounding_carry ? fraction_shift__3 : fraction_shift__2; assign shrl_32776 = rounded_fraction >> fraction_shift__1; assign is_result_nan__3 = ~(~eq_32742 | eq_32743) | ~(~eq_32745 | eq_32746) | has_pos_inf & has_neg_inf; assign result_fraction__9 = shrl_32776[22:0]; assign sign_ext_32780 = {23{~(is_operand_inf | wide_exponent__2[8] | and_reduce_32766 | ~((|wide_exponent__2[8:1]) | wide_exponent__2[0]))}}; assign result_fraction__10 = result_fraction__9 & sign_ext_32780; assign result_exponent__2 = is_result_nan__3 | is_operand_inf | wide_exponent__2[8] | and_reduce_32766 ? high_exp : wide_exponent__2[7:0]; assign result_fraction__11 = is_result_nan__3 ? nan_fraction : result_fraction__10; assign eq_32785 = result_exponent__2 == literal_32331; assign diff_fraction__3 = {literal_32292, result_fraction__11}; assign nor_32787 = ~(eq_32337 | eq_32785); assign umul_32789 = umul48b_24b_x_24b(approx_fraction__4, diff_fraction__3); assign add_32791 = concat_32342 + {literal_32282, result_exponent__2}; assign fraction__25 = umul_32789 & {48{nor_32787}}; assign exp__12 = {literal_32282, add_32791} + literal_32289; assign fraction__26 = fraction__25 >> fraction__25[47]; assign sticky__7 = {literal_32349, fraction__25[0]}; assign exp__13 = exp__12 & {10{nor_32787}}; assign fraction__27 = fraction__26 | sticky__7; assign exp__14 = exp__13 + {literal_32311, fraction__25[47]}; assign fraction__28 = $signed(exp__14) <= $signed(literal_32291) ? {literal_32282, fraction__27[47:1]} : fraction__27; assign sticky__8 = {literal_32349, fraction__27[0]}; assign fraction__29 = fraction__28 | sticky__8; assign ne_32814 = fraction__29[21:0] != literal_32367; assign greater_than_half_way__3 = fraction__29[22] & ne_32814; assign fraction__30 = fraction__29[45:23]; assign do_round_up__4 = greater_than_half_way__3 | ~(~fraction__29[22] | ne_32814 | ~fraction__29[23]); assign fraction__31 = {literal_32282, fraction__30}; assign fraction__32 = fraction__31 + {literal_32302, do_round_up__4}; assign add_32825 = exp__14 + literal_32380; assign exp__15 = fraction__32[23] ? add_32825 : exp__14; assign is_subnormal__3 = $signed(exp__15) <= $signed(literal_32291); assign result_exp__9 = exp__15[8:0]; assign eq_32831 = result_exponent__2 == high_exp; assign eq_32832 = result_fraction__11 == literal_32302; assign result_exp__10 = result_exp__9 & {9{~is_subnormal__3}}; assign has_0_arg = x_bexp__2 == literal_32331; assign has_inf_arg__3 = and_32396 | eq_32831 & eq_32832; assign and_reduce_32841 = &result_exp__10[7:0]; assign has_0_arg__3 = eq_32337 | eq_32785; assign result_sign__6 = priority_sel_1b_2way({add_32535[25], fraction_is_zero}, literal_32282, ~nprod_sign, nprod_sign); assign sign_ext_32848 = {23{~has_0_arg}}; assign result_sign__7 = is_operand_inf ? ~has_pos_inf : result_sign__6; assign x__1_fraction__2 = tuple_index_32293 & sign_ext_32848; assign is_result_nan__4 = nor_32407 | ~(~eq_32831 | eq_32832) | 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_32859 = x_bexp__2 == high_exp; assign eq_32860 = x__1_fraction__2 == literal_32302; 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_32841 | is_subnormal__3)}}; assign nand_32864 = ~(eq_32859 & eq_32860); assign has_inf_arg = eq_32859 & eq_32860; 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_32873 = ~(~eq_32859 | eq_32860); assign result_exp__11 = is_result_nan__4 | has_inf_arg__3 | result_exp__10[8] | and_reduce_32841 ? high_exp : result_exp__10[7:0]; assign result__4 = {has_0_arg | nor_32873 ? x_sign__1 : ~(x_sign__1 | ~(has_inf_arg ? x_sign__1 : result_sign__10)), has_0_arg | nor_32873 | x_sign__1 ? high_exp : result_exp__11 & {8{nand_32864}}, (nor_32873 ? tuple_index_32293 : (x_sign__1 ? nan_fraction : result_fraction__14 & {23{nand_32864}})) & sign_ext_32848}; assign out = result__4; endmodule