package bfloat16 file_number 0 "/inputs/subtree/xls/dslx/stdlib/std.x" file_number 1 "/inputs/subtree/xls/dslx/stdlib/apfloat.x" file_number 2 "/inputs/subtree/xls/dslx/stdlib/bfloat16.x" fn __std__msb__8_0(x: bits[8] id=1) -> bits[1] { zero_ext.4: bits[8] = zero_ext(x, new_bit_count=8, id=4) S: bits[1] = literal(value=0, id=2, pos=[(0,357,11)]) N: bits[32] = literal(value=8, id=3, pos=[(0,357,20)]) ret bit_slice.5: bits[1] = bit_slice(zero_ext.4, start=7, width=1, id=5, pos=[(0,357,61)]) } fn __apfloat__zero__8_7(sign: bits[1] id=6) -> (bits[1], bits[8], bits[7]) { literal.9: bits[8] = literal(value=0, id=9, pos=[(1,131,47)]) literal.10: bits[7] = literal(value=0, id=10, pos=[(1,131,73)]) EXP_SZ: bits[32] = literal(value=8, id=7, pos=[(1,130,12)]) FRACTION_SZ: bits[32] = literal(value=7, id=8, pos=[(1,130,25)]) ret tuple.11: (bits[1], bits[8], bits[7]) = tuple(sign, literal.9, literal.10, id=11, pos=[(1,131,33)]) } fn __bfloat16__zero(sign: bits[1] id=12) -> (bits[1], bits[8], bits[7]) { ret invoke.13: (bits[1], bits[8], bits[7]) = invoke(sign, to_apply=__apfloat__zero__8_7, id=13, pos=[(2,34,45)]) } top fn __bfloat16__from_int8(x: bits[8] id=14) -> (bits[1], bits[8], bits[7]) { sign_ext.17: bits[8] = sign_ext(x, new_bit_count=8, id=17) neg.19: bits[8] = neg(x, id=19, pos=[(2,236,29)]) sign: bits[1] = invoke(sign_ext.17, to_apply=__std__msb__8_0, id=18, pos=[(2,235,23)]) bit_slice.21: bits[7] = bit_slice(x, start=0, width=7, id=21) bit_slice.20: bits[7] = bit_slice(neg.19, start=0, width=7, id=20) unsigned: bits[7] = sel(sign, cases=[bit_slice.21, bit_slice.20], id=22, pos=[(2,236,19)]) reverse.23: bits[7] = reverse(unsigned, id=23, pos=[(2,239,16)]) one_hot.24: bits[8] = one_hot(reverse.23, lsb_prio=true, id=24, pos=[(2,239,16)]) encode.25: bits[3] = encode(one_hot.24, id=25, pos=[(2,239,16)]) zero_ext.26: bits[7] = zero_ext(encode.25, new_bit_count=7, id=26, pos=[(2,239,16)]) MAX_EXPONENT: bits[4] = literal(value=6, id=15, pos=[(2,232,25)]) lz: bits[4] = bit_slice(zero_ext.26, start=0, width=4, id=27) exp: bits[4] = sub(MAX_EXPONENT, lz, id=31, pos=[(2,242,14)]) literal.28: bits[4] = literal(value=1, id=28, pos=[(2,240,37)]) zero_ext.32: bits[8] = zero_ext(exp, new_bit_count=8, id=32) BIAS: bits[8] = literal(value=127, id=16, pos=[(2,233,17)]) add.29: bits[4] = add(lz, literal.28, id=29, pos=[(2,240,32)]) literal.35: bits[7] = literal(value=0, id=35, pos=[(2,248,32)]) bexp: bits[8] = add(zero_ext.32, BIAS, id=33, pos=[(2,243,15)]) fraction: bits[7] = shll(unsigned, add.29, id=30, pos=[(2,240,19)]) literal.43: bits[8] = literal(value=128, id=43, pos=[(2,250,25)]) eq.36: bits[1] = eq(unsigned, literal.35, id=36, pos=[(2,248,20)]) result: (bits[1], bits[8], bits[7]) = tuple(sign, bexp, fraction, id=34, pos=[(2,245,22)]) invoke.37: (bits[1], bits[8], bits[7]) = invoke(sign, to_apply=__bfloat16__zero, id=37, pos=[(2,248,43)]) literal.39: bits[1] = literal(value=1, id=39, pos=[(2,249,34)]) literal.40: bits[8] = literal(value=134, id=40, pos=[(2,249,46)]) literal.41: bits[7] = literal(value=0, id=41, pos=[(2,249,64)]) eq.44: bits[1] = eq(x, literal.43, id=44, pos=[(2,250,20)]) result__1: (bits[1], bits[8], bits[7]) = sel(eq.36, cases=[result, invoke.37], id=38, pos=[(2,248,17)]) max_neg_s8: (bits[1], bits[8], bits[7]) = tuple(literal.39, literal.40, literal.41, id=42, pos=[(2,249,26)]) ret result__2: (bits[1], bits[8], bits[7]) = sel(eq.44, cases=[result__1, max_neg_s8], id=45, pos=[(2,250,17)]) }