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__mul(x: (bits[1], bits[8], bits[7]) id=161, y: (bits[1], bits[8], bits[7]) id=162) -> (bits[1], bits[8], bits[7]) { x_bexp__1: bits[8] = tuple_index(x, index=1, id=387, pos=[(0,804,5), (0,3291,40), (2,166,51)]) literal.388: bits[8] = literal(value=0, id=388, pos=[(0,804,14), (0,3291,40), (2,166,51)]) y_bexp__2: bits[8] = tuple_index(y, index=1, id=389, pos=[(0,804,5), (0,3291,67), (2,166,51)]) literal.390: bits[1] = literal(value=1, id=390, pos=[(0,3294,23), (2,166,51)]) x_fraction__1: bits[7] = tuple_index(x, index=2, id=391, pos=[(0,3294,23), (2,166,51)]) y_fraction__1: bits[7] = tuple_index(y, index=2, id=392, pos=[(0,3296,23), (2,166,51)]) eq.394: bits[1] = eq(x_bexp__1, literal.388, id=394, pos=[(0,804,5), (0,3291,40), (2,166,51)]) eq.395: bits[1] = eq(y_bexp__2, literal.388, id=395, pos=[(0,804,5), (0,3291,67), (2,166,51)]) literal.393: bits[1] = literal(value=0, id=393, pos=[(2,166,51)]) x_fraction__3: bits[8] = concat(literal.390, x_fraction__1, id=396, pos=[(0,3294,23), (2,166,51)]) y_fraction__3: bits[8] = concat(literal.390, y_fraction__1, id=397, pos=[(0,3296,23), (2,166,51)]) nor.504: bits[1] = nor(eq.394, eq.395, id=504, pos=[(0,3300,19), (2,166,51)]) concat.398: bits[9] = concat(literal.393, x_bexp__1, id=398, pos=[(2,166,51)]) concat.399: bits[9] = concat(literal.393, y_bexp__2, id=399, pos=[(2,166,51)]) umul.401: bits[16] = umul(x_fraction__3, y_fraction__3, id=401, pos=[(0,3300,63), (2,166,51)]) sign_ext.491: bits[16] = sign_ext(nor.504, new_bit_count=16, id=491, pos=[(0,3300,19), (2,166,51)]) add.403: bits[9] = add(concat.398, concat.399, id=403, pos=[(0,3309,16), (2,166,51)]) fraction: bits[16] = and(umul.401, sign_ext.491, id=492, pos=[(0,3300,19), (2,166,51)]) concat.405: bits[10] = concat(literal.393, add.403, id=405, pos=[(0,3309,16), (2,166,51)]) literal.406: bits[10] = literal(value=897, id=406, pos=[(0,3309,16), (2,166,51)]) bit_slice.407: bits[1] = bit_slice(fraction, start=15, width=1, id=407, pos=[(0,3324,33), (2,166,51)]) literal.408: bits[15] = literal(value=0, id=408, pos=[(2,166,51)]) bit_slice.409: bits[1] = bit_slice(fraction, start=0, width=1, id=409, pos=[(0,3329,25), (2,166,51)]) exp: bits[10] = add(concat.405, literal.406, id=410, pos=[(0,3309,16), (2,166,51)]) sign_ext.494: bits[10] = sign_ext(nor.504, new_bit_count=10, id=494, pos=[(0,3318,14), (2,166,51)]) literal.412: bits[9] = literal(value=0, id=412, pos=[(2,166,51)]) fraction__1: bits[16] = shrl(fraction, bit_slice.407, id=413, pos=[(0,3330,19), (2,166,51)]) sticky: bits[16] = concat(literal.408, bit_slice.409, id=414, pos=[(2,166,51)]) exp__1: bits[10] = and(exp, sign_ext.494, id=495, pos=[(0,3318,14), (2,166,51)]) concat.416: bits[10] = concat(literal.412, bit_slice.407, id=416, pos=[(2,166,51)]) fraction__2: bits[16] = or(fraction__1, sticky, id=417, pos=[(0,3331,19), (2,166,51)]) exp__2: bits[10] = add(exp__1, concat.416, id=418, pos=[(0,3334,14), (2,166,51)]) literal.411: bits[10] = literal(value=0, id=411, pos=[(0,3318,29), (2,166,51)]) bit_slice.419: bits[15] = bit_slice(fraction__2, start=1, width=15, id=419, pos=[(0,3346,48), (2,166,51)]) sle.420: bits[1] = sle(exp__2, literal.411, id=420, pos=[(0,3346,22), (2,166,51)]) concat.421: bits[16] = concat(literal.393, bit_slice.419, id=421, pos=[(0,3346,48), (2,166,51)]) bit_slice.422: bits[1] = bit_slice(fraction__2, start=0, width=1, id=422, pos=[(0,3345,25), (2,166,51)]) fraction__3: bits[16] = sel(sle.420, cases=[fraction__2, concat.421], id=423, pos=[(0,3346,19), (2,166,51)]) sticky__1: bits[16] = concat(literal.408, bit_slice.422, id=424, pos=[(2,166,51)]) fraction__4: bits[16] = or(fraction__3, sticky__1, id=425, pos=[(0,3347,19), (2,166,51)]) bit_slice.426: bits[6] = bit_slice(fraction__4, start=0, width=6, id=426, pos=[(0,3360,41), (2,166,51)]) literal.427: bits[6] = literal(value=0, id=427, pos=[(0,3361,32), (2,166,51)]) bit_slice.428: bits[1] = bit_slice(fraction__4, start=6, width=1, id=428, pos=[(0,3359,40), (2,166,51)]) bit_slice.429: bits[1] = bit_slice(fraction__4, start=7, width=1, id=429, pos=[(0,3363,45), (2,166,51)]) ne.430: bits[1] = ne(bit_slice.426, literal.427, id=430, pos=[(0,3360,41), (2,166,51)]) not.431: bits[1] = not(bit_slice.428, id=431, pos=[(0,3363,23), (2,166,51)]) not.432: bits[1] = not(bit_slice.429, id=432, pos=[(0,3363,23), (2,166,51)]) greater_than_half_way: bits[1] = and(bit_slice.428, ne.430, id=434, pos=[(0,3359,40), (2,166,51)]) nor.435: bits[1] = nor(not.431, ne.430, not.432, id=435, pos=[(0,3363,23), (2,166,51)]) fraction__5: bits[7] = bit_slice(fraction__4, start=7, width=7, id=433, pos=[(2,166,51)]) literal.507: bits[7] = literal(value=0, id=507) do_round_up: bits[1] = or(greater_than_half_way, nor.435, id=438, pos=[(0,3362,22), (2,166,51)]) fraction__6: bits[8] = concat(literal.393, fraction__5, id=436, pos=[(2,166,51)]) concat.511: bits[8] = concat(literal.507, do_round_up, id=511) fraction__7: bits[8] = add(fraction__6, concat.511, id=489) literal.441: bits[10] = literal(value=1, id=441, pos=[(0,3374,39), (2,166,51)]) bit_slice.442: bits[1] = bit_slice(fraction__7, start=7, width=1, id=442, pos=[(0,3374,25), (2,166,51)]) add.443: bits[10] = add(exp__2, literal.441, id=443, pos=[(0,3374,33), (2,166,51)]) exp__3: bits[10] = sel(bit_slice.442, cases=[exp__2, add.443], id=444, pos=[(0,3374,14), (2,166,51)]) is_subnormal: bits[1] = sle(exp__3, literal.411, id=447, pos=[(0,3375,23), (2,166,51)]) not.498: bits[1] = not(is_subnormal, id=498, pos=[(0,3384,21), (2,166,51)]) high_exp: bits[8] = literal(value=255, id=445, pos=[(0,96,29), (0,3402,28), (2,166,51)]) result_exp: bits[9] = bit_slice(exp__3, start=0, width=9, id=448, pos=[(2,166,51)]) sign_ext.499: bits[9] = sign_ext(not.498, new_bit_count=9, id=499, pos=[(0,3384,21), (2,166,51)]) eq.449: bits[1] = eq(x_bexp__1, high_exp, id=449, pos=[(0,96,6), (0,3402,28), (2,166,51)]) eq.450: bits[1] = eq(x_fraction__1, literal.507, id=450, pos=[(0,96,44), (0,3402,28), (2,166,51)]) eq.451: bits[1] = eq(y_bexp__2, high_exp, id=451, pos=[(0,96,6), (0,3402,62), (2,166,51)]) eq.452: bits[1] = eq(y_fraction__1, literal.507, id=452, pos=[(0,96,44), (0,3402,62), (2,166,51)]) result_exp__1: bits[9] = and(result_exp, sign_ext.499, id=500, pos=[(0,3384,21), (2,166,51)]) and.454: bits[1] = and(eq.449, eq.450, id=454, pos=[(0,96,6), (0,3402,28), (2,166,51)]) and.455: bits[1] = and(eq.451, eq.452, id=455, pos=[(0,96,6), (0,3402,62), (2,166,51)]) bit_slice.456: bits[8] = bit_slice(result_exp__1, start=0, width=8, id=456, pos=[(0,3392,11), (2,166,51)]) has_inf_arg: bits[1] = or(and.454, and.455, id=459, pos=[(0,3402,28), (2,166,51)]) bit_slice.460: bits[1] = bit_slice(result_exp__1, start=8, width=1, id=460, pos=[(0,3392,11), (2,166,51)]) and_reduce.461: bits[1] = and_reduce(bit_slice.456, id=461, pos=[(0,3392,11), (2,166,51)]) not.483: bits[1] = not(eq.449, id=483, pos=[(0,71,6), (0,3401,28), (2,166,51)]) not.485: bits[1] = not(eq.451, id=485, pos=[(0,71,6), (0,3401,62), (2,166,51)]) has_0_arg: bits[1] = or(eq.394, eq.395, id=400, pos=[(0,3291,40), (2,166,51)]) or.480: bits[1] = or(has_inf_arg, bit_slice.460, and_reduce.461, is_subnormal, id=480, pos=[(0,3397,26), (2,166,51)]) nor.484: bits[1] = nor(not.483, eq.450, id=484, pos=[(0,71,6), (0,3401,28), (2,166,51)]) nor.486: bits[1] = nor(not.485, eq.452, id=486, pos=[(0,71,6), (0,3401,62), (2,166,51)]) and.464: bits[1] = and(has_0_arg, has_inf_arg, id=464, pos=[(0,3403,40), (2,166,51)]) not.501: bits[1] = not(or.480, id=501, pos=[(0,3397,26), (2,166,51)]) is_result_nan: bits[1] = or(nor.484, nor.486, and.464, id=466, pos=[(0,3403,24), (2,166,51)]) x_sign__1: bits[1] = tuple_index(x, index=0, id=467, pos=[(0,3378,23), (2,166,51)]) y_sign__1: bits[1] = tuple_index(y, index=0, id=468, pos=[(0,3378,33), (2,166,51)]) result_fraction: bits[7] = bit_slice(fraction__7, start=0, width=7, id=470, pos=[(2,166,51)]) sign_ext.502: bits[7] = sign_ext(not.501, new_bit_count=7, id=502, pos=[(0,3397,26), (2,166,51)]) not.471: bits[1] = not(is_result_nan, id=471, pos=[(0,3407,22), (2,166,51)]) result_sign: bits[1] = xor(x_sign__1, y_sign__1, id=472, pos=[(0,3378,23), (2,166,51)]) or.473: bits[1] = or(is_result_nan, has_inf_arg, bit_slice.460, and_reduce.461, id=473, pos=[(0,3404,21), (2,166,51)]) result_fraction__3: bits[7] = and(result_fraction, sign_ext.502, id=503, pos=[(0,3397,26), (2,166,51)]) nan_fraction: bits[7] = literal(value=64, id=475, pos=[(0,3405,23), (2,166,51)]) result_sign__1: bits[1] = and(not.471, result_sign, id=476, pos=[(0,3407,22), (2,166,51)]) result_exp__4: bits[8] = sel(or.473, cases=[bit_slice.456, high_exp], id=477, pos=[(0,3404,21), (2,166,51)]) result_fraction__4: bits[7] = sel(is_result_nan, cases=[result_fraction__3, nan_fraction], id=478, pos=[(0,3406,26), (2,166,51)]) ret tuple.479: (bits[1], bits[8], bits[7]) = tuple(result_sign__1, result_exp__4, result_fraction__4, id=479, pos=[(0,3409,33), (2,166,51)]) }