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__signed_max_value__8_7() -> bits[8] { literal.3: bits[8] = literal(value=1, id=3, pos=[(0,47,6)]) N_MINUS_ONE: bits[32] = literal(value=7, id=2, pos=[(0,46,32)]) shll.4: bits[8] = shll(literal.3, N_MINUS_ONE, id=4, pos=[(0,47,6)]) literal.5: bits[8] = literal(value=1, id=5, pos=[(0,47,32)]) sub.6: bits[8] = sub(shll.4, literal.5, id=6, pos=[(0,47,6)]) N: bits[32] = literal(value=8, id=1, pos=[(0,46,24)]) ret sign_ext.7: bits[8] = sign_ext(sub.6, new_bit_count=8, id=7) } fn __apfloat__zero__8_7(sign: bits[1] id=8) -> (bits[1], bits[8], bits[7]) { literal.11: bits[8] = literal(value=0, id=11, pos=[(1,131,47)]) literal.12: bits[7] = literal(value=0, id=12, pos=[(1,131,73)]) EXP_SZ: bits[32] = literal(value=8, id=9, pos=[(1,130,12)]) FRACTION_SZ: bits[32] = literal(value=7, id=10, pos=[(1,130,25)]) ret tuple.13: (bits[1], bits[8], bits[7]) = tuple(sign, literal.11, literal.12, id=13, pos=[(1,131,33)]) } fn __bfloat16__zero(sign: bits[1] id=14) -> (bits[1], bits[8], bits[7]) { ret invoke.15: (bits[1], bits[8], bits[7]) = invoke(sign, to_apply=__apfloat__zero__8_7, id=15, pos=[(2,34,45)]) } top fn __bfloat16__from_uint8(x: bits[8] id=16) -> (bits[1], bits[8], bits[7]) { reverse.20: bits[8] = reverse(x, id=20, pos=[(2,383,16)]) one_hot.21: bits[9] = one_hot(reverse.20, lsb_prio=true, id=21, pos=[(2,383,16)]) encode.22: bits[4] = encode(one_hot.21, id=22, pos=[(2,383,16)]) zero_ext.23: bits[8] = zero_ext(encode.22, new_bit_count=8, id=23, pos=[(2,383,16)]) MAX_EXPONENT: bits[4] = literal(value=7, id=17, pos=[(2,379,25)]) lz: bits[4] = bit_slice(zero_ext.23, start=0, width=4, id=24) literal.25: bits[4] = literal(value=1, id=25, pos=[(2,385,31)]) exp: bits[4] = sub(MAX_EXPONENT, lz, id=30, pos=[(2,387,14)]) invoke.18: bits[8] = invoke(to_apply=__std__signed_max_value__8_7, id=18, pos=[(2,380,38)]) add.26: bits[4] = add(lz, literal.25, id=26, pos=[(2,385,26)]) zero_ext.31: bits[8] = zero_ext(exp, new_bit_count=8, id=31) BIAS: bits[8] = sign_ext(invoke.18, new_bit_count=8, id=19) shll.27: bits[8] = shll(x, add.26, id=27, pos=[(2,385,20)]) literal.28: bits[8] = literal(value=1, id=28, pos=[(2,385,38)]) literal.35: bits[8] = literal(value=0, id=35, pos=[(2,394,12)]) sign: bits[1] = literal(value=0, id=33, pos=[(2,390,15)]) bexp: bits[8] = add(zero_ext.31, BIAS, id=32, pos=[(2,388,15)]) fraction: bits[7] = dynamic_bit_slice(shll.27, literal.28, width=7, id=29, pos=[(2,385,37)]) eq.36: bits[1] = eq(x, literal.35, id=36, pos=[(2,394,7)]) result: (bits[1], bits[8], bits[7]) = tuple(sign, bexp, fraction, id=34, pos=[(2,391,22)]) invoke.37: (bits[1], bits[8], bits[7]) = invoke(sign, to_apply=__bfloat16__zero, id=37, pos=[(2,394,23)]) ret sel.38: (bits[1], bits[8], bits[7]) = sel(eq.36, cases=[result, invoke.37], id=38, pos=[(2,394,4)]) }