module __float32__fma( input wire [31:0] a, input wire [31:0] b, input wire [31:0] c, 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 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] a_bexp__1; wire [7:0] b_bexp__1; wire cancel__1; wire bnot__1; wire [22:0] a_fraction__1; wire [22:0] b_fraction__1; wire eq_2043; wire eq_2044; wire [23:0] a_significand__1; wire [23:0] b_significand__1; wire nor_2049; wire [8:0] add_2050; wire [47:0] umul_2051; wire [7:0] max_exp; wire [47:0] full_product; wire eq_2058; wire eq_2059; wire eq_2060; wire eq_2061; wire [9:0] exp; wire in_upper_binade; wire [9:0] exp__1; wire has_inf_arg; wire [9:0] result_exp__1; wire [9:0] result_exp__3; wire is_subnormal; wire has_0_arg; wire is_result_nan__1; wire [8:0] result_exp; wire [7:0] c_bexp__2; wire [8:0] ab_bexp__2; wire [7:0] bnot__2; wire [9:0] ab_bexp_extended__1; wire [9:0] bnot_extended__2; wire [9:0] full_result; wire overflow_detected; wire nc; wire [8:0] narrowed_result; wire [8:0] ab_bexpor_mask__2; wire [47:0] result_fraction__1; wire [8:0] result; wire [47:0] result_fraction__2; wire [8:0] exp_difference; wire [47:0] result_fraction__5; wire [8:0] rshift_ab; wire [22:0] c_fraction__2; wire [8:0] rshift_c; wire [47:0] ab_fraction__2; wire [72:0] shll_2120; wire [23:0] sign_ext_2122; wire [72:0] shll_2123; wire a_sign__1; wire b_sign__1; wire [23:0] wide_c__3; wire result_sign__3; wire [72:0] wide_ab; wire [72:0] wide_c__2; wire [72:0] shifted_ab; wire [72:0] sticky_ab; wire [72:0] shifted_c; wire [72:0] sticky_c; wire c_sign__2; wire ab_sign__2; wire greater_sign; wire [73:0] shifted_ab__1_squeezed; wire [73:0] shifted_c__1_squeezed; wire [73:0] shifted_ab__2_squeezed; wire [73:0] shifted_c__2_squeezed; wire [74:0] shifted_ab__2; wire [74:0] shifted_c__2; wire [74:0] sum_fraction; wire [73:0] abs_fraction__2; wire [73:0] reverse_2170; wire [74:0] one_hot_2171; wire [6:0] encode_2172; wire cancel__2; wire carry_bit__2; wire [7:0] add_2180; wire [72:0] carry_fraction__1; wire [2:0] concat_2188; wire [72:0] carry_fraction__4; wire [72:0] cancel_fraction__2; wire [72:0] shifted_fraction; wire [48:0] normal_chunk; wire [48:0] half_of_extra; wire [1:0] half_way_chunk; wire [24:0] concat_2200; wire [24:0] add_2203; wire [24:0] rounded_fraction__1; wire [6:0] sub_2209; wire [8:0] greater_exp; wire rounding_carry; wire [7:0] concat_2214; wire fraction_is_zero; wire [9:0] bexp_associative_element__1; wire [9:0] bexp_associative_element__4; wire [9:0] bexp__1; wire [9:0] bexp__2; wire eq_2228; wire eq_2229; wire eq_2230; wire eq_2231; wire [8:0] bexp__6; wire and_2236; wire is_operand_inf; wire and_reduce_2245; wire has_pos_inf; wire has_neg_inf; wire is_result_nan; wire result_sign; wire [22:0] result_fraction; wire result_sign__1; wire [22:0] result_fraction__3; wire [3:0] one_hot_2275; wire result_sign__2; wire [7:0] result_exp__2; wire [22:0] result_fraction__4; wire nand_2268; wire eq_2277; assign a_bexp__1 = a[30:23]; assign b_bexp__1 = b[30:23]; assign cancel__1 = 1'h0; assign bnot__1 = 1'h1; assign a_fraction__1 = a[22:0]; assign b_fraction__1 = b[22:0]; assign eq_2043 = a_bexp__1 == 8'h00; assign eq_2044 = b_bexp__1 == 8'h00; assign a_significand__1 = {bnot__1, a_fraction__1}; assign b_significand__1 = {bnot__1, b_fraction__1}; assign nor_2049 = ~(eq_2043 | eq_2044); assign add_2050 = {cancel__1, a_bexp__1} + {cancel__1, b_bexp__1}; assign umul_2051 = umul48b_24b_x_24b(a_significand__1, b_significand__1); assign max_exp = 8'hff; assign full_product = umul_2051 & {48{nor_2049}}; assign eq_2058 = a_bexp__1 == max_exp; assign eq_2059 = a_fraction__1 == 23'h00_0000; assign eq_2060 = b_bexp__1 == max_exp; assign eq_2061 = b_fraction__1 == 23'h00_0000; assign exp = {cancel__1, add_2050} + 10'h381; assign in_upper_binade = full_product[47]; assign exp__1 = exp & {10{nor_2049}}; assign has_inf_arg = eq_2058 & eq_2059 | eq_2060 & eq_2061; assign result_exp__1 = exp__1 + {9'h000, in_upper_binade}; assign result_exp__3 = has_inf_arg ? 10'h1ff : result_exp__1; assign is_subnormal = $signed(result_exp__3) <= $signed(10'h000); assign has_0_arg = eq_2043 | eq_2044; assign is_result_nan__1 = ~(~eq_2058 | eq_2059) | ~(~eq_2060 | eq_2061) | has_0_arg & has_inf_arg; assign result_exp = result_exp__3[8:0] & {9{~is_subnormal}}; assign c_bexp__2 = c[30:23]; assign ab_bexp__2 = is_result_nan__1 ? 9'h1ff : result_exp; assign bnot__2 = ~c_bexp__2; assign ab_bexp_extended__1 = {cancel__1, ab_bexp__2}; assign bnot_extended__2 = {2'h1, bnot__2}; assign full_result = ab_bexp_extended__1 + bnot_extended__2; assign overflow_detected = full_result[9]; assign nc = ~overflow_detected; assign narrowed_result = full_result[8:0]; assign ab_bexpor_mask__2 = {9{nc}}; assign result_fraction__1 = in_upper_binade ? full_product : {full_product[46:0], cancel__1}; assign result = narrowed_result ^ ab_bexpor_mask__2; assign result_fraction__2 = result_fraction__1 & {48{~has_inf_arg}}; assign exp_difference = result + {8'h00, overflow_detected}; assign result_fraction__5 = (-result_exp__3[8:0] & {9{is_subnormal}}) >= 9'h030 ? 48'h0000_0000_0000 : result_fraction__2 >> (-result_exp__3[8:0] & {9{is_subnormal}}); assign rshift_ab = exp_difference & ab_bexpor_mask__2; assign c_fraction__2 = c[22:0]; assign rshift_c = exp_difference & {9{overflow_detected}}; assign ab_fraction__2 = is_result_nan__1 ? 48'hc000_0000_0000 : result_fraction__5; assign shll_2120 = rshift_ab >= 9'h049 ? 73'h000_0000_0000_0000_0000 : 73'h1ff_ffff_ffff_ffff_ffff << rshift_ab; assign sign_ext_2122 = {24{c_bexp__2 != 8'h00}}; assign shll_2123 = rshift_c >= 9'h049 ? 73'h000_0000_0000_0000_0000 : 73'h1ff_ffff_ffff_ffff_ffff << rshift_c; assign a_sign__1 = a[31:31]; assign b_sign__1 = b[31:31]; assign wide_c__3 = {bnot__1, c_fraction__2} & sign_ext_2122; assign result_sign__3 = a_sign__1 ^ b_sign__1; assign wide_ab = {ab_fraction__2, 25'h000_0000}; assign wide_c__2 = {wide_c__3, 49'h0_0000_0000_0000}; assign shifted_ab = rshift_ab >= 9'h049 ? 73'h000_0000_0000_0000_0000 : wide_ab >> rshift_ab; assign sticky_ab = {72'h00_0000_0000_0000_0000, ~(~ab_fraction__2 | shll_2120[72:25]) != 48'h0000_0000_0000}; assign shifted_c = rshift_c >= 9'h049 ? 73'h000_0000_0000_0000_0000 : wide_c__2 >> rshift_c; assign sticky_c = {72'h00_0000_0000_0000_0000, ~({cancel__1, ~c_fraction__2} | ~sign_ext_2122 | shll_2123[72:49]) != 24'h00_0000}; assign c_sign__2 = c[31:31]; assign ab_sign__2 = ~(is_result_nan__1 | ~result_sign__3); assign greater_sign = overflow_detected ? ab_sign__2 : c_sign__2; assign shifted_ab__1_squeezed = {cancel__1, shifted_ab | sticky_ab}; assign shifted_c__1_squeezed = {cancel__1, shifted_c | sticky_c}; assign shifted_ab__2_squeezed = ab_sign__2 ^ greater_sign ? -shifted_ab__1_squeezed : shifted_ab__1_squeezed; assign shifted_c__2_squeezed = c_sign__2 ^ greater_sign ? -shifted_c__1_squeezed : shifted_c__1_squeezed; assign shifted_ab__2 = {{1{shifted_ab__2_squeezed[73]}}, shifted_ab__2_squeezed}; assign shifted_c__2 = {{1{shifted_c__2_squeezed[73]}}, shifted_c__2_squeezed}; assign sum_fraction = shifted_ab__2 + shifted_c__2; assign abs_fraction__2 = sum_fraction[74] ? -sum_fraction[73:0] : sum_fraction[73:0]; assign reverse_2170 = {abs_fraction__2[0], abs_fraction__2[1], abs_fraction__2[2], abs_fraction__2[3], abs_fraction__2[4], abs_fraction__2[5], abs_fraction__2[6], abs_fraction__2[7], abs_fraction__2[8], abs_fraction__2[9], abs_fraction__2[10], abs_fraction__2[11], abs_fraction__2[12], abs_fraction__2[13], abs_fraction__2[14], abs_fraction__2[15], abs_fraction__2[16], abs_fraction__2[17], abs_fraction__2[18], abs_fraction__2[19], abs_fraction__2[20], abs_fraction__2[21], abs_fraction__2[22], abs_fraction__2[23], abs_fraction__2[24], abs_fraction__2[25], abs_fraction__2[26], abs_fraction__2[27], abs_fraction__2[28], abs_fraction__2[29], abs_fraction__2[30], abs_fraction__2[31], abs_fraction__2[32], abs_fraction__2[33], abs_fraction__2[34], abs_fraction__2[35], abs_fraction__2[36], abs_fraction__2[37], abs_fraction__2[38], abs_fraction__2[39], abs_fraction__2[40], abs_fraction__2[41], abs_fraction__2[42], abs_fraction__2[43], abs_fraction__2[44], abs_fraction__2[45], abs_fraction__2[46], abs_fraction__2[47], abs_fraction__2[48], abs_fraction__2[49], abs_fraction__2[50], abs_fraction__2[51], abs_fraction__2[52], abs_fraction__2[53], abs_fraction__2[54], abs_fraction__2[55], abs_fraction__2[56], abs_fraction__2[57], abs_fraction__2[58], abs_fraction__2[59], abs_fraction__2[60], abs_fraction__2[61], abs_fraction__2[62], abs_fraction__2[63], abs_fraction__2[64], abs_fraction__2[65], abs_fraction__2[66], abs_fraction__2[67], abs_fraction__2[68], abs_fraction__2[69], abs_fraction__2[70], abs_fraction__2[71], abs_fraction__2[72], abs_fraction__2[73]}; assign one_hot_2171 = {reverse_2170[73:0] == 74'h000_0000_0000_0000_0000, reverse_2170[73] && reverse_2170[72:0] == 73'h000_0000_0000_0000_0000, reverse_2170[72] && reverse_2170[71:0] == 72'h00_0000_0000_0000_0000, reverse_2170[71] && reverse_2170[70:0] == 71'h00_0000_0000_0000_0000, reverse_2170[70] && reverse_2170[69:0] == 70'h00_0000_0000_0000_0000, reverse_2170[69] && reverse_2170[68:0] == 69'h00_0000_0000_0000_0000, reverse_2170[68] && reverse_2170[67:0] == 68'h0_0000_0000_0000_0000, reverse_2170[67] && reverse_2170[66:0] == 67'h0_0000_0000_0000_0000, reverse_2170[66] && reverse_2170[65:0] == 66'h0_0000_0000_0000_0000, reverse_2170[65] && reverse_2170[64:0] == 65'h0_0000_0000_0000_0000, reverse_2170[64] && reverse_2170[63:0] == 64'h0000_0000_0000_0000, reverse_2170[63] && reverse_2170[62:0] == 63'h0000_0000_0000_0000, reverse_2170[62] && reverse_2170[61:0] == 62'h0000_0000_0000_0000, reverse_2170[61] && reverse_2170[60:0] == 61'h0000_0000_0000_0000, reverse_2170[60] && reverse_2170[59:0] == 60'h000_0000_0000_0000, reverse_2170[59] && reverse_2170[58:0] == 59'h000_0000_0000_0000, reverse_2170[58] && reverse_2170[57:0] == 58'h000_0000_0000_0000, reverse_2170[57] && reverse_2170[56:0] == 57'h000_0000_0000_0000, reverse_2170[56] && reverse_2170[55:0] == 56'h00_0000_0000_0000, reverse_2170[55] && reverse_2170[54:0] == 55'h00_0000_0000_0000, reverse_2170[54] && reverse_2170[53:0] == 54'h00_0000_0000_0000, reverse_2170[53] && reverse_2170[52:0] == 53'h00_0000_0000_0000, reverse_2170[52] && reverse_2170[51:0] == 52'h0_0000_0000_0000, reverse_2170[51] && reverse_2170[50:0] == 51'h0_0000_0000_0000, reverse_2170[50] && reverse_2170[49:0] == 50'h0_0000_0000_0000, reverse_2170[49] && reverse_2170[48:0] == 49'h0_0000_0000_0000, reverse_2170[48] && reverse_2170[47:0] == 48'h0000_0000_0000, reverse_2170[47] && reverse_2170[46:0] == 47'h0000_0000_0000, reverse_2170[46] && reverse_2170[45:0] == 46'h0000_0000_0000, reverse_2170[45] && reverse_2170[44:0] == 45'h0000_0000_0000, reverse_2170[44] && reverse_2170[43:0] == 44'h000_0000_0000, reverse_2170[43] && reverse_2170[42:0] == 43'h000_0000_0000, reverse_2170[42] && reverse_2170[41:0] == 42'h000_0000_0000, reverse_2170[41] && reverse_2170[40:0] == 41'h000_0000_0000, reverse_2170[40] && reverse_2170[39:0] == 40'h00_0000_0000, reverse_2170[39] && reverse_2170[38:0] == 39'h00_0000_0000, reverse_2170[38] && reverse_2170[37:0] == 38'h00_0000_0000, reverse_2170[37] && reverse_2170[36:0] == 37'h00_0000_0000, reverse_2170[36] && reverse_2170[35:0] == 36'h0_0000_0000, reverse_2170[35] && reverse_2170[34:0] == 35'h0_0000_0000, reverse_2170[34] && reverse_2170[33:0] == 34'h0_0000_0000, reverse_2170[33] && reverse_2170[32:0] == 33'h0_0000_0000, reverse_2170[32] && reverse_2170[31:0] == 32'h0000_0000, reverse_2170[31] && reverse_2170[30:0] == 31'h0000_0000, reverse_2170[30] && reverse_2170[29:0] == 30'h0000_0000, reverse_2170[29] && reverse_2170[28:0] == 29'h0000_0000, reverse_2170[28] && reverse_2170[27:0] == 28'h000_0000, reverse_2170[27] && reverse_2170[26:0] == 27'h000_0000, reverse_2170[26] && reverse_2170[25:0] == 26'h000_0000, reverse_2170[25] && reverse_2170[24:0] == 25'h000_0000, reverse_2170[24] && reverse_2170[23:0] == 24'h00_0000, reverse_2170[23] && reverse_2170[22:0] == 23'h00_0000, reverse_2170[22] && reverse_2170[21:0] == 22'h00_0000, reverse_2170[21] && reverse_2170[20:0] == 21'h00_0000, reverse_2170[20] && reverse_2170[19:0] == 20'h0_0000, reverse_2170[19] && reverse_2170[18:0] == 19'h0_0000, reverse_2170[18] && reverse_2170[17:0] == 18'h0_0000, reverse_2170[17] && reverse_2170[16:0] == 17'h0_0000, reverse_2170[16] && reverse_2170[15:0] == 16'h0000, reverse_2170[15] && reverse_2170[14:0] == 15'h0000, reverse_2170[14] && reverse_2170[13:0] == 14'h0000, reverse_2170[13] && reverse_2170[12:0] == 13'h0000, reverse_2170[12] && reverse_2170[11:0] == 12'h000, reverse_2170[11] && reverse_2170[10:0] == 11'h000, reverse_2170[10] && reverse_2170[9:0] == 10'h000, reverse_2170[9] && reverse_2170[8:0] == 9'h000, reverse_2170[8] && reverse_2170[7:0] == 8'h00, reverse_2170[7] && reverse_2170[6:0] == 7'h00, reverse_2170[6] && reverse_2170[5:0] == 6'h00, reverse_2170[5] && reverse_2170[4:0] == 5'h00, reverse_2170[4] && reverse_2170[3:0] == 4'h0, reverse_2170[3] && reverse_2170[2:0] == 3'h0, reverse_2170[2] && reverse_2170[1:0] == 2'h0, reverse_2170[1] && !reverse_2170[0], reverse_2170[0]}; assign encode_2172 = {one_hot_2171[64] | one_hot_2171[65] | one_hot_2171[66] | one_hot_2171[67] | one_hot_2171[68] | one_hot_2171[69] | one_hot_2171[70] | one_hot_2171[71] | one_hot_2171[72] | one_hot_2171[73] | one_hot_2171[74], one_hot_2171[32] | one_hot_2171[33] | one_hot_2171[34] | one_hot_2171[35] | one_hot_2171[36] | one_hot_2171[37] | one_hot_2171[38] | one_hot_2171[39] | one_hot_2171[40] | one_hot_2171[41] | one_hot_2171[42] | one_hot_2171[43] | one_hot_2171[44] | one_hot_2171[45] | one_hot_2171[46] | one_hot_2171[47] | one_hot_2171[48] | one_hot_2171[49] | one_hot_2171[50] | one_hot_2171[51] | one_hot_2171[52] | one_hot_2171[53] | one_hot_2171[54] | one_hot_2171[55] | one_hot_2171[56] | one_hot_2171[57] | one_hot_2171[58] | one_hot_2171[59] | one_hot_2171[60] | one_hot_2171[61] | one_hot_2171[62] | one_hot_2171[63], one_hot_2171[16] | one_hot_2171[17] | one_hot_2171[18] | one_hot_2171[19] | one_hot_2171[20] | one_hot_2171[21] | one_hot_2171[22] | one_hot_2171[23] | one_hot_2171[24] | one_hot_2171[25] | one_hot_2171[26] | one_hot_2171[27] | one_hot_2171[28] | one_hot_2171[29] | one_hot_2171[30] | one_hot_2171[31] | one_hot_2171[48] | one_hot_2171[49] | one_hot_2171[50] | one_hot_2171[51] | one_hot_2171[52] | one_hot_2171[53] | one_hot_2171[54] | one_hot_2171[55] | one_hot_2171[56] | one_hot_2171[57] | one_hot_2171[58] | one_hot_2171[59] | one_hot_2171[60] | one_hot_2171[61] | one_hot_2171[62] | one_hot_2171[63], one_hot_2171[8] | one_hot_2171[9] | one_hot_2171[10] | one_hot_2171[11] | one_hot_2171[12] | one_hot_2171[13] | one_hot_2171[14] | one_hot_2171[15] | one_hot_2171[24] | one_hot_2171[25] | one_hot_2171[26] | one_hot_2171[27] | one_hot_2171[28] | one_hot_2171[29] | one_hot_2171[30] | one_hot_2171[31] | one_hot_2171[40] | one_hot_2171[41] | one_hot_2171[42] | one_hot_2171[43] | one_hot_2171[44] | one_hot_2171[45] | one_hot_2171[46] | one_hot_2171[47] | one_hot_2171[56] | one_hot_2171[57] | one_hot_2171[58] | one_hot_2171[59] | one_hot_2171[60] | one_hot_2171[61] | one_hot_2171[62] | one_hot_2171[63] | one_hot_2171[72] | one_hot_2171[73] | one_hot_2171[74], one_hot_2171[4] | one_hot_2171[5] | one_hot_2171[6] | one_hot_2171[7] | one_hot_2171[12] | one_hot_2171[13] | one_hot_2171[14] | one_hot_2171[15] | one_hot_2171[20] | one_hot_2171[21] | one_hot_2171[22] | one_hot_2171[23] | one_hot_2171[28] | one_hot_2171[29] | one_hot_2171[30] | one_hot_2171[31] | one_hot_2171[36] | one_hot_2171[37] | one_hot_2171[38] | one_hot_2171[39] | one_hot_2171[44] | one_hot_2171[45] | one_hot_2171[46] | one_hot_2171[47] | one_hot_2171[52] | one_hot_2171[53] | one_hot_2171[54] | one_hot_2171[55] | one_hot_2171[60] | one_hot_2171[61] | one_hot_2171[62] | one_hot_2171[63] | one_hot_2171[68] | one_hot_2171[69] | one_hot_2171[70] | one_hot_2171[71], one_hot_2171[2] | one_hot_2171[3] | one_hot_2171[6] | one_hot_2171[7] | one_hot_2171[10] | one_hot_2171[11] | one_hot_2171[14] | one_hot_2171[15] | one_hot_2171[18] | one_hot_2171[19] | one_hot_2171[22] | one_hot_2171[23] | one_hot_2171[26] | one_hot_2171[27] | one_hot_2171[30] | one_hot_2171[31] | one_hot_2171[34] | one_hot_2171[35] | one_hot_2171[38] | one_hot_2171[39] | one_hot_2171[42] | one_hot_2171[43] | one_hot_2171[46] | one_hot_2171[47] | one_hot_2171[50] | one_hot_2171[51] | one_hot_2171[54] | one_hot_2171[55] | one_hot_2171[58] | one_hot_2171[59] | one_hot_2171[62] | one_hot_2171[63] | one_hot_2171[66] | one_hot_2171[67] | one_hot_2171[70] | one_hot_2171[71] | one_hot_2171[74], one_hot_2171[1] | one_hot_2171[3] | one_hot_2171[5] | one_hot_2171[7] | one_hot_2171[9] | one_hot_2171[11] | one_hot_2171[13] | one_hot_2171[15] | one_hot_2171[17] | one_hot_2171[19] | one_hot_2171[21] | one_hot_2171[23] | one_hot_2171[25] | one_hot_2171[27] | one_hot_2171[29] | one_hot_2171[31] | one_hot_2171[33] | one_hot_2171[35] | one_hot_2171[37] | one_hot_2171[39] | one_hot_2171[41] | one_hot_2171[43] | one_hot_2171[45] | one_hot_2171[47] | one_hot_2171[49] | one_hot_2171[51] | one_hot_2171[53] | one_hot_2171[55] | one_hot_2171[57] | one_hot_2171[59] | one_hot_2171[61] | one_hot_2171[63] | one_hot_2171[65] | one_hot_2171[67] | one_hot_2171[69] | one_hot_2171[71] | one_hot_2171[73]}; assign cancel__2 = |encode_2172[6:1]; assign carry_bit__2 = abs_fraction__2[73]; assign add_2180 = {cancel__1, encode_2172} + max_exp; assign carry_fraction__1 = abs_fraction__2[73:1]; assign concat_2188 = {~(carry_bit__2 | cancel__2), ~(carry_bit__2 | ~cancel__2), ~(~carry_bit__2 | cancel__2)}; assign carry_fraction__4 = carry_fraction__1 | {72'h00_0000_0000_0000_0000, abs_fraction__2[0]}; assign cancel_fraction__2 = {{66{add_2180[7]}}, add_2180} >= 74'h000_0000_0000_0000_0049 ? 73'h000_0000_0000_0000_0000 : abs_fraction__2[72:0] << {{66{add_2180[7]}}, add_2180}; assign shifted_fraction = carry_fraction__4 & {73{concat_2188[0]}} | cancel_fraction__2 & {73{concat_2188[1]}} | abs_fraction__2[72:0] & {73{concat_2188[2]}}; assign normal_chunk = shifted_fraction[48:0]; assign half_of_extra = 49'h1_0000_0000_0000; assign half_way_chunk = shifted_fraction[49:48]; assign concat_2200 = {cancel__1, shifted_fraction[72:49]}; assign add_2203 = concat_2200 + 25'h000_0001; assign rounded_fraction__1 = normal_chunk > half_of_extra | half_way_chunk == 2'h3 ? add_2203 : concat_2200; assign sub_2209 = 7'h00 - {cancel__1, encode_2172[6:1]}; assign greater_exp = overflow_detected ? ab_bexp__2 : {cancel__1, c_bexp__2}; assign rounding_carry = rounded_fraction__1[24]; assign concat_2214 = {sub_2209, ~encode_2172[0]}; assign fraction_is_zero = sum_fraction == 75'h000_0000_0000_0000_0000; assign bexp_associative_element__1 = {{2{concat_2214[7]}}, concat_2214}; assign bexp_associative_element__4 = {cancel__1, greater_exp} + {9'h000, rounding_carry}; assign bexp__1 = bexp_associative_element__1 + bexp_associative_element__4; assign bexp__2 = bexp__1 & {10{~fraction_is_zero}}; assign eq_2228 = ab_bexp__2 == 9'h1ff; assign eq_2229 = ab_fraction__2 == 48'h0000_0000_0000; assign eq_2230 = c_bexp__2 == max_exp; assign eq_2231 = c_fraction__2 == 23'h00_0000; assign bexp__6 = bexp__2[8:0] & {9{~bexp__2[9]}}; assign and_2236 = eq_2228 & eq_2229; assign is_operand_inf = and_2236 | eq_2230 & eq_2231; assign and_reduce_2245 = &bexp__6[7:0]; assign has_pos_inf = ~(~(eq_2228 & eq_2229) | ab_sign__2) | ~(~eq_2230 | ~eq_2231 | c_sign__2); assign has_neg_inf = and_2236 & ab_sign__2 | eq_2230 & eq_2231 & c_sign__2; assign is_result_nan = ~(~eq_2228 | eq_2229) | ~(~eq_2230 | eq_2231) | has_pos_inf & has_neg_inf; assign result_sign = priority_sel_1b_2way({sum_fraction[74], fraction_is_zero}, cancel__1, ~greater_sign, greater_sign); assign result_fraction = rounded_fraction__1[22:0]; assign result_sign__1 = is_operand_inf ? ~has_pos_inf : result_sign; assign result_fraction__3 = result_fraction & {23{~(is_operand_inf | bexp__6[8] | and_reduce_2245 | bexp__6 == 9'h000)}}; assign one_hot_2275 = {concat_2188[2:0] == 3'h0, concat_2188[2] && concat_2188[1:0] == 2'h0, concat_2188[1] && !concat_2188[0], concat_2188[0]}; assign result_sign__2 = ~is_result_nan & result_sign__1; assign result_exp__2 = is_result_nan | is_operand_inf | bexp__6[8] | and_reduce_2245 ? max_exp : bexp__6[7:0]; assign result_fraction__4 = is_result_nan ? 23'h08_0000 : result_fraction__3; assign nand_2268 = ~(carry_bit__2 & cancel__2); assign eq_2277 = concat_2188 == one_hot_2275[2:0]; assign out = {result_sign__2, result_exp__2, result_fraction__4}; endmodule