package float32 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/float32.x" fn __std__mask_bits__8() -> bits[8] { literal.2: bits[8] = literal(value=0, id=2, pos=[(0,835,41)]) X: bits[32] = literal(value=8, id=1, pos=[(0,835,17)]) ret not.3: bits[8] = not(literal.2, id=3, pos=[(0,835,40)]) } fn __apfloat__is_nan__8_23(x: (bits[1], bits[8], bits[23]) id=4) -> bits[1] { x_bexp: bits[8] = tuple_index(x, index=1, id=7, pos=[(1,71,6)]) invoke.8: bits[8] = invoke(to_apply=__std__mask_bits__8, id=8, pos=[(1,71,29)]) x_fraction: bits[23] = tuple_index(x, index=2, id=10, pos=[(1,71,44)]) literal.11: bits[23] = literal(value=0, id=11, pos=[(1,71,57)]) eq.9: bits[1] = eq(x_bexp, invoke.8, id=9, pos=[(1,71,6)]) ne.12: bits[1] = ne(x_fraction, literal.11, id=12, pos=[(1,71,44)]) EXP_SZ: bits[32] = literal(value=8, id=5, pos=[(1,70,14)]) FRACTION_SZ: bits[32] = literal(value=23, id=6, pos=[(1,70,27)]) ret and.13: bits[1] = and(eq.9, ne.12, id=13, pos=[(1,71,6)]) } fn __apfloat__flatten__8_23_32(x: (bits[1], bits[8], bits[23]) id=14) -> bits[32] { x_sign: bits[1] = tuple_index(x, index=0, id=18, pos=[(1,370,5)]) x_bexp: bits[8] = tuple_index(x, index=1, id=19, pos=[(1,370,15)]) concat.20: bits[9] = concat(x_sign, x_bexp, id=20, pos=[(1,370,5)]) x_fraction: bits[23] = tuple_index(x, index=2, id=21, pos=[(1,370,25)]) EXP_SZ: bits[32] = literal(value=8, id=15, pos=[(1,368,15)]) FRACTION_SZ: bits[32] = literal(value=23, id=16, pos=[(1,368,28)]) TOTAL_SZ: bits[32] = literal(value=32, id=17, pos=[(1,368,46)]) ret concat.22: bits[32] = concat(concat.20, x_fraction, id=22, pos=[(1,370,5)]) } fn __apfloat__is_zero_or_subnormal__8_23(x: (bits[1], bits[8], bits[23]) id=23) -> bits[1] { x_bexp: bits[8] = tuple_index(x, index=1, id=26, pos=[(1,804,5)]) literal.27: bits[8] = literal(value=0, id=27, pos=[(1,804,14)]) EXP_SZ: bits[32] = literal(value=8, id=24, pos=[(1,802,28)]) FRACTION_SZ: bits[32] = literal(value=23, id=25, pos=[(1,802,41)]) ret eq.28: bits[1] = eq(x_bexp, literal.27, id=28, pos=[(1,804,5)]) } fn __apfloat__eq_2__8_23(x: (bits[1], bits[8], bits[23]) id=29, y: (bits[1], bits[8], bits[23]) id=30) -> bits[1] { invoke.33: bits[1] = invoke(x, to_apply=__apfloat__is_nan__8_23, id=33, pos=[(1,2300,15)]) invoke.34: bits[1] = invoke(y, to_apply=__apfloat__is_nan__8_23, id=34, pos=[(1,2300,28)]) invoke.37: bits[32] = invoke(x, to_apply=__apfloat__flatten__8_23_32, id=37, pos=[(1,2301,17)]) invoke.38: bits[32] = invoke(y, to_apply=__apfloat__flatten__8_23_32, id=38, pos=[(1,2301,31)]) invoke.40: bits[1] = invoke(x, to_apply=__apfloat__is_zero_or_subnormal__8_23, id=40, pos=[(1,2301,60)]) invoke.41: bits[1] = invoke(y, to_apply=__apfloat__is_zero_or_subnormal__8_23, id=41, pos=[(1,2301,87)]) or.35: bits[1] = or(invoke.33, invoke.34, id=35, pos=[(1,2300,15)]) eq.39: bits[1] = eq(invoke.37, invoke.38, id=39, pos=[(1,2301,17)]) and.42: bits[1] = and(invoke.40, invoke.41, id=42, pos=[(1,2301,60)]) not.36: bits[1] = not(or.35, id=36, pos=[(1,2300,7)]) literal.44: bits[1] = literal(value=0, id=44, pos=[(1,2303,8)]) or.43: bits[1] = or(eq.39, and.42, id=43, pos=[(1,2301,17)]) EXP_SZ: bits[32] = literal(value=8, id=31, pos=[(1,2298,12)]) FRACTION_SZ: bits[32] = literal(value=23, id=32, pos=[(1,2298,25)]) ret sel.45: bits[1] = sel(not.36, cases=[literal.44, or.43], id=45, pos=[(1,2300,4)]) } fn __apfloat__zero__8_23(sign: bits[1] id=46) -> (bits[1], bits[8], bits[23]) { literal.49: bits[8] = literal(value=0, id=49, pos=[(1,131,47)]) literal.50: bits[23] = literal(value=0, id=50, pos=[(1,131,73)]) EXP_SZ: bits[32] = literal(value=8, id=47, pos=[(1,130,12)]) FRACTION_SZ: bits[32] = literal(value=23, id=48, pos=[(1,130,25)]) ret tuple.51: (bits[1], bits[8], bits[23]) = tuple(sign, literal.49, literal.50, id=51, pos=[(1,131,33)]) } fn __apfloat__subnormals_to_zero__8_23(x: (bits[1], bits[8], bits[23]) id=52) -> (bits[1], bits[8], bits[23]) { x_sign: bits[1] = tuple_index(x, index=0, id=56, pos=[(1,809,60)]) invoke.55: bits[1] = invoke(x, to_apply=__apfloat__is_zero_or_subnormal__8_23, id=55, pos=[(1,809,27)]) invoke.57: (bits[1], bits[8], bits[23]) = invoke(x_sign, to_apply=__apfloat__zero__8_23, id=57, pos=[(1,809,37)]) EXP_SZ: bits[32] = literal(value=8, id=53, pos=[(1,807,26)]) FRACTION_SZ: bits[32] = literal(value=23, id=54, pos=[(1,807,39)]) ret sel.58: (bits[1], bits[8], bits[23]) = sel(invoke.55, cases=[x, invoke.57], id=58, pos=[(1,809,4)]) } fn __apfloat__gt_2__8_23(x: (bits[1], bits[8], bits[23]) id=59, y: (bits[1], bits[8], bits[23]) id=60) -> bits[1] { x__1: (bits[1], bits[8], bits[23]) = invoke(x, to_apply=__apfloat__subnormals_to_zero__8_23, id=65, pos=[(1,2363,34)]) y__1: (bits[1], bits[8], bits[23]) = invoke(y, to_apply=__apfloat__subnormals_to_zero__8_23, id=66, pos=[(1,2364,34)]) x__1_sign: bits[1] = tuple_index(x__1, index=0, id=78, pos=[(1,2370,29)]) y__1_sign: bits[1] = tuple_index(y__1, index=0, id=79, pos=[(1,2370,37)]) tuple.80: (bits[1], bits[1]) = tuple(x__1_sign, y__1_sign, id=80, pos=[(1,2370,27)]) x__1_bexp__1: bits[8] = tuple_index(x__1, index=1, id=70, pos=[(1,2367,22)]) y__1_bexp__1: bits[8] = tuple_index(y__1, index=1, id=71, pos=[(1,2367,32)]) x__1_fraction: bits[23] = tuple_index(x__1, index=2, id=73, pos=[(1,2368,27)]) y__1_fraction: bits[23] = tuple_index(y__1, index=2, id=74, pos=[(1,2368,40)]) literal.102: bits[1] = literal(value=1, id=102, pos=[(1,2376,13)]) tuple_index.101: bits[1] = tuple_index(tuple.80, index=0, id=101) literal.92: bits[1] = literal(value=0, id=92, pos=[(1,2374,13)]) tuple_index.91: bits[1] = tuple_index(tuple.80, index=0, id=91) literal.83: bits[1] = literal(value=0, id=83, pos=[(1,2372,13)]) tuple_index.82: bits[1] = tuple_index(tuple.80, index=0, id=82) x__1_bexp: bits[8] = tuple_index(x__1, index=1, id=67, pos=[(1,2366,22)]) y__1_bexp: bits[8] = tuple_index(y__1, index=1, id=68, pos=[(1,2366,31)]) eq_exp: bits[1] = eq(x__1_bexp__1, y__1_bexp__1, id=72, pos=[(1,2367,22)]) gt_fraction: bits[1] = ugt(x__1_fraction, y__1_fraction, id=75, pos=[(1,2368,27)]) literal.100: bits[1] = literal(value=1, id=100) eq.103: bits[1] = eq(literal.102, tuple_index.101, id=103) literal.106: bits[1] = literal(value=0, id=106, pos=[(1,2376,19)]) tuple_index.105: bits[1] = tuple_index(tuple.80, index=1, id=105) literal.90: bits[1] = literal(value=1, id=90) eq.93: bits[1] = eq(literal.92, tuple_index.91, id=93) literal.96: bits[1] = literal(value=1, id=96, pos=[(1,2374,19)]) tuple_index.95: bits[1] = tuple_index(tuple.80, index=1, id=95) literal.81: bits[1] = literal(value=1, id=81) eq.84: bits[1] = eq(literal.83, tuple_index.82, id=84) literal.87: bits[1] = literal(value=0, id=87, pos=[(1,2372,19)]) tuple_index.86: bits[1] = tuple_index(tuple.80, index=1, id=86) gt_exp: bits[1] = ugt(x__1_bexp, y__1_bexp, id=69, pos=[(1,2366,22)]) and.76: bits[1] = and(eq_exp, gt_fraction, id=76, pos=[(1,2369,32)]) and.104: bits[1] = and(literal.100, eq.103, id=104) eq.107: bits[1] = eq(literal.106, tuple_index.105, id=107) and.94: bits[1] = and(literal.90, eq.93, id=94) eq.97: bits[1] = eq(literal.96, tuple_index.95, id=97) and.85: bits[1] = and(literal.81, eq.84, id=85) eq.88: bits[1] = eq(literal.87, tuple_index.86, id=88) abs_gt: bits[1] = or(gt_exp, and.76, id=77, pos=[(1,2369,21)]) invoke.112: bits[1] = invoke(x__1, y__1, to_apply=__apfloat__eq_2__8_23, id=112, pos=[(1,2378,33)]) invoke.117: bits[1] = invoke(x__1, to_apply=__apfloat__is_nan__8_23, id=117, pos=[(1,2381,19)]) invoke.118: bits[1] = invoke(y__1, to_apply=__apfloat__is_nan__8_23, id=118, pos=[(1,2381,32)]) and.108: bits[1] = and(and.104, eq.107, id=108) and.98: bits[1] = and(and.94, eq.97, id=98) and.89: bits[1] = and(and.85, eq.88, id=89) not.111: bits[1] = not(abs_gt, id=111, pos=[(1,2378,17)]) not.113: bits[1] = not(invoke.112, id=113, pos=[(1,2378,28)]) or.119: bits[1] = or(invoke.117, invoke.118, id=119, pos=[(1,2381,19)]) concat.115: bits[3] = concat(and.108, and.98, and.89, id=115) literal.99: bits[1] = literal(value=1, id=99, pos=[(1,2374,28)]) literal.109: bits[1] = literal(value=0, id=109, pos=[(1,2376,28)]) and.114: bits[1] = and(not.111, not.113, id=114, pos=[(1,2378,17)]) not.120: bits[1] = not(or.119, id=120, pos=[(1,2381,11)]) literal.121: bits[1] = literal(value=0, id=121, pos=[(1,2381,55)]) result: bits[1] = priority_sel(concat.115, cases=[abs_gt, literal.99, literal.109], default=and.114, id=116) invoke.63: bits[1] = invoke(x, y, to_apply=__apfloat__eq_2__8_23, id=63, pos=[(1,2359,11)]) sel.122: bits[1] = sel(not.120, cases=[literal.121, result], id=122, pos=[(1,2381,8)]) literal.64: bits[1] = literal(value=0, id=64, pos=[(1,2360,8)]) EXP_SZ: bits[32] = literal(value=8, id=61, pos=[(1,2357,12)]) FRACTION_SZ: bits[32] = literal(value=23, id=62, pos=[(1,2357,25)]) literal.110: bits[1] = literal(value=1, id=110, pos=[(1,2378,12)]) ret sel.123: bits[1] = sel(invoke.63, cases=[sel.122, literal.64], id=123, pos=[(1,2359,4)]) } fn __apfloat__lte_2__8_23(x: (bits[1], bits[8], bits[23]) id=124, y: (bits[1], bits[8], bits[23]) id=125) -> bits[1] { invoke.128: bits[1] = invoke(x, to_apply=__apfloat__is_nan__8_23, id=128, pos=[(1,2506,15)]) invoke.129: bits[1] = invoke(y, to_apply=__apfloat__is_nan__8_23, id=129, pos=[(1,2506,28)]) or.130: bits[1] = or(invoke.128, invoke.129, id=130, pos=[(1,2506,15)]) invoke.132: bits[1] = invoke(x, y, to_apply=__apfloat__gt_2__8_23, id=132, pos=[(1,2506,40)]) not.131: bits[1] = not(or.130, id=131, pos=[(1,2506,7)]) literal.134: bits[1] = literal(value=0, id=134, pos=[(1,2506,56)]) not.133: bits[1] = not(invoke.132, id=133, pos=[(1,2506,35)]) EXP_SZ: bits[32] = literal(value=8, id=126, pos=[(1,2504,13)]) FRACTION_SZ: bits[32] = literal(value=23, id=127, pos=[(1,2504,26)]) ret sel.135: bits[1] = sel(not.131, cases=[literal.134, not.133], id=135, pos=[(1,2506,4)]) } top fn __float32__lte_2(x: (bits[1], bits[8], bits[23]) id=136, y: (bits[1], bits[8], bits[23]) id=137) -> bits[1] { F32_EXP_SZ: bits[32] = literal(value=8, id=138, pos=[(2,18,23)]) F32_FRACTION_SZ: bits[32] = literal(value=23, id=139, pos=[(2,19,28)]) ret invoke.140: bits[1] = invoke(x, y, to_apply=__apfloat__lte_2__8_23, id=140, pos=[(2,93,53)]) }