package fixed_point file_number 0 "/inputs/subtree/xls/dslx/stdlib/fixed_point.x" file_number 1 "/inputs/subtree/xls/dslx/stdlib/std.x" fn __fixed_point__most_significant_bit_position(NB: bits[32] id=1, BE: bits[32] id=2) -> bits[33] { zero_ext.3: bits[33] = zero_ext(NB, new_bit_count=33, id=3) sign_ext.4: bits[33] = sign_ext(BE, new_bit_count=33, id=4) add.5: bits[33] = add(zero_ext.3, sign_ext.4, id=5, pos=[(0,193,60)]) literal.6: bits[33] = literal(value=1, id=6, pos=[(0,193,84)]) ret sub.7: bits[33] = sub(add.5, literal.6, id=7, pos=[(0,193,60)]) } fn __fixed_point__least_significant_bit_position(NB: bits[32] id=8, BE: bits[32] id=9) -> bits[32] { ret BE: bits[32] = param(name=BE, id=9) } fn __std__min__33_1(x: bits[33] id=10, y: bits[33] id=11) -> bits[33] { slt.14: bits[1] = slt(x, y, id=14, pos=[(1,110,71)]) S: bits[1] = literal(value=1, id=12, pos=[(1,110,11)]) N: bits[32] = literal(value=33, id=13, pos=[(1,110,20)]) ret sel.15: bits[33] = sel(slt.14, cases=[y, x], id=15, pos=[(1,110,68)]) } fn __std__max__33_1(x: bits[33] id=16, y: bits[33] id=17) -> bits[33] { sgt.20: bits[1] = sgt(x, y, id=20, pos=[(1,93,71)]) S: bits[1] = literal(value=1, id=18, pos=[(1,93,11)]) N: bits[32] = literal(value=33, id=19, pos=[(1,93,20)]) ret sel.21: bits[33] = sel(sgt.20, cases=[y, x], id=21, pos=[(1,93,68)]) } top fn __fixed_point__num_bits_overlapping(NB_A: bits[32] id=22, BE_A: bits[32] id=23, NB_B: bits[32] id=24, BE_B: bits[32] id=25) -> bits[32] { invoke.28: bits[32] = invoke(NB_A, BE_A, to_apply=__fixed_point__least_significant_bit_position, id=28, pos=[(0,214,46)]) invoke.30: bits[32] = invoke(NB_B, BE_B, to_apply=__fixed_point__least_significant_bit_position, id=30, pos=[(0,215,46)]) msb_a: bits[33] = invoke(NB_A, BE_A, to_apply=__fixed_point__most_significant_bit_position, id=26, pos=[(0,212,45)]) msb_b: bits[33] = invoke(NB_B, BE_B, to_apply=__fixed_point__most_significant_bit_position, id=27, pos=[(0,213,45)]) lsb_a: bits[33] = sign_ext(invoke.28, new_bit_count=33, id=29) lsb_b: bits[33] = sign_ext(invoke.30, new_bit_count=33, id=31) invoke.32: bits[33] = invoke(msb_a, msb_b, to_apply=__std__min__33_1, id=32, pos=[(0,216,26)]) invoke.33: bits[33] = invoke(lsb_a, lsb_b, to_apply=__std__max__33_1, id=33, pos=[(0,216,51)]) sub.34: bits[33] = sub(invoke.32, invoke.33, id=34, pos=[(0,216,26)]) literal.35: bits[33] = literal(value=1, id=35, pos=[(0,216,68)]) overlap: bits[33] = add(sub.34, literal.35, id=36, pos=[(0,216,26)]) literal.37: bits[33] = literal(value=0, id=37, pos=[(0,217,22)]) invoke.38: bits[33] = invoke(overlap, literal.37, to_apply=__std__max__33_1, id=38, pos=[(0,217,12)]) ret bit_slice.39: bits[32] = bit_slice(invoke.38, start=0, width=32, id=39) }