package bfloat16 file_number 0 "/inputs/subtree/xls/dslx/stdlib/apfloat.x" file_number 1 "/inputs/subtree/xls/dslx/stdlib/std.x" file_number 2 "/inputs/subtree/xls/dslx/stdlib/bfloat16.x" top fn __bfloat16__full_precision_mul(x: (bits[1], bits[8], bits[7]) id=167, y: (bits[1], bits[8], bits[7]) id=168) -> (bits[1], bits[8], bits[15]) { x_bexp__2: bits[8] = tuple_index(x, index=1, id=428, pos=[(0,3444,16), (0,3510,29), (2,169,31)]) literal.430: bits[8] = literal(value=0, id=430, pos=[(0,804,14), (0,3427,40), (0,3510,29), (2,169,31)]) y_bexp__2: bits[8] = tuple_index(y, index=1, id=429, pos=[(0,3444,45), (0,3510,29), (2,169,31)]) literal.427: bits[1] = literal(value=0, id=427, pos=[(0,3460,74), (0,3510,29), (2,169,31)]) literal.431: bits[1] = literal(value=1, id=431, pos=[(0,3430,24), (0,3510,29), (2,169,31)]) x_fraction__2: bits[7] = tuple_index(x, index=2, id=432, pos=[(0,3430,33), (0,3510,29), (2,169,31)]) y_fraction__2: bits[7] = tuple_index(y, index=2, id=433, pos=[(0,3431,33), (0,3510,29), (2,169,31)]) eq.436: bits[1] = eq(x_bexp__2, literal.430, id=436, pos=[(0,804,5), (0,3427,40), (0,3510,29), (2,169,31)]) eq.437: bits[1] = eq(y_bexp__2, literal.430, id=437, pos=[(0,804,5), (0,3427,67), (0,3510,29), (2,169,31)]) concat.434: bits[9] = concat(literal.427, x_bexp__2, id=434, pos=[(0,3510,29), (2,169,31)]) concat.435: bits[9] = concat(literal.427, y_bexp__2, id=435, pos=[(0,3510,29), (2,169,31)]) x_significand__2: bits[8] = concat(literal.431, x_fraction__2, id=438, pos=[(0,3430,24), (0,3510,29), (2,169,31)]) y_significand__2: bits[8] = concat(literal.431, y_fraction__2, id=439, pos=[(0,3431,24), (0,3510,29), (2,169,31)]) nor.519: bits[1] = nor(eq.436, eq.437, id=519, pos=[(0,3435,8), (0,3510,29), (2,169,31)]) add.440: bits[9] = add(concat.434, concat.435, id=440, pos=[(0,3444,16), (0,3510,29), (2,169,31)]) umul.442: bits[16] = umul(x_significand__2, y_significand__2, id=442, pos=[(1,224,5), (0,3435,61), (0,3510,29), (2,169,31)]) sign_ext.508: bits[16] = sign_ext(nor.519, new_bit_count=16, id=508, pos=[(0,3435,8), (0,3510,29), (2,169,31)]) literal.444: bits[8] = literal(value=255, id=444, pos=[(0,3516,4), (2,169,31)]) literal.445: bits[7] = literal(value=0, id=445, pos=[(0,71,57), (0,3483,28), (0,3510,29), (2,169,31)]) concat.446: bits[10] = concat(literal.427, add.440, id=446, pos=[(0,3444,16), (0,3510,29), (2,169,31)]) literal.447: bits[10] = literal(value=897, id=447, pos=[(0,3444,16), (0,3510,29), (2,169,31)]) full_product: bits[16] = and(umul.442, sign_ext.508, id=509, pos=[(0,3435,8), (0,3510,29), (2,169,31)]) eq.449: bits[1] = eq(x_bexp__2, literal.444, id=449, pos=[(0,71,6), (0,3483,28), (0,3510,29), (2,169,31)]) eq.450: bits[1] = eq(x_fraction__2, literal.445, id=450, pos=[(0,96,44), (0,3477,31), (0,3510,29), (2,169,31)]) eq.451: bits[1] = eq(y_bexp__2, literal.444, id=451, pos=[(0,71,6), (0,3483,41), (0,3510,29), (2,169,31)]) eq.452: bits[1] = eq(y_fraction__2, literal.445, id=452, pos=[(0,96,44), (0,3477,44), (0,3510,29), (2,169,31)]) exp: bits[10] = add(concat.446, literal.447, id=453, pos=[(0,3444,16), (0,3510,29), (2,169,31)]) sign_ext.511: bits[10] = sign_ext(nor.519, new_bit_count=10, id=511, pos=[(0,3453,14), (0,3510,29), (2,169,31)]) literal.455: bits[9] = literal(value=0, id=455, pos=[(0,3510,29), (2,169,31)]) in_upper_binade: bits[1] = bit_slice(full_product, start=15, width=1, id=456, pos=[(1,357,61), (0,3459,34), (0,3510,29), (2,169,31)]) and.458: bits[1] = and(eq.449, eq.450, id=458, pos=[(0,96,6), (0,3477,31), (0,3510,29), (2,169,31)]) and.459: bits[1] = and(eq.451, eq.452, id=459, pos=[(0,96,6), (0,3477,44), (0,3510,29), (2,169,31)]) exp__1: bits[10] = and(exp, sign_ext.511, id=512, pos=[(0,3453,14), (0,3510,29), (2,169,31)]) concat.461: bits[10] = concat(literal.455, in_upper_binade, id=461, pos=[(0,3510,29), (2,169,31)]) has_inf_arg: bits[1] = or(and.458, and.459, id=463, pos=[(0,3484,28), (0,3510,29), (2,169,31)]) result_exp: bits[10] = add(exp__1, concat.461, id=464, pos=[(0,3464,14), (0,3510,29), (2,169,31)]) literal.465: bits[10] = literal(value=511, id=465, pos=[(0,3478,62), (0,3510,29), (2,169,31)]) result_exp__1: bits[10] = sel(has_inf_arg, cases=[result_exp, literal.465], id=467, pos=[(0,3478,21), (0,3510,29), (2,169,31)]) literal.474: bits[10] = literal(value=255, id=474, pos=[(2,169,31)]) literal.454: bits[10] = literal(value=0, id=454, pos=[(0,3522,34), (2,169,31)]) sge.482: bits[1] = sge(result_exp__1, literal.474, id=482, pos=[(0,3519,25), (2,169,31)]) sle.475: bits[1] = sle(result_exp__1, literal.454, id=475, pos=[(0,3522,25), (2,169,31)]) not.470: bits[1] = not(eq.449, id=470, pos=[(0,71,6), (0,3483,28), (0,3510,29), (2,169,31)]) not.471: bits[1] = not(eq.451, id=471, pos=[(0,71,6), (0,3483,41), (0,3510,29), (2,169,31)]) has_0_arg: bits[1] = or(eq.436, eq.437, id=441, pos=[(0,3427,40), (0,3510,29), (2,169,31)]) bit_slice.505: bits[14] = bit_slice(full_product, start=0, width=14, id=505, pos=[(0,3460,30), (0,3510,29), (2,169,31)]) or.506: bits[1] = or(sge.482, sle.475, has_inf_arg, id=506, pos=[(0,3519,11), (2,169,31)]) x_sign__2: bits[1] = tuple_index(x, index=0, id=472, pos=[(0,3467,23), (0,3510,29), (2,169,31)]) y_sign__2: bits[1] = tuple_index(y, index=0, id=473, pos=[(0,3467,33), (0,3510,29), (2,169,31)]) nor.478: bits[1] = nor(not.470, eq.450, id=478, pos=[(0,71,6), (0,3483,28), (0,3510,29), (2,169,31)]) nor.479: bits[1] = nor(not.471, eq.452, id=479, pos=[(0,71,6), (0,3483,41), (0,3510,29), (2,169,31)]) and.480: bits[1] = and(has_0_arg, has_inf_arg, id=480, pos=[(0,3485,40), (0,3510,29), (2,169,31)]) not.513: bits[1] = not(sle.475, id=513, pos=[(0,3522,11), (2,169,31)]) concat.504: bits[15] = concat(bit_slice.505, literal.427, id=504, pos=[(0,3460,30), (0,3510,29), (2,169,31)]) bit_slice.501: bits[15] = bit_slice(umul.442, start=0, width=15, id=501, pos=[(0,3460,30), (0,3510,29), (2,169,31)]) not.516: bits[1] = not(or.506, id=516, pos=[(0,3519,11), (2,169,31)]) result_sign: bits[1] = xor(x_sign__2, y_sign__2, id=481, pos=[(0,3467,23), (0,3510,29), (2,169,31)]) is_result_nan: bits[1] = or(nor.478, nor.479, and.480, id=485, pos=[(0,3485,24), (0,3510,29), (2,169,31)]) bit_slice.476: bits[8] = bit_slice(result_exp__1, start=0, width=8, id=476, pos=[(2,169,31)]) sign_ext.514: bits[8] = sign_ext(not.513, new_bit_count=8, id=514, pos=[(0,3522,11), (2,169,31)]) result_fraction__1: bits[15] = sel(in_upper_binade, cases=[concat.504, bit_slice.501], id=502, pos=[(0,3460,30), (0,3510,29), (2,169,31)]) sign_ext.517: bits[15] = sign_ext(not.516, new_bit_count=15, id=517, pos=[(0,3519,11), (2,169,31)]) not.486: bits[1] = not(result_sign, id=486, pos=[(0,3516,4), (2,169,31)]) or.498: bits[1] = or(is_result_nan, sge.482, id=498, pos=[(0,3516,4), (2,169,31)]) and.515: bits[8] = and(bit_slice.476, sign_ext.514, id=515, pos=[(0,3522,11), (2,169,31)]) and.518: bits[15] = and(result_fraction__1, sign_ext.517, id=518, pos=[(0,3519,11), (2,169,31)]) literal.489: bits[15] = literal(value=16384, id=489, pos=[(0,3516,4), (2,169,31)]) nor.490: bits[1] = nor(is_result_nan, not.486, id=490, pos=[(0,3516,4), (2,169,31)]) sel.499: bits[8] = sel(or.498, cases=[and.515, literal.444], id=499, pos=[(0,3516,4), (2,169,31)]) sel.492: bits[15] = sel(is_result_nan, cases=[and.518, literal.489], id=492, pos=[(0,3516,4), (2,169,31)]) ret tuple.493: (bits[1], bits[8], bits[15]) = tuple(nor.490, sel.499, sel.492, id=493, pos=[(0,3516,4), (2,169,31)]) }