
CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*) print_line_cursor#0 ← (byte*) print_screen#0
  (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
  to:@12
print_str: scope:[print_str]  from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
  (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#71 assert_byte::@3/(byte*) print_char_cursor#72 assert_byte::@5/(byte*) print_char_cursor#15 assert_sbyte/(byte*) print_char_cursor#75 assert_sbyte::@1/(byte*) print_char_cursor#76 assert_sbyte::@3/(byte*) print_char_cursor#77 assert_sbyte::@5/(byte*) print_char_cursor#27 )
  (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(byte*) print_str::str#3 assert_byte::@3/(byte*) print_str::str#4 assert_byte::@5/(byte*) print_str::str#2 assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(byte*) print_str::str#7 assert_sbyte::@3/(byte*) print_str::str#8 assert_sbyte::@5/(byte*) print_str::str#6 )
  to:print_str::@1
print_str::@1: scope:[print_str]  from print_str print_str::@2
  (byte*) print_char_cursor#66 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
  (byte*) print_str::str#9 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 )
  (bool~) print_str::$0 ← *((byte*) print_str::str#9) != (byte) '@'
  if((bool~) print_str::$0) goto print_str::@2
  to:print_str::@return
print_str::@2: scope:[print_str]  from print_str::@1
  (byte*) print_char_cursor#34 ← phi( print_str::@1/(byte*) print_char_cursor#66 )
  (byte*) print_str::str#10 ← phi( print_str::@1/(byte*) print_str::str#9 )
  *((byte*) print_char_cursor#34) ← *((byte*) print_str::str#10)
  (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#34
  (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10
  to:print_str::@1
print_str::@return: scope:[print_str]  from print_str::@1
  (byte*) print_char_cursor#35 ← phi( print_str::@1/(byte*) print_char_cursor#66 )
  (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#35
  return 
  to:@return
print_ln: scope:[print_ln]  from assert_byte::@2 assert_sbyte::@2
  (byte*) print_char_cursor#67 ← phi( assert_byte::@2/(byte*) print_char_cursor#73 assert_sbyte::@2/(byte*) print_char_cursor#78 )
  (byte*) print_line_cursor#47 ← phi( assert_byte::@2/(byte*) print_line_cursor#50 assert_sbyte::@2/(byte*) print_line_cursor#52 )
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  (byte*) print_char_cursor#36 ← phi( print_ln/(byte*) print_char_cursor#67 print_ln::@1/(byte*) print_char_cursor#36 )
  (byte*) print_line_cursor#24 ← phi( print_ln/(byte*) print_line_cursor#47 print_ln::@1/(byte*) print_line_cursor#1 )
  (byte*~) print_ln::$0 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte*) print_line_cursor#1 ← (byte*~) print_ln::$0
  (bool~) print_ln::$1 ← (byte*) print_line_cursor#1 < (byte*) print_char_cursor#36
  if((bool~) print_ln::$1) goto print_ln::@1
  to:print_ln::@2
print_ln::@2: scope:[print_ln]  from print_ln::@1
  (byte*) print_line_cursor#25 ← phi( print_ln::@1/(byte*) print_line_cursor#1 )
  (byte*) print_char_cursor#3 ← (byte*) print_line_cursor#25
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@2
  (byte*) print_char_cursor#37 ← phi( print_ln::@2/(byte*) print_char_cursor#3 )
  (byte*) print_line_cursor#26 ← phi( print_ln::@2/(byte*) print_line_cursor#25 )
  (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#26
  (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#37
  return 
  to:@return
@12: scope:[]  from @begin
  (byte*) print_screen#7 ← phi( @begin/(byte*) print_screen#0 )
  (byte*) print_char_cursor#82 ← phi( @begin/(byte*) print_char_cursor#0 )
  (byte*) print_line_cursor#59 ← phi( @begin/(byte*) print_line_cursor#0 )
  (byte[]) print_hextab#0 ← (const string) $0
  to:@19
print_cls: scope:[print_cls]  from main
  (byte*) print_screen#1 ← phi( main/(byte*) print_screen#4 )
  (byte*) print_cls::sc#0 ← (byte*) print_screen#1
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 print_cls::@1/(byte*) print_screen#2 )
  (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 )
  *((byte*) print_cls::sc#2) ← (byte) ' '
  (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (word/signed word/dword/signed dword) 1000
  (bool~) print_cls::$1 ← (byte*) print_cls::sc#1 != (byte*~) print_cls::$0
  if((bool~) print_cls::$1) goto print_cls::@1
  to:print_cls::@2
print_cls::@2: scope:[print_cls]  from print_cls::@1
  (byte*) print_screen#3 ← phi( print_cls::@1/(byte*) print_screen#2 )
  (byte*) print_line_cursor#3 ← (byte*) print_screen#3
  (byte*) print_char_cursor#5 ← (byte*) print_line_cursor#3
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@2
  (byte*) print_char_cursor#38 ← phi( print_cls::@2/(byte*) print_char_cursor#5 )
  (byte*) print_line_cursor#27 ← phi( print_cls::@2/(byte*) print_line_cursor#3 )
  (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#27
  (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#38
  return 
  to:@return
@19: scope:[]  from @12
  (byte*) print_screen#6 ← phi( @12/(byte*) print_screen#7 )
  (byte*) print_char_cursor#81 ← phi( @12/(byte*) print_char_cursor#82 )
  (byte*) print_line_cursor#58 ← phi( @12/(byte*) print_line_cursor#59 )
  (byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
  (byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
  (byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  to:@24
main: scope:[main]  from @24
  (byte*) print_char_cursor#68 ← phi( @24/(byte*) print_char_cursor#79 )
  (byte*) print_line_cursor#48 ← phi( @24/(byte*) print_line_cursor#53 )
  (byte*) print_screen#4 ← phi( @24/(byte*) print_screen#5 )
  call print_cls 
  to:main::@1
main::@1: scope:[main]  from main
  (byte*) print_char_cursor#39 ← phi( main/(byte*) print_char_cursor#6 )
  (byte*) print_line_cursor#28 ← phi( main/(byte*) print_line_cursor#4 )
  (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#28
  (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#39
  *((byte*) BGCOL#0) ← (byte) GREEN#0
  call test_bytes 
  to:main::@2
main::@2: scope:[main]  from main::@1
  (byte*) print_line_cursor#29 ← phi( main::@1/(byte*) print_line_cursor#12 )
  (byte*) print_char_cursor#40 ← phi( main::@1/(byte*) print_char_cursor#14 )
  (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#40
  (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#29
  call test_sbytes 
  to:main::@3
main::@3: scope:[main]  from main::@2
  (byte*) print_line_cursor#30 ← phi( main::@2/(byte*) print_line_cursor#20 )
  (byte*) print_char_cursor#41 ← phi( main::@2/(byte*) print_char_cursor#26 )
  (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#41
  (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#30
  to:main::@return
main::@return: scope:[main]  from main::@3
  (byte*) print_char_cursor#42 ← phi( main::@3/(byte*) print_char_cursor#9 )
  (byte*) print_line_cursor#31 ← phi( main::@3/(byte*) print_line_cursor#7 )
  (byte*) print_line_cursor#8 ← (byte*) print_line_cursor#31
  (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#42
  return 
  to:@return
test_bytes: scope:[test_bytes]  from main::@1
  (byte*) print_line_cursor#49 ← phi( main::@1/(byte*) print_line_cursor#5 )
  (byte*) print_char_cursor#69 ← phi( main::@1/(byte*) print_char_cursor#7 )
  (byte) test_bytes::bb#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte*) assert_byte::msg#0 ← (const string) test_bytes::msg
  (byte) assert_byte::b#0 ← (byte) test_bytes::bb#0
  (byte) assert_byte::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call assert_byte 
  to:test_bytes::@1
test_bytes::@1: scope:[test_bytes]  from test_bytes
  (byte) test_bytes::bb#1 ← phi( test_bytes/(byte) test_bytes::bb#0 )
  (byte*) print_line_cursor#32 ← phi( test_bytes/(byte*) print_line_cursor#14 )
  (byte*) print_char_cursor#43 ← phi( test_bytes/(byte*) print_char_cursor#20 )
  (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#43
  (byte*) print_line_cursor#9 ← (byte*) print_line_cursor#32
  (byte/signed word/word/dword/signed dword~) test_bytes::$1 ← (byte) test_bytes::bb#1 + (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) test_bytes::bc#0 ← (byte/signed word/word/dword/signed dword~) test_bytes::$1
  (byte*) assert_byte::msg#1 ← (const string) test_bytes::msg1
  (byte) assert_byte::b#1 ← (byte) test_bytes::bc#0
  (byte) assert_byte::c#1 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  call assert_byte 
  to:test_bytes::@2
test_bytes::@2: scope:[test_bytes]  from test_bytes::@1
  (byte) test_bytes::bc#1 ← phi( test_bytes::@1/(byte) test_bytes::bc#0 )
  (byte*) print_line_cursor#33 ← phi( test_bytes::@1/(byte*) print_line_cursor#14 )
  (byte*) print_char_cursor#44 ← phi( test_bytes::@1/(byte*) print_char_cursor#20 )
  (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#44
  (byte*) print_line_cursor#10 ← (byte*) print_line_cursor#33
  (signed byte~) test_bytes::$3 ← ((signed byte)) (byte) test_bytes::bc#1
  (signed word/signed byte/signed dword~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte~) test_bytes::$5 ← ((byte)) (signed word/signed byte/signed dword~) test_bytes::$4
  (byte) test_bytes::bd#0 ← (byte~) test_bytes::$5
  (byte*) assert_byte::msg#2 ← (const string) test_bytes::msg2
  (byte) assert_byte::b#2 ← (byte) test_bytes::bd#0
  (byte) assert_byte::c#2 ← (byte/word/signed word/dword/signed dword) 254
  call assert_byte 
  to:test_bytes::@3
test_bytes::@3: scope:[test_bytes]  from test_bytes::@2
  (byte*) print_line_cursor#34 ← phi( test_bytes::@2/(byte*) print_line_cursor#14 )
  (byte*) print_char_cursor#45 ← phi( test_bytes::@2/(byte*) print_char_cursor#20 )
  (byte*) print_char_cursor#13 ← (byte*) print_char_cursor#45
  (byte*) print_line_cursor#11 ← (byte*) print_line_cursor#34
  to:test_bytes::@return
test_bytes::@return: scope:[test_bytes]  from test_bytes::@3
  (byte*) print_line_cursor#35 ← phi( test_bytes::@3/(byte*) print_line_cursor#11 )
  (byte*) print_char_cursor#46 ← phi( test_bytes::@3/(byte*) print_char_cursor#13 )
  (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#46
  (byte*) print_line_cursor#12 ← (byte*) print_line_cursor#35
  return 
  to:@return
assert_byte: scope:[assert_byte]  from test_bytes test_bytes::@1 test_bytes::@2
  (byte*) print_line_cursor#68 ← phi( test_bytes/(byte*) print_line_cursor#49 test_bytes::@1/(byte*) print_line_cursor#9 test_bytes::@2/(byte*) print_line_cursor#10 )
  (byte) assert_byte::c#5 ← phi( test_bytes/(byte) assert_byte::c#0 test_bytes::@1/(byte) assert_byte::c#1 test_bytes::@2/(byte) assert_byte::c#2 )
  (byte) assert_byte::b#5 ← phi( test_bytes/(byte) assert_byte::b#0 test_bytes::@1/(byte) assert_byte::b#1 test_bytes::@2/(byte) assert_byte::b#2 )
  (byte*) print_char_cursor#70 ← phi( test_bytes/(byte*) print_char_cursor#69 test_bytes::@1/(byte*) print_char_cursor#11 test_bytes::@2/(byte*) print_char_cursor#12 )
  (byte*) assert_byte::msg#3 ← phi( test_bytes/(byte*) assert_byte::msg#0 test_bytes::@1/(byte*) assert_byte::msg#1 test_bytes::@2/(byte*) assert_byte::msg#2 )
  (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
  call print_str 
  to:assert_byte::@5
assert_byte::@5: scope:[assert_byte]  from assert_byte
  (byte*) print_line_cursor#66 ← phi( assert_byte/(byte*) print_line_cursor#68 )
  (byte) assert_byte::c#4 ← phi( assert_byte/(byte) assert_byte::c#5 )
  (byte) assert_byte::b#4 ← phi( assert_byte/(byte) assert_byte::b#5 )
  (byte*) print_char_cursor#47 ← phi( assert_byte/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#47
  (byte*) print_str::str#2 ← (const string) assert_byte::str
  call print_str 
  to:assert_byte::@6
assert_byte::@6: scope:[assert_byte]  from assert_byte::@5
  (byte*) print_line_cursor#64 ← phi( assert_byte::@5/(byte*) print_line_cursor#66 )
  (byte) assert_byte::c#3 ← phi( assert_byte::@5/(byte) assert_byte::c#4 )
  (byte) assert_byte::b#3 ← phi( assert_byte::@5/(byte) assert_byte::b#4 )
  (byte*) print_char_cursor#48 ← phi( assert_byte::@5/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#48
  (bool~) assert_byte::$2 ← (byte) assert_byte::b#3 != (byte) assert_byte::c#3
  if((bool~) assert_byte::$2) goto assert_byte::@1
  to:assert_byte::@3
assert_byte::@1: scope:[assert_byte]  from assert_byte::@6
  (byte*) print_line_cursor#60 ← phi( assert_byte::@6/(byte*) print_line_cursor#64 )
  (byte*) print_char_cursor#71 ← phi( assert_byte::@6/(byte*) print_char_cursor#16 )
  *((byte*) BGCOL#0) ← (byte) RED#0
  (byte*) print_str::str#3 ← (const string) assert_byte::str1
  call print_str 
  to:assert_byte::@7
assert_byte::@7: scope:[assert_byte]  from assert_byte::@1
  (byte*) print_line_cursor#54 ← phi( assert_byte::@1/(byte*) print_line_cursor#60 )
  (byte*) print_char_cursor#49 ← phi( assert_byte::@1/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#49
  to:assert_byte::@2
assert_byte::@3: scope:[assert_byte]  from assert_byte::@6
  (byte*) print_line_cursor#61 ← phi( assert_byte::@6/(byte*) print_line_cursor#64 )
  (byte*) print_char_cursor#72 ← phi( assert_byte::@6/(byte*) print_char_cursor#16 )
  (byte*) print_str::str#4 ← (const string) assert_byte::str2
  call print_str 
  to:assert_byte::@8
assert_byte::@8: scope:[assert_byte]  from assert_byte::@3
  (byte*) print_line_cursor#55 ← phi( assert_byte::@3/(byte*) print_line_cursor#61 )
  (byte*) print_char_cursor#50 ← phi( assert_byte::@3/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#50
  to:assert_byte::@2
assert_byte::@2: scope:[assert_byte]  from assert_byte::@7 assert_byte::@8
  (byte*) print_char_cursor#73 ← phi( assert_byte::@7/(byte*) print_char_cursor#17 assert_byte::@8/(byte*) print_char_cursor#18 )
  (byte*) print_line_cursor#50 ← phi( assert_byte::@7/(byte*) print_line_cursor#54 assert_byte::@8/(byte*) print_line_cursor#55 )
  call print_ln 
  to:assert_byte::@9
assert_byte::@9: scope:[assert_byte]  from assert_byte::@2
  (byte*) print_char_cursor#51 ← phi( assert_byte::@2/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#36 ← phi( assert_byte::@2/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#13 ← (byte*) print_line_cursor#36
  (byte*) print_char_cursor#19 ← (byte*) print_char_cursor#51
  to:assert_byte::@return
assert_byte::@return: scope:[assert_byte]  from assert_byte::@9
  (byte*) print_line_cursor#37 ← phi( assert_byte::@9/(byte*) print_line_cursor#13 )
  (byte*) print_char_cursor#52 ← phi( assert_byte::@9/(byte*) print_char_cursor#19 )
  (byte*) print_char_cursor#20 ← (byte*) print_char_cursor#52
  (byte*) print_line_cursor#14 ← (byte*) print_line_cursor#37
  return 
  to:@return
test_sbytes: scope:[test_sbytes]  from main::@2
  (byte*) print_line_cursor#51 ← phi( main::@2/(byte*) print_line_cursor#6 )
  (byte*) print_char_cursor#74 ← phi( main::@2/(byte*) print_char_cursor#8 )
  (signed byte) test_sbytes::bb#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte*) assert_sbyte::msg#0 ← (const string) test_sbytes::msg
  (signed byte) assert_sbyte::b#0 ← (signed byte) test_sbytes::bb#0
  (signed byte) assert_sbyte::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call assert_sbyte 
  to:test_sbytes::@1
test_sbytes::@1: scope:[test_sbytes]  from test_sbytes
  (signed byte) test_sbytes::bb#1 ← phi( test_sbytes/(signed byte) test_sbytes::bb#0 )
  (byte*) print_line_cursor#38 ← phi( test_sbytes/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#53 ← phi( test_sbytes/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#21 ← (byte*) print_char_cursor#53
  (byte*) print_line_cursor#15 ← (byte*) print_line_cursor#38
  (signed word/signed byte/signed dword~) test_sbytes::$1 ← (signed byte) test_sbytes::bb#1 + (byte/signed byte/word/signed word/dword/signed dword) 2
  (signed byte) test_sbytes::bc#0 ← (signed word/signed byte/signed dword~) test_sbytes::$1
  (byte*) assert_sbyte::msg#1 ← (const string) test_sbytes::msg1
  (signed byte) assert_sbyte::b#1 ← (signed byte) test_sbytes::bc#0
  (signed byte) assert_sbyte::c#1 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  call assert_sbyte 
  to:test_sbytes::@2
test_sbytes::@2: scope:[test_sbytes]  from test_sbytes::@1
  (signed byte) test_sbytes::bc#1 ← phi( test_sbytes::@1/(signed byte) test_sbytes::bc#0 )
  (byte*) print_line_cursor#39 ← phi( test_sbytes::@1/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#54 ← phi( test_sbytes::@1/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#54
  (byte*) print_line_cursor#16 ← (byte*) print_line_cursor#39
  (signed word/signed byte/signed dword~) test_sbytes::$3 ← (signed byte) test_sbytes::bc#1 - (byte/signed byte/word/signed word/dword/signed dword) 4
  (signed byte) test_sbytes::bd#0 ← (signed word/signed byte/signed dword~) test_sbytes::$3
  (signed byte/signed word/signed dword~) test_sbytes::$4 ← - (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte*) assert_sbyte::msg#2 ← (const string) test_sbytes::msg2
  (signed byte) assert_sbyte::b#2 ← (signed byte) test_sbytes::bd#0
  (signed byte) assert_sbyte::c#2 ← (signed byte/signed word/signed dword~) test_sbytes::$4
  call assert_sbyte 
  to:test_sbytes::@3
test_sbytes::@3: scope:[test_sbytes]  from test_sbytes::@2
  (signed byte) test_sbytes::bd#1 ← phi( test_sbytes::@2/(signed byte) test_sbytes::bd#0 )
  (byte*) print_line_cursor#40 ← phi( test_sbytes::@2/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#55 ← phi( test_sbytes::@2/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#23 ← (byte*) print_char_cursor#55
  (byte*) print_line_cursor#17 ← (byte*) print_line_cursor#40
  (signed byte~) test_sbytes::$6 ← - (signed byte) test_sbytes::bd#1
  (signed byte) test_sbytes::be#0 ← (signed byte~) test_sbytes::$6
  (byte*) assert_sbyte::msg#3 ← (const string) test_sbytes::msg3
  (signed byte) assert_sbyte::b#3 ← (signed byte) test_sbytes::be#0
  (signed byte) assert_sbyte::c#3 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  call assert_sbyte 
  to:test_sbytes::@4
test_sbytes::@4: scope:[test_sbytes]  from test_sbytes::@3
  (byte*) print_line_cursor#41 ← phi( test_sbytes::@3/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#56 ← phi( test_sbytes::@3/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#24 ← (byte*) print_char_cursor#56
  (byte*) print_line_cursor#18 ← (byte*) print_line_cursor#41
  (signed byte/signed word/signed dword~) test_sbytes::$8 ← - (byte/signed byte/word/signed word/dword/signed dword) 127
  (signed word/signed byte/signed dword~) test_sbytes::$9 ← (signed byte/signed word/signed dword~) test_sbytes::$8 - (byte/signed byte/word/signed word/dword/signed dword) 127
  (signed byte~) test_sbytes::$10 ← ((signed byte)) (signed word/signed byte/signed dword~) test_sbytes::$9
  (signed byte) test_sbytes::bf#0 ← (signed byte~) test_sbytes::$10
  (byte*) assert_sbyte::msg#4 ← (const string) test_sbytes::msg4
  (signed byte) assert_sbyte::b#4 ← (signed byte) test_sbytes::bf#0
  (signed byte) assert_sbyte::c#4 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  call assert_sbyte 
  to:test_sbytes::@5
test_sbytes::@5: scope:[test_sbytes]  from test_sbytes::@4
  (byte*) print_line_cursor#42 ← phi( test_sbytes::@4/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#57 ← phi( test_sbytes::@4/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#25 ← (byte*) print_char_cursor#57
  (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#42
  to:test_sbytes::@return
test_sbytes::@return: scope:[test_sbytes]  from test_sbytes::@5
  (byte*) print_line_cursor#43 ← phi( test_sbytes::@5/(byte*) print_line_cursor#19 )
  (byte*) print_char_cursor#58 ← phi( test_sbytes::@5/(byte*) print_char_cursor#25 )
  (byte*) print_char_cursor#26 ← (byte*) print_char_cursor#58
  (byte*) print_line_cursor#20 ← (byte*) print_line_cursor#43
  return 
  to:@return
assert_sbyte: scope:[assert_sbyte]  from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
  (byte*) print_line_cursor#69 ← phi( test_sbytes/(byte*) print_line_cursor#51 test_sbytes::@1/(byte*) print_line_cursor#15 test_sbytes::@2/(byte*) print_line_cursor#16 test_sbytes::@3/(byte*) print_line_cursor#17 test_sbytes::@4/(byte*) print_line_cursor#18 )
  (signed byte) assert_sbyte::c#7 ← phi( test_sbytes/(signed byte) assert_sbyte::c#0 test_sbytes::@1/(signed byte) assert_sbyte::c#1 test_sbytes::@2/(signed byte) assert_sbyte::c#2 test_sbytes::@3/(signed byte) assert_sbyte::c#3 test_sbytes::@4/(signed byte) assert_sbyte::c#4 )
  (signed byte) assert_sbyte::b#7 ← phi( test_sbytes/(signed byte) assert_sbyte::b#0 test_sbytes::@1/(signed byte) assert_sbyte::b#1 test_sbytes::@2/(signed byte) assert_sbyte::b#2 test_sbytes::@3/(signed byte) assert_sbyte::b#3 test_sbytes::@4/(signed byte) assert_sbyte::b#4 )
  (byte*) print_char_cursor#75 ← phi( test_sbytes/(byte*) print_char_cursor#74 test_sbytes::@1/(byte*) print_char_cursor#21 test_sbytes::@2/(byte*) print_char_cursor#22 test_sbytes::@3/(byte*) print_char_cursor#23 test_sbytes::@4/(byte*) print_char_cursor#24 )
  (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(byte*) assert_sbyte::msg#0 test_sbytes::@1/(byte*) assert_sbyte::msg#1 test_sbytes::@2/(byte*) assert_sbyte::msg#2 test_sbytes::@3/(byte*) assert_sbyte::msg#3 test_sbytes::@4/(byte*) assert_sbyte::msg#4 )
  (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
  call print_str 
  to:assert_sbyte::@5
assert_sbyte::@5: scope:[assert_sbyte]  from assert_sbyte
  (byte*) print_line_cursor#67 ← phi( assert_sbyte/(byte*) print_line_cursor#69 )
  (signed byte) assert_sbyte::c#6 ← phi( assert_sbyte/(signed byte) assert_sbyte::c#7 )
  (signed byte) assert_sbyte::b#6 ← phi( assert_sbyte/(signed byte) assert_sbyte::b#7 )
  (byte*) print_char_cursor#59 ← phi( assert_sbyte/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#27 ← (byte*) print_char_cursor#59
  (byte*) print_str::str#6 ← (const string) assert_sbyte::str
  call print_str 
  to:assert_sbyte::@6
assert_sbyte::@6: scope:[assert_sbyte]  from assert_sbyte::@5
  (byte*) print_line_cursor#65 ← phi( assert_sbyte::@5/(byte*) print_line_cursor#67 )
  (signed byte) assert_sbyte::c#5 ← phi( assert_sbyte::@5/(signed byte) assert_sbyte::c#6 )
  (signed byte) assert_sbyte::b#5 ← phi( assert_sbyte::@5/(signed byte) assert_sbyte::b#6 )
  (byte*) print_char_cursor#60 ← phi( assert_sbyte::@5/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#28 ← (byte*) print_char_cursor#60
  (bool~) assert_sbyte::$2 ← (signed byte) assert_sbyte::b#5 != (signed byte) assert_sbyte::c#5
  if((bool~) assert_sbyte::$2) goto assert_sbyte::@1
  to:assert_sbyte::@3
assert_sbyte::@1: scope:[assert_sbyte]  from assert_sbyte::@6
  (byte*) print_line_cursor#62 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#65 )
  (byte*) print_char_cursor#76 ← phi( assert_sbyte::@6/(byte*) print_char_cursor#28 )
  *((byte*) BGCOL#0) ← (byte) RED#0
  (byte*) print_str::str#7 ← (const string) assert_sbyte::str1
  call print_str 
  to:assert_sbyte::@7
assert_sbyte::@7: scope:[assert_sbyte]  from assert_sbyte::@1
  (byte*) print_line_cursor#56 ← phi( assert_sbyte::@1/(byte*) print_line_cursor#62 )
  (byte*) print_char_cursor#61 ← phi( assert_sbyte::@1/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#29 ← (byte*) print_char_cursor#61
  to:assert_sbyte::@2
assert_sbyte::@3: scope:[assert_sbyte]  from assert_sbyte::@6
  (byte*) print_line_cursor#63 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#65 )
  (byte*) print_char_cursor#77 ← phi( assert_sbyte::@6/(byte*) print_char_cursor#28 )
  (byte*) print_str::str#8 ← (const string) assert_sbyte::str2
  call print_str 
  to:assert_sbyte::@8
assert_sbyte::@8: scope:[assert_sbyte]  from assert_sbyte::@3
  (byte*) print_line_cursor#57 ← phi( assert_sbyte::@3/(byte*) print_line_cursor#63 )
  (byte*) print_char_cursor#62 ← phi( assert_sbyte::@3/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#30 ← (byte*) print_char_cursor#62
  to:assert_sbyte::@2
assert_sbyte::@2: scope:[assert_sbyte]  from assert_sbyte::@7 assert_sbyte::@8
  (byte*) print_char_cursor#78 ← phi( assert_sbyte::@7/(byte*) print_char_cursor#29 assert_sbyte::@8/(byte*) print_char_cursor#30 )
  (byte*) print_line_cursor#52 ← phi( assert_sbyte::@7/(byte*) print_line_cursor#56 assert_sbyte::@8/(byte*) print_line_cursor#57 )
  call print_ln 
  to:assert_sbyte::@9
assert_sbyte::@9: scope:[assert_sbyte]  from assert_sbyte::@2
  (byte*) print_char_cursor#63 ← phi( assert_sbyte::@2/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#44 ← phi( assert_sbyte::@2/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#21 ← (byte*) print_line_cursor#44
  (byte*) print_char_cursor#31 ← (byte*) print_char_cursor#63
  to:assert_sbyte::@return
assert_sbyte::@return: scope:[assert_sbyte]  from assert_sbyte::@9
  (byte*) print_line_cursor#45 ← phi( assert_sbyte::@9/(byte*) print_line_cursor#21 )
  (byte*) print_char_cursor#64 ← phi( assert_sbyte::@9/(byte*) print_char_cursor#31 )
  (byte*) print_char_cursor#32 ← (byte*) print_char_cursor#64
  (byte*) print_line_cursor#22 ← (byte*) print_line_cursor#45
  return 
  to:@return
@24: scope:[]  from @19
  (byte*) print_screen#5 ← phi( @19/(byte*) print_screen#6 )
  (byte*) print_char_cursor#79 ← phi( @19/(byte*) print_char_cursor#81 )
  (byte*) print_line_cursor#53 ← phi( @19/(byte*) print_line_cursor#58 )
  call main 
  to:@25
@25: scope:[]  from @24
  (byte*) print_char_cursor#65 ← phi( @24/(byte*) print_char_cursor#10 )
  (byte*) print_line_cursor#46 ← phi( @24/(byte*) print_line_cursor#8 )
  (byte*) print_line_cursor#23 ← (byte*) print_line_cursor#46
  (byte*) print_char_cursor#33 ← (byte*) print_char_cursor#65
  to:@end
@end: scope:[]  from @25

SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef"
(label) @12
(label) @19
(label) @24
(label) @25
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte) GREEN
(byte) GREEN#0
(byte) RED
(byte) RED#0
(void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c)
(bool~) assert_byte::$2
(label) assert_byte::@1
(label) assert_byte::@2
(label) assert_byte::@3
(label) assert_byte::@5
(label) assert_byte::@6
(label) assert_byte::@7
(label) assert_byte::@8
(label) assert_byte::@9
(label) assert_byte::@return
(byte) assert_byte::b
(byte) assert_byte::b#0
(byte) assert_byte::b#1
(byte) assert_byte::b#2
(byte) assert_byte::b#3
(byte) assert_byte::b#4
(byte) assert_byte::b#5
(byte) assert_byte::c
(byte) assert_byte::c#0
(byte) assert_byte::c#1
(byte) assert_byte::c#2
(byte) assert_byte::c#3
(byte) assert_byte::c#4
(byte) assert_byte::c#5
(byte*) assert_byte::msg
(byte*) assert_byte::msg#0
(byte*) assert_byte::msg#1
(byte*) assert_byte::msg#2
(byte*) assert_byte::msg#3
(const string) assert_byte::str = (string) " @"
(const string) assert_byte::str1 = (string) "fail!@"
(const string) assert_byte::str2 = (string) "ok@"
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(bool~) assert_sbyte::$2
(label) assert_sbyte::@1
(label) assert_sbyte::@2
(label) assert_sbyte::@3
(label) assert_sbyte::@5
(label) assert_sbyte::@6
(label) assert_sbyte::@7
(label) assert_sbyte::@8
(label) assert_sbyte::@9
(label) assert_sbyte::@return
(signed byte) assert_sbyte::b
(signed byte) assert_sbyte::b#0
(signed byte) assert_sbyte::b#1
(signed byte) assert_sbyte::b#2
(signed byte) assert_sbyte::b#3
(signed byte) assert_sbyte::b#4
(signed byte) assert_sbyte::b#5
(signed byte) assert_sbyte::b#6
(signed byte) assert_sbyte::b#7
(signed byte) assert_sbyte::c
(signed byte) assert_sbyte::c#0
(signed byte) assert_sbyte::c#1
(signed byte) assert_sbyte::c#2
(signed byte) assert_sbyte::c#3
(signed byte) assert_sbyte::c#4
(signed byte) assert_sbyte::c#5
(signed byte) assert_sbyte::c#6
(signed byte) assert_sbyte::c#7
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#0
(byte*) assert_sbyte::msg#1
(byte*) assert_sbyte::msg#2
(byte*) assert_sbyte::msg#3
(byte*) assert_sbyte::msg#4
(byte*) assert_sbyte::msg#5
(const string) assert_sbyte::str = (string) " @"
(const string) assert_sbyte::str1 = (string) "fail!@"
(const string) assert_sbyte::str2 = (string) "ok@"
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#32
(byte*) print_char_cursor#33
(byte*) print_char_cursor#34
(byte*) print_char_cursor#35
(byte*) print_char_cursor#36
(byte*) print_char_cursor#37
(byte*) print_char_cursor#38
(byte*) print_char_cursor#39
(byte*) print_char_cursor#4
(byte*) print_char_cursor#40
(byte*) print_char_cursor#41
(byte*) print_char_cursor#42
(byte*) print_char_cursor#43
(byte*) print_char_cursor#44
(byte*) print_char_cursor#45
(byte*) print_char_cursor#46
(byte*) print_char_cursor#47
(byte*) print_char_cursor#48
(byte*) print_char_cursor#49
(byte*) print_char_cursor#5
(byte*) print_char_cursor#50
(byte*) print_char_cursor#51
(byte*) print_char_cursor#52
(byte*) print_char_cursor#53
(byte*) print_char_cursor#54
(byte*) print_char_cursor#55
(byte*) print_char_cursor#56
(byte*) print_char_cursor#57
(byte*) print_char_cursor#58
(byte*) print_char_cursor#59
(byte*) print_char_cursor#6
(byte*) print_char_cursor#60
(byte*) print_char_cursor#61
(byte*) print_char_cursor#62
(byte*) print_char_cursor#63
(byte*) print_char_cursor#64
(byte*) print_char_cursor#65
(byte*) print_char_cursor#66
(byte*) print_char_cursor#67
(byte*) print_char_cursor#68
(byte*) print_char_cursor#69
(byte*) print_char_cursor#7
(byte*) print_char_cursor#70
(byte*) print_char_cursor#71
(byte*) print_char_cursor#72
(byte*) print_char_cursor#73
(byte*) print_char_cursor#74
(byte*) print_char_cursor#75
(byte*) print_char_cursor#76
(byte*) print_char_cursor#77
(byte*) print_char_cursor#78
(byte*) print_char_cursor#79
(byte*) print_char_cursor#8
(byte*) print_char_cursor#80
(byte*) print_char_cursor#81
(byte*) print_char_cursor#82
(byte*) print_char_cursor#9
(void()) print_cls()
(byte*~) print_cls::$0
(bool~) print_cls::$1
(label) print_cls::@1
(label) print_cls::@2
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#0
(byte*) print_cls::sc#1
(byte*) print_cls::sc#2
(byte[]) print_hextab
(byte[]) print_hextab#0
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#31
(byte*) print_line_cursor#32
(byte*) print_line_cursor#33
(byte*) print_line_cursor#34
(byte*) print_line_cursor#35
(byte*) print_line_cursor#36
(byte*) print_line_cursor#37
(byte*) print_line_cursor#38
(byte*) print_line_cursor#39
(byte*) print_line_cursor#4
(byte*) print_line_cursor#40
(byte*) print_line_cursor#41
(byte*) print_line_cursor#42
(byte*) print_line_cursor#43
(byte*) print_line_cursor#44
(byte*) print_line_cursor#45
(byte*) print_line_cursor#46
(byte*) print_line_cursor#47
(byte*) print_line_cursor#48
(byte*) print_line_cursor#49
(byte*) print_line_cursor#5
(byte*) print_line_cursor#50
(byte*) print_line_cursor#51
(byte*) print_line_cursor#52
(byte*) print_line_cursor#53
(byte*) print_line_cursor#54
(byte*) print_line_cursor#55
(byte*) print_line_cursor#56
(byte*) print_line_cursor#57
(byte*) print_line_cursor#58
(byte*) print_line_cursor#59
(byte*) print_line_cursor#6
(byte*) print_line_cursor#60
(byte*) print_line_cursor#61
(byte*) print_line_cursor#62
(byte*) print_line_cursor#63
(byte*) print_line_cursor#64
(byte*) print_line_cursor#65
(byte*) print_line_cursor#66
(byte*) print_line_cursor#67
(byte*) print_line_cursor#68
(byte*) print_line_cursor#69
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(void()) print_ln()
(byte*~) print_ln::$0
(bool~) print_ln::$1
(label) print_ln::@1
(label) print_ln::@2
(label) print_ln::@return
(byte*) print_screen
(byte*) print_screen#0
(byte*) print_screen#1
(byte*) print_screen#2
(byte*) print_screen#3
(byte*) print_screen#4
(byte*) print_screen#5
(byte*) print_screen#6
(byte*) print_screen#7
(void()) print_str((byte*) print_str::str)
(bool~) print_str::$0
(label) print_str::@1
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0
(byte*) print_str::str#1
(byte*) print_str::str#10
(byte*) print_str::str#11
(byte*) print_str::str#2
(byte*) print_str::str#3
(byte*) print_str::str#4
(byte*) print_str::str#5
(byte*) print_str::str#6
(byte*) print_str::str#7
(byte*) print_str::str#8
(byte*) print_str::str#9
(void()) test_bytes()
(byte/signed word/word/dword/signed dword~) test_bytes::$1
(signed byte~) test_bytes::$3
(signed word/signed byte/signed dword~) test_bytes::$4
(byte~) test_bytes::$5
(label) test_bytes::@1
(label) test_bytes::@2
(label) test_bytes::@3
(label) test_bytes::@return
(byte) test_bytes::bb
(byte) test_bytes::bb#0
(byte) test_bytes::bb#1
(byte) test_bytes::bc
(byte) test_bytes::bc#0
(byte) test_bytes::bc#1
(byte) test_bytes::bd
(byte) test_bytes::bd#0
(const string) test_bytes::msg = (string) "0=0@"
(const string) test_bytes::msg1 = (string) "0+2=2@"
(const string) test_bytes::msg2 = (string) "0+2-4=254@"
(void()) test_sbytes()
(signed word/signed byte/signed dword~) test_sbytes::$1
(signed byte~) test_sbytes::$10
(signed word/signed byte/signed dword~) test_sbytes::$3
(signed byte/signed word/signed dword~) test_sbytes::$4
(signed byte~) test_sbytes::$6
(signed byte/signed word/signed dword~) test_sbytes::$8
(signed word/signed byte/signed dword~) test_sbytes::$9
(label) test_sbytes::@1
(label) test_sbytes::@2
(label) test_sbytes::@3
(label) test_sbytes::@4
(label) test_sbytes::@5
(label) test_sbytes::@return
(signed byte) test_sbytes::bb
(signed byte) test_sbytes::bb#0
(signed byte) test_sbytes::bb#1
(signed byte) test_sbytes::bc
(signed byte) test_sbytes::bc#0
(signed byte) test_sbytes::bc#1
(signed byte) test_sbytes::bd
(signed byte) test_sbytes::bd#0
(signed byte) test_sbytes::bd#1
(signed byte) test_sbytes::be
(signed byte) test_sbytes::be#0
(signed byte) test_sbytes::bf
(signed byte) test_sbytes::bf#0
(const string) test_sbytes::msg = (string) "0=0@"
(const string) test_sbytes::msg1 = (string) "0+2=2@"
(const string) test_sbytes::msg2 = (string) "0+2-4=-2@"
(const string) test_sbytes::msg3 = (string) "-(0+2-4)=2@"
(const string) test_sbytes::msg4 = (string) "-127-127=2@"

Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#59 (byte*) print_char_cursor#82 (byte*) print_screen#7 (byte*) print_line_cursor#58 (byte*) print_char_cursor#81 (byte*) print_screen#6 (byte*) print_line_cursor#53 (byte*) print_char_cursor#79 (byte*) print_screen#5 
Alias (byte*) print_str::str#10 = (byte*) print_str::str#9 
Alias (byte*) print_char_cursor#2 = (byte*) print_char_cursor#34 (byte*) print_char_cursor#66 (byte*) print_char_cursor#35 
Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#25 (byte*) print_char_cursor#3 (byte*) print_line_cursor#26 (byte*) print_char_cursor#37 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4 
Alias (byte*) print_line_cursor#27 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_line_cursor#3 (byte*) print_char_cursor#5 (byte*) print_char_cursor#38 (byte*) print_line_cursor#4 (byte*) print_char_cursor#6 
Alias (byte*) print_line_cursor#28 = (byte*) print_line_cursor#5 
Alias (byte*) print_char_cursor#39 = (byte*) print_char_cursor#7 
Alias (byte*) print_char_cursor#40 = (byte*) print_char_cursor#8 
Alias (byte*) print_line_cursor#29 = (byte*) print_line_cursor#6 
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#9 (byte*) print_char_cursor#41 (byte*) print_char_cursor#42 
Alias (byte*) print_line_cursor#30 = (byte*) print_line_cursor#7 (byte*) print_line_cursor#31 (byte*) print_line_cursor#8 
Alias (byte) test_bytes::bb#0 = (byte) test_bytes::bb#1 
Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#43 
Alias (byte*) print_line_cursor#32 = (byte*) print_line_cursor#9 
Alias (byte) test_bytes::bc#0 = (byte/signed word/word/dword/signed dword~) test_bytes::$1 (byte) test_bytes::bc#1 
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#44 
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#33 
Alias (byte) test_bytes::bd#0 = (byte~) test_bytes::$5 
Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#45 (byte*) print_char_cursor#46 (byte*) print_char_cursor#14 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#34 (byte*) print_line_cursor#35 (byte*) print_line_cursor#12 
Alias (byte) assert_byte::b#3 = (byte) assert_byte::b#4 (byte) assert_byte::b#5 
Alias (byte) assert_byte::c#3 = (byte) assert_byte::c#4 (byte) assert_byte::c#5 
Alias (byte*) print_line_cursor#54 = (byte*) print_line_cursor#66 (byte*) print_line_cursor#68 (byte*) print_line_cursor#64 (byte*) print_line_cursor#60 (byte*) print_line_cursor#61 (byte*) print_line_cursor#55 
Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#47 
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#48 (byte*) print_char_cursor#71 (byte*) print_char_cursor#72 
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#49 
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#50 
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#36 (byte*) print_line_cursor#37 (byte*) print_line_cursor#14 
Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#51 (byte*) print_char_cursor#52 (byte*) print_char_cursor#20 
Alias (signed byte) test_sbytes::bb#0 = (signed byte) test_sbytes::bb#1 
Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#53 
Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#38 
Alias (signed byte) test_sbytes::bc#0 = (signed word/signed byte/signed dword~) test_sbytes::$1 (signed byte) test_sbytes::bc#1 
Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#54 
Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#39 
Alias (signed byte) test_sbytes::bd#0 = (signed word/signed byte/signed dword~) test_sbytes::$3 (signed byte) test_sbytes::bd#1 
Alias (signed byte) assert_sbyte::c#2 = (signed byte/signed word/signed dword~) test_sbytes::$4 
Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#55 
Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#40 
Alias (signed byte) test_sbytes::be#0 = (signed byte~) test_sbytes::$6 
Alias (byte*) print_char_cursor#24 = (byte*) print_char_cursor#56 
Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#41 
Alias (signed byte) test_sbytes::bf#0 = (signed byte~) test_sbytes::$10 
Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#57 (byte*) print_char_cursor#58 (byte*) print_char_cursor#26 
Alias (byte*) print_line_cursor#19 = (byte*) print_line_cursor#42 (byte*) print_line_cursor#43 (byte*) print_line_cursor#20 
Alias (signed byte) assert_sbyte::b#5 = (signed byte) assert_sbyte::b#6 (signed byte) assert_sbyte::b#7 
Alias (signed byte) assert_sbyte::c#5 = (signed byte) assert_sbyte::c#6 (signed byte) assert_sbyte::c#7 
Alias (byte*) print_line_cursor#56 = (byte*) print_line_cursor#67 (byte*) print_line_cursor#69 (byte*) print_line_cursor#65 (byte*) print_line_cursor#62 (byte*) print_line_cursor#63 (byte*) print_line_cursor#57 
Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#59 
Alias (byte*) print_char_cursor#28 = (byte*) print_char_cursor#60 (byte*) print_char_cursor#76 (byte*) print_char_cursor#77 
Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#61 
Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#62 
Alias (byte*) print_line_cursor#21 = (byte*) print_line_cursor#44 (byte*) print_line_cursor#45 (byte*) print_line_cursor#22 
Alias (byte*) print_char_cursor#31 = (byte*) print_char_cursor#63 (byte*) print_char_cursor#64 (byte*) print_char_cursor#32 
Alias (byte*) print_line_cursor#23 = (byte*) print_line_cursor#46 
Alias (byte*) print_char_cursor#33 = (byte*) print_char_cursor#65 
Successful SSA optimization Pass2AliasElimination
Alias (byte*) print_line_cursor#50 = (byte*) print_line_cursor#54 
Alias (byte*) print_line_cursor#52 = (byte*) print_line_cursor#56 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) print_char_cursor#36
Self Phi Eliminated (byte*) print_line_cursor#27
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) print_char_cursor#36 (byte*) print_char_cursor#67
Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4
Redundant Phi (byte*) print_line_cursor#27 (byte*) print_screen#1
Redundant Phi (byte*) print_screen#4 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_line_cursor#48 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_char_cursor#68 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_line_cursor#28 (byte*) print_line_cursor#27
Redundant Phi (byte*) print_char_cursor#39 (byte*) print_line_cursor#27
Redundant Phi (byte*) print_char_cursor#40 (byte*) print_char_cursor#13
Redundant Phi (byte*) print_line_cursor#29 (byte*) print_line_cursor#11
Redundant Phi (byte*) print_char_cursor#10 (byte*) print_char_cursor#25
Redundant Phi (byte*) print_line_cursor#30 (byte*) print_line_cursor#19
Redundant Phi (byte*) print_char_cursor#69 (byte*) print_char_cursor#39
Redundant Phi (byte*) print_line_cursor#49 (byte*) print_line_cursor#28
Redundant Phi (byte*) print_char_cursor#11 (byte*) print_char_cursor#19
Redundant Phi (byte*) print_line_cursor#32 (byte*) print_line_cursor#13
Redundant Phi (byte*) print_char_cursor#12 (byte*) print_char_cursor#19
Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#13
Redundant Phi (byte*) print_char_cursor#13 (byte*) print_char_cursor#19
Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#13
Redundant Phi (byte*) print_char_cursor#15 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#17 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_char_cursor#19 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_char_cursor#74 (byte*) print_char_cursor#40
Redundant Phi (byte*) print_line_cursor#51 (byte*) print_line_cursor#29
Redundant Phi (byte*) print_char_cursor#21 (byte*) print_char_cursor#31
Redundant Phi (byte*) print_line_cursor#15 (byte*) print_line_cursor#21
Redundant Phi (byte*) print_char_cursor#22 (byte*) print_char_cursor#31
Redundant Phi (byte*) print_line_cursor#16 (byte*) print_line_cursor#21
Redundant Phi (byte*) print_char_cursor#23 (byte*) print_char_cursor#31
Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#21
Redundant Phi (byte*) print_char_cursor#24 (byte*) print_char_cursor#31
Redundant Phi (byte*) print_line_cursor#18 (byte*) print_line_cursor#21
Redundant Phi (byte*) print_char_cursor#25 (byte*) print_char_cursor#31
Redundant Phi (byte*) print_line_cursor#19 (byte*) print_line_cursor#21
Redundant Phi (byte*) print_char_cursor#27 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#28 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#29 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#30 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_line_cursor#21 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_char_cursor#31 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_line_cursor#23 (byte*) print_line_cursor#30
Redundant Phi (byte*) print_char_cursor#33 (byte*) print_char_cursor#10
Successful SSA optimization Pass2RedundantPhiElimination
Redundant Phi (byte*) print_char_cursor#73 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#75 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_line_cursor#52 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_char_cursor#78 (byte*) print_char_cursor#2
Successful SSA optimization Pass2RedundantPhiElimination
Redundant Phi (byte*) print_char_cursor#67 (byte*) print_char_cursor#2
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) print_str::$0 [6] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_ln::$1 [19] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1
Simple Condition (bool~) print_cls::$1 [35] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
Simple Condition (bool~) assert_byte::$2 [108] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1
Simple Condition (bool~) assert_sbyte::$2 [191] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const byte[]) print_hextab#0 = $0
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte) GREEN#0 = 5
Constant (const byte) RED#0 = 2
Constant (const byte) test_bytes::bb#0 = 0
Constant (const byte*) assert_byte::msg#0 = test_bytes::msg
Constant (const byte) assert_byte::c#0 = 0
Constant (const byte*) assert_byte::msg#1 = test_bytes::msg1
Constant (const byte) assert_byte::c#1 = 2
Constant (const byte*) assert_byte::msg#2 = test_bytes::msg2
Constant (const byte) assert_byte::c#2 = 254
Constant (const byte*) print_str::str#2 = assert_byte::str
Constant (const byte*) print_str::str#3 = assert_byte::str1
Constant (const byte*) print_str::str#4 = assert_byte::str2
Constant (const signed byte) test_sbytes::bb#0 = 0
Constant (const byte*) assert_sbyte::msg#0 = test_sbytes::msg
Constant (const signed byte) assert_sbyte::c#0 = 0
Constant (const byte*) assert_sbyte::msg#1 = test_sbytes::msg1
Constant (const signed byte) assert_sbyte::c#1 = 2
Constant (const signed byte) assert_sbyte::c#2 = -2
Constant (const byte*) assert_sbyte::msg#2 = test_sbytes::msg2
Constant (const byte*) assert_sbyte::msg#3 = test_sbytes::msg3
Constant (const signed byte) assert_sbyte::c#3 = 2
Constant (const signed byte/signed word/signed dword) test_sbytes::$8 = -127
Constant (const byte*) assert_sbyte::msg#4 = test_sbytes::msg4
Constant (const signed byte) assert_sbyte::c#4 = 2
Constant (const byte*) print_str::str#6 = assert_sbyte::str
Constant (const byte*) print_str::str#7 = assert_sbyte::str1
Constant (const byte*) print_str::str#8 = assert_sbyte::str2
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
Constant (const byte) assert_byte::b#0 = test_bytes::bb#0
Constant (const byte) test_bytes::bc#0 = test_bytes::bb#0+2
Constant (const signed byte) assert_sbyte::b#0 = test_sbytes::bb#0
Constant (const signed byte) test_sbytes::bc#0 = test_sbytes::bb#0+2
Constant (const signed word/signed dword) test_sbytes::$9 = test_sbytes::$8-127
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) assert_byte::b#1 = test_bytes::bc#0
Constant (const signed byte) test_bytes::$3 = ((signed byte))test_bytes::bc#0
Constant (const signed byte) assert_sbyte::b#1 = test_sbytes::bc#0
Constant (const signed byte) test_sbytes::bd#0 = test_sbytes::bc#0-4
Constant (const signed byte) test_sbytes::bf#0 = ((signed byte))test_sbytes::$9
Successful SSA optimization Pass2ConstantIdentification
Constant (const signed word/signed byte/signed dword) test_bytes::$4 = test_bytes::$3-4
Constant (const signed byte) assert_sbyte::b#2 = test_sbytes::bd#0
Constant (const signed byte) test_sbytes::be#0 = -test_sbytes::bd#0
Constant (const signed byte) assert_sbyte::b#4 = test_sbytes::bf#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) test_bytes::bd#0 = ((byte))test_bytes::$4
Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) assert_byte::b#2 = test_bytes::bd#0
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization Pass2ConstantStringConsolidation
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) @12
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @19
Culled Empty Block (label) main::@3
Culled Empty Block (label) test_bytes::@3
Culled Empty Block (label) assert_byte::@7
Culled Empty Block (label) assert_byte::@8
Culled Empty Block (label) assert_byte::@9
Culled Empty Block (label) test_sbytes::@5
Culled Empty Block (label) assert_sbyte::@7
Culled Empty Block (label) assert_sbyte::@8
Culled Empty Block (label) assert_sbyte::@9
Culled Empty Block (label) @25
Successful SSA optimization Pass2CullEmptyBlocks
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte*) assert_byte::msg#0
Inlining constant with var siblings (const byte) assert_byte::c#0
Inlining constant with var siblings (const byte*) assert_byte::msg#1
Inlining constant with var siblings (const byte) assert_byte::c#1
Inlining constant with var siblings (const byte*) assert_byte::msg#2
Inlining constant with var siblings (const byte) assert_byte::c#2
Inlining constant with var siblings (const byte) assert_byte::b#0
Inlining constant with var siblings (const byte) assert_byte::b#1
Inlining constant with var siblings (const byte) assert_byte::b#2
Inlining constant with var siblings (const byte*) assert_sbyte::msg#0
Inlining constant with var siblings (const signed byte) assert_sbyte::c#0
Inlining constant with var siblings (const byte*) assert_sbyte::msg#1
Inlining constant with var siblings (const signed byte) assert_sbyte::c#1
Inlining constant with var siblings (const signed byte) assert_sbyte::c#2
Inlining constant with var siblings (const byte*) assert_sbyte::msg#2
Inlining constant with var siblings (const byte*) assert_sbyte::msg#3
Inlining constant with var siblings (const signed byte) assert_sbyte::c#3
Inlining constant with var siblings (const byte*) assert_sbyte::msg#4
Inlining constant with var siblings (const signed byte) assert_sbyte::c#4
Inlining constant with var siblings (const signed byte) assert_sbyte::b#0
Inlining constant with var siblings (const signed byte) assert_sbyte::b#1
Inlining constant with var siblings (const signed byte) assert_sbyte::b#2
Inlining constant with var siblings (const signed byte) assert_sbyte::b#4
Inlining constant with var siblings (const signed byte) assert_sbyte::b#3
Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined test_bytes::msg = (const string) msg
Constant inlined test_sbytes::msg = (const string) msg
Constant inlined assert_sbyte::b#2 = (const signed byte) test_sbytes::bd#0
Constant inlined assert_sbyte::c#1 = (byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined assert_sbyte::b#1 = (const signed byte) test_sbytes::bc#0
Constant inlined assert_sbyte::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined assert_byte::b#0 = (const byte) test_bytes::bb#0
Constant inlined assert_sbyte::str1 = (const string) str1
Constant inlined assert_sbyte::b#0 = (const signed byte) test_sbytes::bb#0
Constant inlined assert_byte::b#1 = (const byte) test_bytes::bc#0
Constant inlined assert_sbyte::str2 = (const string) str2
Constant inlined assert_byte::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined assert_byte::b#2 = (const byte) test_bytes::bd#0
Constant inlined assert_byte::c#1 = (byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined test_bytes::$3 = ((signed byte))(const byte) test_bytes::bc#0
Constant inlined assert_byte::c#2 = (byte/word/signed word/dword/signed dword) 254
Constant inlined assert_sbyte::c#4 = (byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined test_bytes::$4 = ((signed byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined assert_sbyte::b#4 = (const signed byte) test_sbytes::bf#0
Constant inlined assert_sbyte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined assert_sbyte::b#3 = (const signed byte) test_sbytes::be#0
Constant inlined assert_sbyte::c#2 = -(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined test_sbytes::$8 = -(byte/signed byte/word/signed word/dword/signed dword) 127
Constant inlined test_sbytes::$9 = -(byte/signed byte/word/signed word/dword/signed dword) 127-(byte/signed byte/word/signed word/dword/signed dword) 127
Constant inlined assert_byte::str2 = (const string) str2
Constant inlined assert_byte::msg#0 = (const string) msg
Constant inlined test_sbytes::msg1 = (const string) msg1
Constant inlined assert_byte::str1 = (const string) str1
Constant inlined assert_byte::msg#1 = (const string) msg1
Constant inlined assert_byte::msg#2 = (const string) test_bytes::msg2
Constant inlined assert_sbyte::msg#0 = (const string) msg
Constant inlined assert_sbyte::msg#1 = (const string) msg1
Constant inlined assert_sbyte::msg#2 = (const string) test_sbytes::msg2
Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined assert_sbyte::msg#3 = (const string) test_sbytes::msg3
Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined assert_sbyte::str = (const string) str
Constant inlined assert_byte::str = (const string) str
Constant inlined test_bytes::msg1 = (const string) msg1
Constant inlined print_str::str#4 = (const string) str2
Constant inlined assert_sbyte::msg#4 = (const string) test_sbytes::msg4
Constant inlined print_str::str#3 = (const string) str1
Constant inlined print_str::str#2 = (const string) str
Constant inlined print_str::str#8 = (const string) str2
Constant inlined print_str::str#7 = (const string) str1
Constant inlined print_str::str#6 = (const string) str
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @24
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of test_sbytes
Adding NOP phi() at start of test_sbytes::@1
Adding NOP phi() at start of test_sbytes::@2
Adding NOP phi() at start of test_sbytes::@3
Adding NOP phi() at start of test_sbytes::@4
Adding NOP phi() at start of test_bytes
Adding NOP phi() at start of print_cls
CALL GRAPH
Calls in [] to main:2 
Calls in [main] to print_cls:5 test_bytes:7 test_sbytes:9 
Calls in [test_sbytes] to assert_sbyte:12 assert_sbyte:14 assert_sbyte:16 assert_sbyte:18 assert_sbyte:20 
Calls in [assert_sbyte] to print_str:26 print_str:28 print_str:31 print_ln:33 print_str:37 
Calls in [test_bytes] to assert_byte:57 assert_byte:60 assert_byte:63 
Calls in [assert_byte] to print_str:69 print_str:71 print_str:74 print_ln:76 print_str:80 

Created 15 initial phi equivalence classes
Coalesced [24] print_str::str#13 ← print_str::str#5
Not coalescing [25] print_char_cursor#87 ← print_line_cursor#1
Coalesced [27] print_char_cursor#90 ← print_char_cursor#2
Coalesced (already) [30] print_char_cursor#89 ← print_char_cursor#2
Coalesced [32] print_line_cursor#71 ← print_line_cursor#1
Coalesced (already) [36] print_char_cursor#88 ← print_char_cursor#2
Coalesced [39] print_str::str#14 ← print_str::str#11
Coalesced (already) [40] print_char_cursor#91 ← print_char_cursor#80
Coalesced [47] print_str::str#15 ← print_str::str#0
Coalesced [48] print_char_cursor#92 ← print_char_cursor#1
Coalesced [50] print_line_cursor#72 ← print_line_cursor#47
Coalesced (already) [55] print_line_cursor#73 ← print_line_cursor#1
Not coalescing [58] print_char_cursor#93 ← print_line_cursor#1
Coalesced [59] print_line_cursor#74 ← print_line_cursor#1
Not coalescing [61] print_char_cursor#94 ← print_line_cursor#1
Coalesced (already) [62] print_line_cursor#75 ← print_line_cursor#1
Coalesced [67] print_str::str#12 ← print_str::str#1
Coalesced [68] print_char_cursor#83 ← print_char_cursor#70
Coalesced (already) [70] print_char_cursor#86 ← print_char_cursor#2
Coalesced (already) [73] print_char_cursor#85 ← print_char_cursor#2
Coalesced (already) [75] print_line_cursor#70 ← print_line_cursor#50
Coalesced (already) [79] print_char_cursor#84 ← print_char_cursor#2
Coalesced [87] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 10 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @24
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of test_sbytes
Adding NOP phi() at start of test_sbytes::@1
Adding NOP phi() at start of test_sbytes::@2
Adding NOP phi() at start of test_sbytes::@3
Adding NOP phi() at start of test_sbytes::@4
Adding NOP phi() at start of assert_sbyte::@5
Adding NOP phi() at start of assert_sbyte::@3
Adding NOP phi() at start of assert_sbyte::@2
Adding NOP phi() at start of test_bytes
Adding NOP phi() at start of assert_byte::@5
Adding NOP phi() at start of assert_byte::@3
Adding NOP phi() at start of assert_byte::@2
Adding NOP phi() at start of print_cls

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@24
@24: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @24
  [3] phi()
main: scope:[main]  from @24
  [4] phi()
  [5] call print_cls 
  to:main::@1
main::@1: scope:[main]  from main
  [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0
  [7] call test_bytes 
  to:main::@2
main::@2: scope:[main]  from main::@1
  [8] phi()
  [9] call test_sbytes 
  to:main::@return
main::@return: scope:[main]  from main::@2
  [10] return 
  to:@return
test_sbytes: scope:[test_sbytes]  from main::@2
  [11] phi()
  [12] call assert_sbyte 
  to:test_sbytes::@1
test_sbytes::@1: scope:[test_sbytes]  from test_sbytes
  [13] phi()
  [14] call assert_sbyte 
  to:test_sbytes::@2
test_sbytes::@2: scope:[test_sbytes]  from test_sbytes::@1
  [15] phi()
  [16] call assert_sbyte 
  to:test_sbytes::@3
test_sbytes::@3: scope:[test_sbytes]  from test_sbytes::@2
  [17] phi()
  [18] call assert_sbyte 
  to:test_sbytes::@4
test_sbytes::@4: scope:[test_sbytes]  from test_sbytes::@3
  [19] phi()
  [20] call assert_sbyte 
  to:test_sbytes::@return
test_sbytes::@return: scope:[test_sbytes]  from test_sbytes::@4
  [21] return 
  to:@return
assert_sbyte: scope:[assert_sbyte]  from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
  [22] (signed byte) assert_sbyte::c#5 ← phi( test_sbytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_sbytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@2/-(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@3/(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@4/(byte/signed byte/word/signed word/dword/signed dword) 2 )
  [22] (signed byte) assert_sbyte::b#5 ← phi( test_sbytes/(const signed byte) test_sbytes::bb#0 test_sbytes::@1/(const signed byte) test_sbytes::bc#0 test_sbytes::@2/(const signed byte) test_sbytes::bd#0 test_sbytes::@3/(const signed byte) test_sbytes::be#0 test_sbytes::@4/(const signed byte) test_sbytes::bf#0 )
  [22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) msg test_sbytes::@1/(const string) msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
  [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
  [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1
  [25] call print_str 
  to:assert_sbyte::@5
assert_sbyte::@5: scope:[assert_sbyte]  from assert_sbyte
  [26] phi()
  [27] call print_str 
  to:assert_sbyte::@6
assert_sbyte::@6: scope:[assert_sbyte]  from assert_sbyte::@5
  [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1
  to:assert_sbyte::@3
assert_sbyte::@3: scope:[assert_sbyte]  from assert_sbyte::@6
  [29] phi()
  [30] call print_str 
  to:assert_sbyte::@2
assert_sbyte::@2: scope:[assert_sbyte]  from assert_sbyte::@1 assert_sbyte::@3
  [31] phi()
  [32] call print_ln 
  to:assert_sbyte::@return
assert_sbyte::@return: scope:[assert_sbyte]  from assert_sbyte::@2
  [33] return 
  to:@return
assert_sbyte::@1: scope:[assert_sbyte]  from assert_sbyte::@6
  [34] *((const byte*) BGCOL#0) ← (const byte) RED#0
  [35] call print_str 
  to:assert_sbyte::@2
print_str: scope:[print_str]  from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
  [36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@5/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#87 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@5/(byte*) print_char_cursor#2 )
  [36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) str1 assert_byte::@3/(const string) str2 assert_byte::@5/(const string) str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) str1 assert_sbyte::@3/(const string) str2 assert_sbyte::@5/(const string) str )
  to:print_str::@1
print_str::@1: scope:[print_str]  from print_str print_str::@2
  [37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
  [37] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 )
  [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
  to:print_str::@return
print_str::@return: scope:[print_str]  from print_str::@1
  [39] return 
  to:@return
print_str::@2: scope:[print_str]  from print_str::@1
  [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10)
  [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2
  [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10
  to:print_str::@1
print_ln: scope:[print_ln]  from assert_byte::@2 assert_sbyte::@2
  [43] (byte*) print_line_cursor#47 ← phi( assert_byte::@2/(byte*) print_line_cursor#50 assert_sbyte::@2/(byte*) print_line_cursor#1 )
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  [44] (byte*) print_line_cursor#24 ← phi( print_ln/(byte*) print_line_cursor#47 print_ln::@1/(byte*) print_line_cursor#1 )
  [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40
  [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@1
  [47] return 
  to:@return
test_bytes: scope:[test_bytes]  from main::@1
  [48] phi()
  [49] call assert_byte 
  to:test_bytes::@1
test_bytes::@1: scope:[test_bytes]  from test_bytes
  [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1
  [51] call assert_byte 
  to:test_bytes::@2
test_bytes::@2: scope:[test_bytes]  from test_bytes::@1
  [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1
  [53] call assert_byte 
  to:test_bytes::@return
test_bytes::@return: scope:[test_bytes]  from test_bytes::@2
  [54] return 
  to:@return
assert_byte: scope:[assert_byte]  from test_bytes test_bytes::@1 test_bytes::@2
  [55] (byte*) print_line_cursor#50 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*) print_line_cursor#1 test_bytes::@2/(byte*) print_line_cursor#1 )
  [55] (byte) assert_byte::c#3 ← phi( test_bytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_bytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_bytes::@2/(byte/word/signed word/dword/signed dword) 254 )
  [55] (byte) assert_byte::b#3 ← phi( test_bytes/(const byte) test_bytes::bb#0 test_bytes::@1/(const byte) test_bytes::bc#0 test_bytes::@2/(const byte) test_bytes::bd#0 )
  [55] (byte*) print_char_cursor#70 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*~) print_char_cursor#93 test_bytes::@2/(byte*~) print_char_cursor#94 )
  [55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) msg test_bytes::@1/(const string) msg1 test_bytes::@2/(const string) test_bytes::msg2 )
  [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
  [57] call print_str 
  to:assert_byte::@5
assert_byte::@5: scope:[assert_byte]  from assert_byte
  [58] phi()
  [59] call print_str 
  to:assert_byte::@6
assert_byte::@6: scope:[assert_byte]  from assert_byte::@5
  [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1
  to:assert_byte::@3
assert_byte::@3: scope:[assert_byte]  from assert_byte::@6
  [61] phi()
  [62] call print_str 
  to:assert_byte::@2
assert_byte::@2: scope:[assert_byte]  from assert_byte::@1 assert_byte::@3
  [63] phi()
  [64] call print_ln 
  to:assert_byte::@return
assert_byte::@return: scope:[assert_byte]  from assert_byte::@2
  [65] return 
  to:@return
assert_byte::@1: scope:[assert_byte]  from assert_byte::@6
  [66] *((const byte*) BGCOL#0) ← (const byte) RED#0
  [67] call print_str 
  to:assert_byte::@2
print_cls: scope:[print_cls]  from main
  [68] phi()
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  [69] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
  [70] *((byte*) print_cls::sc#2) ← (byte) ' '
  [71] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  [73] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte) GREEN
(byte) RED
(void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c)
(byte) assert_byte::b
(byte) assert_byte::b#3 0.4
(byte) assert_byte::c
(byte) assert_byte::c#3 0.4
(byte*) assert_byte::msg
(byte*) assert_byte::msg#3 2.0
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(signed byte) assert_sbyte::b
(signed byte) assert_sbyte::b#5 0.3333333333333333
(signed byte) assert_sbyte::c
(signed byte) assert_sbyte::c#5 0.3333333333333333
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#5 2.0
(void()) main()
(byte*) print_char_cursor
(byte*) print_char_cursor#1 11.0
(byte*) print_char_cursor#2 2.230769230769231
(byte*) print_char_cursor#70 3.0
(byte*) print_char_cursor#80 18.0
(byte*~) print_char_cursor#87 4.0
(byte*~) print_char_cursor#93 4.0
(byte*~) print_char_cursor#94 4.0
(void()) print_cls()
(byte*) print_cls::sc
(byte*) print_cls::sc#1 16.5
(byte*) print_cls::sc#2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 1.2500000000000002
(byte*) print_line_cursor#24 24.0
(byte*) print_line_cursor#47 6.0
(byte*) print_line_cursor#50 0.5454545454545454
(void()) print_ln()
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(byte*) print_str::str
(byte*) print_str::str#0 22.0
(byte*) print_str::str#1 4.0
(byte*) print_str::str#10 11.5
(byte*) print_str::str#11 6.0
(byte*) print_str::str#5 2.0
(void()) test_bytes()
(byte) test_bytes::bb
(byte) test_bytes::bc
(byte) test_bytes::bd
(void()) test_sbytes()
(signed byte) test_sbytes::bb
(signed byte) test_sbytes::bc
(signed byte) test_sbytes::bd
(signed byte) test_sbytes::be
(signed byte) test_sbytes::bf

Initial phi equivalence classes
[ assert_sbyte::msg#5 ]
[ assert_sbyte::b#5 ]
[ assert_sbyte::c#5 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
[ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
[ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
[ assert_byte::msg#3 ]
[ assert_byte::b#3 ]
[ assert_byte::c#3 ]
[ print_cls::sc#2 print_cls::sc#1 ]
Complete equivalence classes
[ assert_sbyte::msg#5 ]
[ assert_sbyte::b#5 ]
[ assert_sbyte::c#5 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
[ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
[ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
[ assert_byte::msg#3 ]
[ assert_byte::b#3 ]
[ assert_byte::c#3 ]
[ print_cls::sc#2 print_cls::sc#1 ]
Allocated zp ZP_WORD:2 [ assert_sbyte::msg#5 ]
Allocated zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Allocated zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Allocated zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
Allocated zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
Allocated zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Allocated zp ZP_WORD:12 [ assert_byte::msg#3 ]
Allocated zp ZP_BYTE:14 [ assert_byte::b#3 ]
Allocated zp ZP_BYTE:15 [ assert_byte::c#3 ]
Allocated zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ]

INITIAL ASM
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label BGCOL = $d021
  .const GREEN = 5
  .const RED = 2
  .label print_char_cursor = 6
  .label print_line_cursor = $a
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @24 [phi:@begin->@24]
b24_from_bbegin:
  jmp b24
//SEG5 @24
b24:
//SEG6 [2] call main 
//SEG7 [4] phi from @24 to main [phi:@24->main]
main_from_b24:
  jsr main
//SEG8 [3] phi from @24 to @end [phi:@24->@end]
bend_from_b24:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call print_cls 
  //SEG12 [68] phi from main to print_cls [phi:main->print_cls]
  print_cls_from_main:
    jsr print_cls
    jmp b1
  //SEG13 main::@1
  b1:
  //SEG14 [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 -- _deref_pbuc1=vbuc2 
    lda #GREEN
    sta BGCOL
  //SEG15 [7] call test_bytes 
  //SEG16 [48] phi from main::@1 to test_bytes [phi:main::@1->test_bytes]
  test_bytes_from_b1:
    jsr test_bytes
  //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
  //SEG18 main::@2
  b2:
  //SEG19 [9] call test_sbytes 
  //SEG20 [11] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes]
  test_sbytes_from_b2:
    jsr test_sbytes
    jmp breturn
  //SEG21 main::@return
  breturn:
  //SEG22 [10] return 
    rts
}
//SEG23 test_sbytes
// Test different signed byte constants
test_sbytes: {
    .const bb = 0
    .const bc = bb+2
    .const bd = bc-4
    .const bf = $ff&-$7f-$7f
    .const be = -bd
  //SEG24 [12] call assert_sbyte 
  //SEG25 [22] phi from test_sbytes to assert_sbyte [phi:test_sbytes->assert_sbyte]
  assert_sbyte_from_test_sbytes:
  //SEG26 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_sbytes->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #0
    sta assert_sbyte.c
  //SEG27 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bb
    sta assert_sbyte.b
  //SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_sbyte.msg
    lda #>msg
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG29 [13] phi from test_sbytes to test_sbytes::@1 [phi:test_sbytes->test_sbytes::@1]
  b1_from_test_sbytes:
    jmp b1
  //SEG30 test_sbytes::@1
  b1:
  //SEG31 [14] call assert_sbyte 
  //SEG32 [22] phi from test_sbytes::@1 to assert_sbyte [phi:test_sbytes::@1->assert_sbyte]
  assert_sbyte_from_b1:
  //SEG33 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@1->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG34 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bc
    sta assert_sbyte.b
  //SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_sbyte.msg
    lda #>msg1
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG36 [15] phi from test_sbytes::@1 to test_sbytes::@2 [phi:test_sbytes::@1->test_sbytes::@2]
  b2_from_b1:
    jmp b2
  //SEG37 test_sbytes::@2
  b2:
  //SEG38 [16] call assert_sbyte 
  //SEG39 [22] phi from test_sbytes::@2 to assert_sbyte [phi:test_sbytes::@2->assert_sbyte]
  assert_sbyte_from_b2:
  //SEG40 [22] phi (signed byte) assert_sbyte::c#5 = -(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@2->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #-2
    sta assert_sbyte.c
  //SEG41 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bd
    sta assert_sbyte.b
  //SEG42 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_sbyte.msg
    lda #>msg2
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG43 [17] phi from test_sbytes::@2 to test_sbytes::@3 [phi:test_sbytes::@2->test_sbytes::@3]
  b3_from_b2:
    jmp b3
  //SEG44 test_sbytes::@3
  b3:
  //SEG45 [18] call assert_sbyte 
  //SEG46 [22] phi from test_sbytes::@3 to assert_sbyte [phi:test_sbytes::@3->assert_sbyte]
  assert_sbyte_from_b3:
  //SEG47 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@3->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG48 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #be
    sta assert_sbyte.b
  //SEG49 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg3
    sta assert_sbyte.msg
    lda #>msg3
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG50 [19] phi from test_sbytes::@3 to test_sbytes::@4 [phi:test_sbytes::@3->test_sbytes::@4]
  b4_from_b3:
    jmp b4
  //SEG51 test_sbytes::@4
  b4:
  //SEG52 [20] call assert_sbyte 
  //SEG53 [22] phi from test_sbytes::@4 to assert_sbyte [phi:test_sbytes::@4->assert_sbyte]
  assert_sbyte_from_b4:
  //SEG54 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@4->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG55 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bf
    sta assert_sbyte.b
  //SEG56 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg4
    sta assert_sbyte.msg
    lda #>msg4
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    jmp breturn
  //SEG57 test_sbytes::@return
  breturn:
  //SEG58 [21] return 
    rts
    msg2: .text "0+2-4=-2@"
    msg3: .text "-(0+2-4)=2@"
    msg4: .text "-127-127=2@"
}
//SEG59 assert_sbyte
// assert_sbyte(byte* zeropage(2) msg, signed byte zeropage(4) b, signed byte zeropage(5) c)
assert_sbyte: {
    .label msg = 2
    .label b = 4
    .label c = 5
  //SEG60 [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 -- pbuz1=pbuz2 
    lda msg
    sta print_str.str
    lda msg+1
    sta print_str.str+1
  //SEG61 [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG62 [25] call print_str 
  //SEG63 [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
  print_str_from_assert_sbyte:
  //SEG64 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#87 [phi:assert_sbyte->print_str#0] -- register_copy 
  //SEG65 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy 
    jsr print_str
  //SEG66 [26] phi from assert_sbyte to assert_sbyte::@5 [phi:assert_sbyte->assert_sbyte::@5]
  b5_from_assert_sbyte:
    jmp b5
  //SEG67 assert_sbyte::@5
  b5:
  //SEG68 [27] call print_str 
  //SEG69 [36] phi from assert_sbyte::@5 to print_str [phi:assert_sbyte::@5->print_str]
  print_str_from_b5:
  //SEG70 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@5->print_str#0] -- register_copy 
  //SEG71 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b6
  //SEG72 assert_sbyte::@6
  b6:
  //SEG73 [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 -- vbsz1_neq_vbsz2_then_la1 
    lda b
    cmp c
    bne b1
  //SEG74 [29] phi from assert_sbyte::@6 to assert_sbyte::@3 [phi:assert_sbyte::@6->assert_sbyte::@3]
  b3_from_b6:
    jmp b3
  //SEG75 assert_sbyte::@3
  b3:
  //SEG76 [30] call print_str 
  //SEG77 [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
  print_str_from_b3:
  //SEG78 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy 
  //SEG79 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
  //SEG80 [31] phi from assert_sbyte::@1 assert_sbyte::@3 to assert_sbyte::@2 [phi:assert_sbyte::@1/assert_sbyte::@3->assert_sbyte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
  //SEG81 assert_sbyte::@2
  b2:
  //SEG82 [32] call print_ln 
  //SEG83 [43] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln]
  print_ln_from_b2:
  //SEG84 [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#1 [phi:assert_sbyte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
  //SEG85 assert_sbyte::@return
  breturn:
  //SEG86 [33] return 
    rts
  //SEG87 assert_sbyte::@1
  b1:
  //SEG88 [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
  //SEG89 [35] call print_str 
  //SEG90 [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
  print_str_from_b1:
  //SEG91 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy 
  //SEG92 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
//SEG93 print_str
// Print a zero-terminated string
// print_str(byte* zeropage(8) str)
print_str: {
    .label str = 8
  //SEG94 [37] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  b1_from_print_str:
  b1_from_b2:
  //SEG95 [37] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#80 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
  //SEG96 [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
    jmp b1
  //SEG97 print_str::@1
  b1:
  //SEG98 [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
    jmp breturn
  //SEG99 print_str::@return
  breturn:
  //SEG100 [39] return 
    rts
  //SEG101 print_str::@2
  b2:
  //SEG102 [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    ldy #0
    sta (print_char_cursor),y
  //SEG103 [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
  //SEG104 [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1_from_b2
}
//SEG105 print_ln
// Print a newline
print_ln: {
  //SEG106 [44] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
  b1_from_print_ln:
  b1_from_b1:
  //SEG107 [44] phi (byte*) print_line_cursor#24 = (byte*) print_line_cursor#47 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy 
    jmp b1
  //SEG108 print_ln::@1
  b1:
  //SEG109 [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda print_line_cursor
    clc
    adc #$28
    sta print_line_cursor
    bcc !+
    inc print_line_cursor+1
  !:
  //SEG110 [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda print_line_cursor+1
    cmp print_char_cursor+1
    bcc b1_from_b1
    bne !+
    lda print_line_cursor
    cmp print_char_cursor
    bcc b1_from_b1
  !:
    jmp breturn
  //SEG111 print_ln::@return
  breturn:
  //SEG112 [47] return 
    rts
}
//SEG113 test_bytes
// Test different byte constants
test_bytes: {
    .const bb = 0
    .const bc = bb+2
    .const bd = bc-4
  //SEG114 [49] call assert_byte 
  //SEG115 [55] phi from test_bytes to assert_byte [phi:test_bytes->assert_byte]
  assert_byte_from_test_bytes:
  //SEG116 [55] phi (byte*) print_line_cursor#50 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:test_bytes->assert_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta print_line_cursor
    lda #>$400
    sta print_line_cursor+1
  //SEG117 [55] phi (byte) assert_byte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_bytes->assert_byte#1] -- vbuz1=vbuc1 
    lda #0
    sta assert_byte.c
  //SEG118 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bb#0 [phi:test_bytes->assert_byte#2] -- vbuz1=vbuc1 
    lda #bb
    sta assert_byte.b
  //SEG119 [55] phi (byte*) print_char_cursor#70 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:test_bytes->assert_byte#3] -- pbuz1=pbuc1 
    lda #<$400
    sta print_char_cursor
    lda #>$400
    sta print_char_cursor+1
  //SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_byte.msg
    lda #>msg
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b1
  //SEG121 test_bytes::@1
  b1:
  //SEG122 [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG123 [51] call assert_byte 
  //SEG124 [55] phi from test_bytes::@1 to assert_byte [phi:test_bytes::@1->assert_byte]
  assert_byte_from_b1:
  //SEG125 [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@1->assert_byte#0] -- register_copy 
  //SEG126 [55] phi (byte) assert_byte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_bytes::@1->assert_byte#1] -- vbuz1=vbuc1 
    lda #2
    sta assert_byte.c
  //SEG127 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuz1=vbuc1 
    lda #bc
    sta assert_byte.b
  //SEG128 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy 
  //SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_byte.msg
    lda #>msg1
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b2
  //SEG130 test_bytes::@2
  b2:
  //SEG131 [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG132 [53] call assert_byte 
  //SEG133 [55] phi from test_bytes::@2 to assert_byte [phi:test_bytes::@2->assert_byte]
  assert_byte_from_b2:
  //SEG134 [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@2->assert_byte#0] -- register_copy 
  //SEG135 [55] phi (byte) assert_byte::c#3 = (byte/word/signed word/dword/signed dword) 254 [phi:test_bytes::@2->assert_byte#1] -- vbuz1=vbuc1 
    lda #$fe
    sta assert_byte.c
  //SEG136 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuz1=vbuc1 
    lda #bd
    sta assert_byte.b
  //SEG137 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#94 [phi:test_bytes::@2->assert_byte#3] -- register_copy 
  //SEG138 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_byte.msg
    lda #>msg2
    sta assert_byte.msg+1
    jsr assert_byte
    jmp breturn
  //SEG139 test_bytes::@return
  breturn:
  //SEG140 [54] return 
    rts
    msg2: .text "0+2-4=254@"
}
//SEG141 assert_byte
// assert_byte(byte* zeropage($c) msg, byte zeropage($e) b, byte zeropage($f) c)
assert_byte: {
    .label msg = $c
    .label b = $e
    .label c = $f
  //SEG142 [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 -- pbuz1=pbuz2 
    lda msg
    sta print_str.str
    lda msg+1
    sta print_str.str+1
  //SEG143 [57] call print_str 
  //SEG144 [36] phi from assert_byte to print_str [phi:assert_byte->print_str]
  print_str_from_assert_byte:
  //SEG145 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#70 [phi:assert_byte->print_str#0] -- register_copy 
  //SEG146 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy 
    jsr print_str
  //SEG147 [58] phi from assert_byte to assert_byte::@5 [phi:assert_byte->assert_byte::@5]
  b5_from_assert_byte:
    jmp b5
  //SEG148 assert_byte::@5
  b5:
  //SEG149 [59] call print_str 
  //SEG150 [36] phi from assert_byte::@5 to print_str [phi:assert_byte::@5->print_str]
  print_str_from_b5:
  //SEG151 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@5->print_str#0] -- register_copy 
  //SEG152 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b6
  //SEG153 assert_byte::@6
  b6:
  //SEG154 [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 -- vbuz1_neq_vbuz2_then_la1 
    lda b
    cmp c
    bne b1
  //SEG155 [61] phi from assert_byte::@6 to assert_byte::@3 [phi:assert_byte::@6->assert_byte::@3]
  b3_from_b6:
    jmp b3
  //SEG156 assert_byte::@3
  b3:
  //SEG157 [62] call print_str 
  //SEG158 [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
  print_str_from_b3:
  //SEG159 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy 
  //SEG160 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
  //SEG161 [63] phi from assert_byte::@1 assert_byte::@3 to assert_byte::@2 [phi:assert_byte::@1/assert_byte::@3->assert_byte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
  //SEG162 assert_byte::@2
  b2:
  //SEG163 [64] call print_ln 
  //SEG164 [43] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln]
  print_ln_from_b2:
  //SEG165 [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#50 [phi:assert_byte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
  //SEG166 assert_byte::@return
  breturn:
  //SEG167 [65] return 
    rts
  //SEG168 assert_byte::@1
  b1:
  //SEG169 [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
  //SEG170 [67] call print_str 
  //SEG171 [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
  print_str_from_b1:
  //SEG172 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy 
  //SEG173 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
//SEG174 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = $10
  //SEG175 [69] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG176 [69] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta sc
    lda #>$400
    sta sc+1
    jmp b1
  //SEG177 [69] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG178 [69] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG179 print_cls::@1
  b1:
  //SEG180 [70] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG181 [71] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG182 [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>$400+$3e8
    bne b1_from_b1
    lda sc
    cmp #<$400+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG183 print_cls::@return
  breturn:
  //SEG184 [73] return 
    rts
}
  str: .text " @"
  str2: .text "ok@"
  msg1: .text "0+2=2@"
  msg: .text "0=0@"
  str1: .text "fail!@"

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Statement [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ) always clobbers reg byte a 
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ assert_byte::b#3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ assert_byte::b#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ assert_byte::c#3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ assert_byte::c#3 ]
Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a 
Statement [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#94 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#94 ] ) always clobbers reg byte a 
Statement [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_char_cursor#2 print_line_cursor#50 ] ( main:2::test_bytes:7::assert_byte:49 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:51 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:53 [ print_char_cursor#2 print_line_cursor#50 ] ) always clobbers reg byte a 
Statement [70] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a 
Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a 
Statement [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ) always clobbers reg byte a 
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a 
Statement [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#94 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#94 ] ) always clobbers reg byte a 
Statement [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_char_cursor#2 print_line_cursor#50 ] ( main:2::test_bytes:7::assert_byte:49 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:51 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:53 [ print_char_cursor#2 print_line_cursor#50 ] ) always clobbers reg byte a 
Statement [70] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_WORD:2 [ assert_sbyte::msg#5 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_BYTE:4 [ assert_sbyte::b#5 ] : zp ZP_BYTE:4 , reg byte x , 
Potential registers zp ZP_BYTE:5 [ assert_sbyte::c#5 ] : zp ZP_BYTE:5 , reg byte x , 
Potential registers zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ] : zp ZP_WORD:6 , 
Potential registers zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] : zp ZP_WORD:8 , 
Potential registers zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] : zp ZP_WORD:10 , 
Potential registers zp ZP_WORD:12 [ assert_byte::msg#3 ] : zp ZP_WORD:12 , 
Potential registers zp ZP_BYTE:14 [ assert_byte::b#3 ] : zp ZP_BYTE:14 , reg byte x , 
Potential registers zp ZP_BYTE:15 [ assert_byte::c#3 ] : zp ZP_BYTE:15 , reg byte x , 
Potential registers zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:16 , 

REGISTER UPLIFT SCOPES
Uplift Scope [] 46.23: zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ] 31.8: zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] 
Uplift Scope [print_str] 45.5: zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] 
Uplift Scope [print_cls] 33: zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplift Scope [assert_byte] 2: zp ZP_WORD:12 [ assert_byte::msg#3 ] 0.4: zp ZP_BYTE:14 [ assert_byte::b#3 ] 0.4: zp ZP_BYTE:15 [ assert_byte::c#3 ] 
Uplift Scope [assert_sbyte] 2: zp ZP_WORD:2 [ assert_sbyte::msg#5 ] 0.33: zp ZP_BYTE:4 [ assert_sbyte::b#5 ] 0.33: zp ZP_BYTE:5 [ assert_sbyte::c#5 ] 
Uplift Scope [print_ln] 
Uplift Scope [main] 
Uplift Scope [test_bytes] 
Uplift Scope [test_sbytes] 

Uplifting [] best 2199 combination zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ] zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] 
Uplifting [print_str] best 2199 combination zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] 
Uplifting [print_cls] best 2199 combination zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplifting [assert_byte] best 2187 combination zp ZP_WORD:12 [ assert_byte::msg#3 ] reg byte x [ assert_byte::b#3 ] zp ZP_BYTE:15 [ assert_byte::c#3 ] 
Uplifting [assert_sbyte] best 2169 combination zp ZP_WORD:2 [ assert_sbyte::msg#5 ] reg byte x [ assert_sbyte::b#5 ] zp ZP_BYTE:5 [ assert_sbyte::c#5 ] 
Uplifting [print_ln] best 2169 combination 
Uplifting [main] best 2169 combination 
Uplifting [test_bytes] best 2169 combination 
Uplifting [test_sbytes] best 2169 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ assert_byte::c#3 ]
Uplifting [assert_byte] best 2169 combination zp ZP_BYTE:15 [ assert_byte::c#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Uplifting [assert_sbyte] best 2169 combination zp ZP_BYTE:5 [ assert_sbyte::c#5 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:2 [ assert_sbyte::msg#5 ] ] with [ zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] ] with [ zp ZP_WORD:12 [ assert_byte::msg#3 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 ] ] with [ zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ assert_sbyte::c#5 ] ] with [ zp ZP_BYTE:15 [ assert_byte::c#3 ] ]
Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ assert_sbyte::c#5 assert_byte::c#3 ]
Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
Allocated (was zp ZP_WORD:10) zp ZP_WORD:7 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label BGCOL = $d021
  .const GREEN = 5
  .const RED = 2
  .label print_char_cursor = 5
  .label print_line_cursor = 7
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @24 [phi:@begin->@24]
b24_from_bbegin:
  jmp b24
//SEG5 @24
b24:
//SEG6 [2] call main 
//SEG7 [4] phi from @24 to main [phi:@24->main]
main_from_b24:
  jsr main
//SEG8 [3] phi from @24 to @end [phi:@24->@end]
bend_from_b24:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call print_cls 
  //SEG12 [68] phi from main to print_cls [phi:main->print_cls]
  print_cls_from_main:
    jsr print_cls
    jmp b1
  //SEG13 main::@1
  b1:
  //SEG14 [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 -- _deref_pbuc1=vbuc2 
    lda #GREEN
    sta BGCOL
  //SEG15 [7] call test_bytes 
  //SEG16 [48] phi from main::@1 to test_bytes [phi:main::@1->test_bytes]
  test_bytes_from_b1:
    jsr test_bytes
  //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
  //SEG18 main::@2
  b2:
  //SEG19 [9] call test_sbytes 
  //SEG20 [11] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes]
  test_sbytes_from_b2:
    jsr test_sbytes
    jmp breturn
  //SEG21 main::@return
  breturn:
  //SEG22 [10] return 
    rts
}
//SEG23 test_sbytes
// Test different signed byte constants
test_sbytes: {
    .const bb = 0
    .const bc = bb+2
    .const bd = bc-4
    .const bf = $ff&-$7f-$7f
    .const be = -bd
  //SEG24 [12] call assert_sbyte 
  //SEG25 [22] phi from test_sbytes to assert_sbyte [phi:test_sbytes->assert_sbyte]
  assert_sbyte_from_test_sbytes:
  //SEG26 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_sbytes->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #0
    sta assert_sbyte.c
  //SEG27 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bb
  //SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_sbyte.msg
    lda #>msg
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG29 [13] phi from test_sbytes to test_sbytes::@1 [phi:test_sbytes->test_sbytes::@1]
  b1_from_test_sbytes:
    jmp b1
  //SEG30 test_sbytes::@1
  b1:
  //SEG31 [14] call assert_sbyte 
  //SEG32 [22] phi from test_sbytes::@1 to assert_sbyte [phi:test_sbytes::@1->assert_sbyte]
  assert_sbyte_from_b1:
  //SEG33 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@1->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG34 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bc
  //SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_sbyte.msg
    lda #>msg1
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG36 [15] phi from test_sbytes::@1 to test_sbytes::@2 [phi:test_sbytes::@1->test_sbytes::@2]
  b2_from_b1:
    jmp b2
  //SEG37 test_sbytes::@2
  b2:
  //SEG38 [16] call assert_sbyte 
  //SEG39 [22] phi from test_sbytes::@2 to assert_sbyte [phi:test_sbytes::@2->assert_sbyte]
  assert_sbyte_from_b2:
  //SEG40 [22] phi (signed byte) assert_sbyte::c#5 = -(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@2->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #-2
    sta assert_sbyte.c
  //SEG41 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bd
  //SEG42 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_sbyte.msg
    lda #>msg2
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG43 [17] phi from test_sbytes::@2 to test_sbytes::@3 [phi:test_sbytes::@2->test_sbytes::@3]
  b3_from_b2:
    jmp b3
  //SEG44 test_sbytes::@3
  b3:
  //SEG45 [18] call assert_sbyte 
  //SEG46 [22] phi from test_sbytes::@3 to assert_sbyte [phi:test_sbytes::@3->assert_sbyte]
  assert_sbyte_from_b3:
  //SEG47 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@3->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG48 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #be
  //SEG49 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg3
    sta assert_sbyte.msg
    lda #>msg3
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG50 [19] phi from test_sbytes::@3 to test_sbytes::@4 [phi:test_sbytes::@3->test_sbytes::@4]
  b4_from_b3:
    jmp b4
  //SEG51 test_sbytes::@4
  b4:
  //SEG52 [20] call assert_sbyte 
  //SEG53 [22] phi from test_sbytes::@4 to assert_sbyte [phi:test_sbytes::@4->assert_sbyte]
  assert_sbyte_from_b4:
  //SEG54 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@4->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG55 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bf
  //SEG56 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg4
    sta assert_sbyte.msg
    lda #>msg4
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    jmp breturn
  //SEG57 test_sbytes::@return
  breturn:
  //SEG58 [21] return 
    rts
    msg2: .text "0+2-4=-2@"
    msg3: .text "-(0+2-4)=2@"
    msg4: .text "-127-127=2@"
}
//SEG59 assert_sbyte
// assert_sbyte(byte* zeropage(2) msg, signed byte register(X) b, signed byte zeropage(4) c)
assert_sbyte: {
    .label msg = 2
    .label c = 4
  //SEG60 [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
  //SEG61 [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG62 [25] call print_str 
  //SEG63 [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
  print_str_from_assert_sbyte:
  //SEG64 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#87 [phi:assert_sbyte->print_str#0] -- register_copy 
  //SEG65 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy 
    jsr print_str
  //SEG66 [26] phi from assert_sbyte to assert_sbyte::@5 [phi:assert_sbyte->assert_sbyte::@5]
  b5_from_assert_sbyte:
    jmp b5
  //SEG67 assert_sbyte::@5
  b5:
  //SEG68 [27] call print_str 
  //SEG69 [36] phi from assert_sbyte::@5 to print_str [phi:assert_sbyte::@5->print_str]
  print_str_from_b5:
  //SEG70 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@5->print_str#0] -- register_copy 
  //SEG71 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b6
  //SEG72 assert_sbyte::@6
  b6:
  //SEG73 [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 -- vbsxx_neq_vbsz1_then_la1 
    cpx c
    bne b1
  //SEG74 [29] phi from assert_sbyte::@6 to assert_sbyte::@3 [phi:assert_sbyte::@6->assert_sbyte::@3]
  b3_from_b6:
    jmp b3
  //SEG75 assert_sbyte::@3
  b3:
  //SEG76 [30] call print_str 
  //SEG77 [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
  print_str_from_b3:
  //SEG78 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy 
  //SEG79 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
  //SEG80 [31] phi from assert_sbyte::@1 assert_sbyte::@3 to assert_sbyte::@2 [phi:assert_sbyte::@1/assert_sbyte::@3->assert_sbyte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
  //SEG81 assert_sbyte::@2
  b2:
  //SEG82 [32] call print_ln 
  //SEG83 [43] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln]
  print_ln_from_b2:
  //SEG84 [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#1 [phi:assert_sbyte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
  //SEG85 assert_sbyte::@return
  breturn:
  //SEG86 [33] return 
    rts
  //SEG87 assert_sbyte::@1
  b1:
  //SEG88 [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
  //SEG89 [35] call print_str 
  //SEG90 [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
  print_str_from_b1:
  //SEG91 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy 
  //SEG92 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
//SEG93 print_str
// Print a zero-terminated string
// print_str(byte* zeropage(2) str)
print_str: {
    .label str = 2
  //SEG94 [37] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  b1_from_print_str:
  b1_from_b2:
  //SEG95 [37] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#80 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
  //SEG96 [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
    jmp b1
  //SEG97 print_str::@1
  b1:
  //SEG98 [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
    jmp breturn
  //SEG99 print_str::@return
  breturn:
  //SEG100 [39] return 
    rts
  //SEG101 print_str::@2
  b2:
  //SEG102 [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    ldy #0
    sta (print_char_cursor),y
  //SEG103 [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
  //SEG104 [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1_from_b2
}
//SEG105 print_ln
// Print a newline
print_ln: {
  //SEG106 [44] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
  b1_from_print_ln:
  b1_from_b1:
  //SEG107 [44] phi (byte*) print_line_cursor#24 = (byte*) print_line_cursor#47 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy 
    jmp b1
  //SEG108 print_ln::@1
  b1:
  //SEG109 [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda print_line_cursor
    clc
    adc #$28
    sta print_line_cursor
    bcc !+
    inc print_line_cursor+1
  !:
  //SEG110 [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda print_line_cursor+1
    cmp print_char_cursor+1
    bcc b1_from_b1
    bne !+
    lda print_line_cursor
    cmp print_char_cursor
    bcc b1_from_b1
  !:
    jmp breturn
  //SEG111 print_ln::@return
  breturn:
  //SEG112 [47] return 
    rts
}
//SEG113 test_bytes
// Test different byte constants
test_bytes: {
    .const bb = 0
    .const bc = bb+2
    .const bd = bc-4
  //SEG114 [49] call assert_byte 
  //SEG115 [55] phi from test_bytes to assert_byte [phi:test_bytes->assert_byte]
  assert_byte_from_test_bytes:
  //SEG116 [55] phi (byte*) print_line_cursor#50 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:test_bytes->assert_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta print_line_cursor
    lda #>$400
    sta print_line_cursor+1
  //SEG117 [55] phi (byte) assert_byte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_bytes->assert_byte#1] -- vbuz1=vbuc1 
    lda #0
    sta assert_byte.c
  //SEG118 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bb#0 [phi:test_bytes->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bb
  //SEG119 [55] phi (byte*) print_char_cursor#70 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:test_bytes->assert_byte#3] -- pbuz1=pbuc1 
    lda #<$400
    sta print_char_cursor
    lda #>$400
    sta print_char_cursor+1
  //SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_byte.msg
    lda #>msg
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b1
  //SEG121 test_bytes::@1
  b1:
  //SEG122 [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG123 [51] call assert_byte 
  //SEG124 [55] phi from test_bytes::@1 to assert_byte [phi:test_bytes::@1->assert_byte]
  assert_byte_from_b1:
  //SEG125 [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@1->assert_byte#0] -- register_copy 
  //SEG126 [55] phi (byte) assert_byte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_bytes::@1->assert_byte#1] -- vbuz1=vbuc1 
    lda #2
    sta assert_byte.c
  //SEG127 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bc
  //SEG128 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy 
  //SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_byte.msg
    lda #>msg1
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b2
  //SEG130 test_bytes::@2
  b2:
  //SEG131 [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG132 [53] call assert_byte 
  //SEG133 [55] phi from test_bytes::@2 to assert_byte [phi:test_bytes::@2->assert_byte]
  assert_byte_from_b2:
  //SEG134 [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@2->assert_byte#0] -- register_copy 
  //SEG135 [55] phi (byte) assert_byte::c#3 = (byte/word/signed word/dword/signed dword) 254 [phi:test_bytes::@2->assert_byte#1] -- vbuz1=vbuc1 
    lda #$fe
    sta assert_byte.c
  //SEG136 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bd
  //SEG137 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#94 [phi:test_bytes::@2->assert_byte#3] -- register_copy 
  //SEG138 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_byte.msg
    lda #>msg2
    sta assert_byte.msg+1
    jsr assert_byte
    jmp breturn
  //SEG139 test_bytes::@return
  breturn:
  //SEG140 [54] return 
    rts
    msg2: .text "0+2-4=254@"
}
//SEG141 assert_byte
// assert_byte(byte* zeropage(2) msg, byte register(X) b, byte zeropage(4) c)
assert_byte: {
    .label msg = 2
    .label c = 4
  //SEG142 [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
  //SEG143 [57] call print_str 
  //SEG144 [36] phi from assert_byte to print_str [phi:assert_byte->print_str]
  print_str_from_assert_byte:
  //SEG145 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#70 [phi:assert_byte->print_str#0] -- register_copy 
  //SEG146 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy 
    jsr print_str
  //SEG147 [58] phi from assert_byte to assert_byte::@5 [phi:assert_byte->assert_byte::@5]
  b5_from_assert_byte:
    jmp b5
  //SEG148 assert_byte::@5
  b5:
  //SEG149 [59] call print_str 
  //SEG150 [36] phi from assert_byte::@5 to print_str [phi:assert_byte::@5->print_str]
  print_str_from_b5:
  //SEG151 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@5->print_str#0] -- register_copy 
  //SEG152 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b6
  //SEG153 assert_byte::@6
  b6:
  //SEG154 [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 -- vbuxx_neq_vbuz1_then_la1 
    cpx c
    bne b1
  //SEG155 [61] phi from assert_byte::@6 to assert_byte::@3 [phi:assert_byte::@6->assert_byte::@3]
  b3_from_b6:
    jmp b3
  //SEG156 assert_byte::@3
  b3:
  //SEG157 [62] call print_str 
  //SEG158 [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
  print_str_from_b3:
  //SEG159 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy 
  //SEG160 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
  //SEG161 [63] phi from assert_byte::@1 assert_byte::@3 to assert_byte::@2 [phi:assert_byte::@1/assert_byte::@3->assert_byte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
  //SEG162 assert_byte::@2
  b2:
  //SEG163 [64] call print_ln 
  //SEG164 [43] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln]
  print_ln_from_b2:
  //SEG165 [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#50 [phi:assert_byte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
  //SEG166 assert_byte::@return
  breturn:
  //SEG167 [65] return 
    rts
  //SEG168 assert_byte::@1
  b1:
  //SEG169 [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
  //SEG170 [67] call print_str 
  //SEG171 [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
  print_str_from_b1:
  //SEG172 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy 
  //SEG173 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
//SEG174 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = 2
  //SEG175 [69] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG176 [69] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta sc
    lda #>$400
    sta sc+1
    jmp b1
  //SEG177 [69] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG178 [69] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG179 print_cls::@1
  b1:
  //SEG180 [70] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG181 [71] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG182 [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>$400+$3e8
    bne b1_from_b1
    lda sc
    cmp #<$400+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG183 print_cls::@return
  breturn:
  //SEG184 [73] return 
    rts
}
  str: .text " @"
  str2: .text "ok@"
  msg1: .text "0+2=2@"
  msg: .text "0=0@"
  str1: .text "fail!@"

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b24
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b2_from_b1 with b2
Replacing label b1_from_b2 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b1 with b2
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction b24_from_bbegin:
Removing instruction b24:
Removing instruction main_from_b24:
Removing instruction bend_from_b24:
Removing instruction b2_from_b1:
Removing instruction test_sbytes_from_b2:
Removing instruction b1_from_test_sbytes:
Removing instruction assert_sbyte_from_b1:
Removing instruction b2_from_b1:
Removing instruction assert_sbyte_from_b2:
Removing instruction b3_from_b2:
Removing instruction assert_sbyte_from_b3:
Removing instruction b4_from_b3:
Removing instruction assert_sbyte_from_b4:
Removing instruction b5_from_assert_sbyte:
Removing instruction print_str_from_b5:
Removing instruction b3_from_b6:
Removing instruction print_str_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b3:
Removing instruction print_ln_from_b2:
Removing instruction b1_from_print_str:
Removing instruction b1_from_b2:
Removing instruction b1_from_print_ln:
Removing instruction b1_from_b1:
Removing instruction b5_from_assert_byte:
Removing instruction print_str_from_b5:
Removing instruction b3_from_b6:
Removing instruction print_str_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b3:
Removing instruction print_ln_from_b2:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
Removing instruction test_bytes_from_b1:
Removing instruction b2:
Removing instruction breturn:
Removing instruction assert_sbyte_from_test_sbytes:
Removing instruction b1:
Removing instruction b2:
Removing instruction b3:
Removing instruction b4:
Removing instruction breturn:
Removing instruction print_str_from_assert_sbyte:
Removing instruction b5:
Removing instruction b6:
Removing instruction b3:
Removing instruction breturn:
Removing instruction print_str_from_b1:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction assert_byte_from_test_bytes:
Removing instruction b1:
Removing instruction assert_byte_from_b1:
Removing instruction b2:
Removing instruction assert_byte_from_b2:
Removing instruction breturn:
Removing instruction print_str_from_assert_byte:
Removing instruction b5:
Removing instruction b6:
Removing instruction b3:
Removing instruction breturn:
Removing instruction print_str_from_b1:
Removing instruction b1_from_print_cls:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @24
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) RED
(const byte) RED#0 RED = (byte/signed byte/word/signed word/dword/signed dword) 2
(void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c)
(label) assert_byte::@1
(label) assert_byte::@2
(label) assert_byte::@3
(label) assert_byte::@5
(label) assert_byte::@6
(label) assert_byte::@return
(byte) assert_byte::b
(byte) assert_byte::b#3 reg byte x 0.4
(byte) assert_byte::c
(byte) assert_byte::c#3 c zp ZP_BYTE:4 0.4
(byte*) assert_byte::msg
(byte*) assert_byte::msg#3 msg zp ZP_WORD:2 2.0
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(label) assert_sbyte::@1
(label) assert_sbyte::@2
(label) assert_sbyte::@3
(label) assert_sbyte::@5
(label) assert_sbyte::@6
(label) assert_sbyte::@return
(signed byte) assert_sbyte::b
(signed byte) assert_sbyte::b#5 reg byte x 0.3333333333333333
(signed byte) assert_sbyte::c
(signed byte) assert_sbyte::c#5 c zp ZP_BYTE:4 0.3333333333333333
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#5 msg zp ZP_WORD:2 2.0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return
(const string) msg msg = (string) "0=0@"
(const string) msg1 msg1 = (string) "0+2=2@"
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:5 11.0
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:5 2.230769230769231
(byte*) print_char_cursor#70 print_char_cursor zp ZP_WORD:5 3.0
(byte*) print_char_cursor#80 print_char_cursor zp ZP_WORD:5 18.0
(byte*~) print_char_cursor#87 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#93 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#94 print_char_cursor zp ZP_WORD:5 4.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:7 1.2500000000000002
(byte*) print_line_cursor#24 print_line_cursor zp ZP_WORD:7 24.0
(byte*) print_line_cursor#47 print_line_cursor zp ZP_WORD:7 6.0
(byte*) print_line_cursor#50 print_line_cursor zp ZP_WORD:7 0.5454545454545454
(void()) print_ln()
(label) print_ln::@1
(label) print_ln::@return
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(label) print_str::@1
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0 str zp ZP_WORD:2 22.0
(byte*) print_str::str#1 str zp ZP_WORD:2 4.0
(byte*) print_str::str#10 str zp ZP_WORD:2 11.5
(byte*) print_str::str#11 str zp ZP_WORD:2 6.0
(byte*) print_str::str#5 str zp ZP_WORD:2 2.0
(const string) str str = (string) " @"
(const string) str1 str1 = (string) "fail!@"
(const string) str2 str2 = (string) "ok@"
(void()) test_bytes()
(label) test_bytes::@1
(label) test_bytes::@2
(label) test_bytes::@return
(byte) test_bytes::bb
(const byte) test_bytes::bb#0 bb = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) test_bytes::bc
(const byte) test_bytes::bc#0 bc = (const byte) test_bytes::bb#0+(byte/signed byte/word/signed word/dword/signed dword) 2
(byte) test_bytes::bd
(const byte) test_bytes::bd#0 bd = ((byte))((signed byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4
(const string) test_bytes::msg2 msg2 = (string) "0+2-4=254@"
(void()) test_sbytes()
(label) test_sbytes::@1
(label) test_sbytes::@2
(label) test_sbytes::@3
(label) test_sbytes::@4
(label) test_sbytes::@return
(signed byte) test_sbytes::bb
(const signed byte) test_sbytes::bb#0 bb = (byte/signed byte/word/signed word/dword/signed dword) 0
(signed byte) test_sbytes::bc
(const signed byte) test_sbytes::bc#0 bc = (const signed byte) test_sbytes::bb#0+(byte/signed byte/word/signed word/dword/signed dword) 2
(signed byte) test_sbytes::bd
(const signed byte) test_sbytes::bd#0 bd = (const signed byte) test_sbytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4
(signed byte) test_sbytes::be
(const signed byte) test_sbytes::be#0 be = -(const signed byte) test_sbytes::bd#0
(signed byte) test_sbytes::bf
(const signed byte) test_sbytes::bf#0 bf = ((signed byte))-(byte/signed byte/word/signed word/dword/signed dword) 127-(byte/signed byte/word/signed word/dword/signed dword) 127
(const string) test_sbytes::msg2 msg2 = (string) "0+2-4=-2@"
(const string) test_sbytes::msg3 msg3 = (string) "-(0+2-4)=2@"
(const string) test_sbytes::msg4 msg4 = (string) "-127-127=2@"

zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 print_cls::sc#2 print_cls::sc#1 ]
reg byte x [ assert_sbyte::b#5 ]
zp ZP_BYTE:4 [ assert_sbyte::c#5 assert_byte::c#3 ]
zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
zp ZP_WORD:7 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
reg byte x [ assert_byte::b#3 ]


FINAL ASSEMBLER
Score: 1840

//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label BGCOL = $d021
  .const GREEN = 5
  .const RED = 2
  .label print_char_cursor = 5
  .label print_line_cursor = 7
//SEG3 @begin
//SEG4 [1] phi from @begin to @24 [phi:@begin->@24]
//SEG5 @24
//SEG6 [2] call main 
//SEG7 [4] phi from @24 to main [phi:@24->main]
//SEG8 [3] phi from @24 to @end [phi:@24->@end]
//SEG9 @end
//SEG10 main
main: {
  //SEG11 [5] call print_cls 
  //SEG12 [68] phi from main to print_cls [phi:main->print_cls]
    jsr print_cls
  //SEG13 main::@1
  //SEG14 [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 -- _deref_pbuc1=vbuc2 
    lda #GREEN
    sta BGCOL
  //SEG15 [7] call test_bytes 
  //SEG16 [48] phi from main::@1 to test_bytes [phi:main::@1->test_bytes]
    jsr test_bytes
  //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  //SEG18 main::@2
  //SEG19 [9] call test_sbytes 
  //SEG20 [11] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes]
    jsr test_sbytes
  //SEG21 main::@return
  //SEG22 [10] return 
    rts
}
//SEG23 test_sbytes
// Test different signed byte constants
test_sbytes: {
    .const bb = 0
    .const bc = bb+2
    .const bd = bc-4
    .const bf = $ff&-$7f-$7f
    .const be = -bd
  //SEG24 [12] call assert_sbyte 
  //SEG25 [22] phi from test_sbytes to assert_sbyte [phi:test_sbytes->assert_sbyte]
  //SEG26 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_sbytes->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #0
    sta assert_sbyte.c
  //SEG27 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bb
  //SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_sbyte.msg
    lda #>msg
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG29 [13] phi from test_sbytes to test_sbytes::@1 [phi:test_sbytes->test_sbytes::@1]
  //SEG30 test_sbytes::@1
  //SEG31 [14] call assert_sbyte 
  //SEG32 [22] phi from test_sbytes::@1 to assert_sbyte [phi:test_sbytes::@1->assert_sbyte]
  //SEG33 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@1->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG34 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bc
  //SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_sbyte.msg
    lda #>msg1
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG36 [15] phi from test_sbytes::@1 to test_sbytes::@2 [phi:test_sbytes::@1->test_sbytes::@2]
  //SEG37 test_sbytes::@2
  //SEG38 [16] call assert_sbyte 
  //SEG39 [22] phi from test_sbytes::@2 to assert_sbyte [phi:test_sbytes::@2->assert_sbyte]
  //SEG40 [22] phi (signed byte) assert_sbyte::c#5 = -(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@2->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #-2
    sta assert_sbyte.c
  //SEG41 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bd
  //SEG42 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_sbyte.msg
    lda #>msg2
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG43 [17] phi from test_sbytes::@2 to test_sbytes::@3 [phi:test_sbytes::@2->test_sbytes::@3]
  //SEG44 test_sbytes::@3
  //SEG45 [18] call assert_sbyte 
  //SEG46 [22] phi from test_sbytes::@3 to assert_sbyte [phi:test_sbytes::@3->assert_sbyte]
  //SEG47 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@3->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG48 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #be
  //SEG49 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg3
    sta assert_sbyte.msg
    lda #>msg3
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG50 [19] phi from test_sbytes::@3 to test_sbytes::@4 [phi:test_sbytes::@3->test_sbytes::@4]
  //SEG51 test_sbytes::@4
  //SEG52 [20] call assert_sbyte 
  //SEG53 [22] phi from test_sbytes::@4 to assert_sbyte [phi:test_sbytes::@4->assert_sbyte]
  //SEG54 [22] phi (signed byte) assert_sbyte::c#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_sbytes::@4->assert_sbyte#0] -- vbsz1=vbuc1 
    lda #2
    sta assert_sbyte.c
  //SEG55 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bf
  //SEG56 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg4
    sta assert_sbyte.msg
    lda #>msg4
    sta assert_sbyte.msg+1
    jsr assert_sbyte
  //SEG57 test_sbytes::@return
  //SEG58 [21] return 
    rts
    msg2: .text "0+2-4=-2@"
    msg3: .text "-(0+2-4)=2@"
    msg4: .text "-127-127=2@"
}
//SEG59 assert_sbyte
// assert_sbyte(byte* zeropage(2) msg, signed byte register(X) b, signed byte zeropage(4) c)
assert_sbyte: {
    .label msg = 2
    .label c = 4
  //SEG60 [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
  //SEG61 [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG62 [25] call print_str 
  //SEG63 [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
  //SEG64 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#87 [phi:assert_sbyte->print_str#0] -- register_copy 
  //SEG65 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy 
    jsr print_str
  //SEG66 [26] phi from assert_sbyte to assert_sbyte::@5 [phi:assert_sbyte->assert_sbyte::@5]
  //SEG67 assert_sbyte::@5
  //SEG68 [27] call print_str 
  //SEG69 [36] phi from assert_sbyte::@5 to print_str [phi:assert_sbyte::@5->print_str]
  //SEG70 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@5->print_str#0] -- register_copy 
  //SEG71 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
  //SEG72 assert_sbyte::@6
  //SEG73 [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 -- vbsxx_neq_vbsz1_then_la1 
    cpx c
    bne b1
  //SEG74 [29] phi from assert_sbyte::@6 to assert_sbyte::@3 [phi:assert_sbyte::@6->assert_sbyte::@3]
  //SEG75 assert_sbyte::@3
  //SEG76 [30] call print_str 
  //SEG77 [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
  //SEG78 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy 
  //SEG79 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
  //SEG80 [31] phi from assert_sbyte::@1 assert_sbyte::@3 to assert_sbyte::@2 [phi:assert_sbyte::@1/assert_sbyte::@3->assert_sbyte::@2]
  //SEG81 assert_sbyte::@2
  b2:
  //SEG82 [32] call print_ln 
  //SEG83 [43] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln]
  //SEG84 [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#1 [phi:assert_sbyte::@2->print_ln#0] -- register_copy 
    jsr print_ln
  //SEG85 assert_sbyte::@return
  //SEG86 [33] return 
    rts
  //SEG87 assert_sbyte::@1
  b1:
  //SEG88 [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
  //SEG89 [35] call print_str 
  //SEG90 [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
  //SEG91 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy 
  //SEG92 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2
}
//SEG93 print_str
// Print a zero-terminated string
// print_str(byte* zeropage(2) str)
print_str: {
    .label str = 2
  //SEG94 [37] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  //SEG95 [37] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#80 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
  //SEG96 [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
  //SEG97 print_str::@1
  b1:
  //SEG98 [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
  //SEG99 print_str::@return
  //SEG100 [39] return 
    rts
  //SEG101 print_str::@2
  b2:
  //SEG102 [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    sta (print_char_cursor),y
  //SEG103 [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
  //SEG104 [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1
}
//SEG105 print_ln
// Print a newline
print_ln: {
  //SEG106 [44] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
  //SEG107 [44] phi (byte*) print_line_cursor#24 = (byte*) print_line_cursor#47 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy 
  //SEG108 print_ln::@1
  b1:
  //SEG109 [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40 -- pbuz1=pbuz1_plus_vbuc1 
    lda print_line_cursor
    clc
    adc #$28
    sta print_line_cursor
    bcc !+
    inc print_line_cursor+1
  !:
  //SEG110 [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda print_line_cursor+1
    cmp print_char_cursor+1
    bcc b1
    bne !+
    lda print_line_cursor
    cmp print_char_cursor
    bcc b1
  !:
  //SEG111 print_ln::@return
  //SEG112 [47] return 
    rts
}
//SEG113 test_bytes
// Test different byte constants
test_bytes: {
    .const bb = 0
    .const bc = bb+2
    .const bd = bc-4
  //SEG114 [49] call assert_byte 
  //SEG115 [55] phi from test_bytes to assert_byte [phi:test_bytes->assert_byte]
  //SEG116 [55] phi (byte*) print_line_cursor#50 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:test_bytes->assert_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta print_line_cursor
    lda #>$400
    sta print_line_cursor+1
  //SEG117 [55] phi (byte) assert_byte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_bytes->assert_byte#1] -- vbuz1=vbuc1 
    lda #0
    sta assert_byte.c
  //SEG118 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bb#0 [phi:test_bytes->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bb
  //SEG119 [55] phi (byte*) print_char_cursor#70 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:test_bytes->assert_byte#3] -- pbuz1=pbuc1 
    lda #<$400
    sta print_char_cursor
    lda #>$400
    sta print_char_cursor+1
  //SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_byte.msg
    lda #>msg
    sta assert_byte.msg+1
    jsr assert_byte
  //SEG121 test_bytes::@1
  //SEG122 [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG123 [51] call assert_byte 
  //SEG124 [55] phi from test_bytes::@1 to assert_byte [phi:test_bytes::@1->assert_byte]
  //SEG125 [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@1->assert_byte#0] -- register_copy 
  //SEG126 [55] phi (byte) assert_byte::c#3 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:test_bytes::@1->assert_byte#1] -- vbuz1=vbuc1 
    lda #2
    sta assert_byte.c
  //SEG127 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bc
  //SEG128 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy 
  //SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_byte.msg
    lda #>msg1
    sta assert_byte.msg+1
    jsr assert_byte
  //SEG130 test_bytes::@2
  //SEG131 [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
  //SEG132 [53] call assert_byte 
  //SEG133 [55] phi from test_bytes::@2 to assert_byte [phi:test_bytes::@2->assert_byte]
  //SEG134 [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@2->assert_byte#0] -- register_copy 
  //SEG135 [55] phi (byte) assert_byte::c#3 = (byte/word/signed word/dword/signed dword) 254 [phi:test_bytes::@2->assert_byte#1] -- vbuz1=vbuc1 
    lda #$fe
    sta assert_byte.c
  //SEG136 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bd
  //SEG137 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#94 [phi:test_bytes::@2->assert_byte#3] -- register_copy 
  //SEG138 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_byte.msg
    lda #>msg2
    sta assert_byte.msg+1
    jsr assert_byte
  //SEG139 test_bytes::@return
  //SEG140 [54] return 
    rts
    msg2: .text "0+2-4=254@"
}
//SEG141 assert_byte
// assert_byte(byte* zeropage(2) msg, byte register(X) b, byte zeropage(4) c)
assert_byte: {
    .label msg = 2
    .label c = 4
  //SEG142 [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
  //SEG143 [57] call print_str 
  //SEG144 [36] phi from assert_byte to print_str [phi:assert_byte->print_str]
  //SEG145 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#70 [phi:assert_byte->print_str#0] -- register_copy 
  //SEG146 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy 
    jsr print_str
  //SEG147 [58] phi from assert_byte to assert_byte::@5 [phi:assert_byte->assert_byte::@5]
  //SEG148 assert_byte::@5
  //SEG149 [59] call print_str 
  //SEG150 [36] phi from assert_byte::@5 to print_str [phi:assert_byte::@5->print_str]
  //SEG151 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@5->print_str#0] -- register_copy 
  //SEG152 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
  //SEG153 assert_byte::@6
  //SEG154 [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 -- vbuxx_neq_vbuz1_then_la1 
    cpx c
    bne b1
  //SEG155 [61] phi from assert_byte::@6 to assert_byte::@3 [phi:assert_byte::@6->assert_byte::@3]
  //SEG156 assert_byte::@3
  //SEG157 [62] call print_str 
  //SEG158 [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
  //SEG159 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy 
  //SEG160 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
  //SEG161 [63] phi from assert_byte::@1 assert_byte::@3 to assert_byte::@2 [phi:assert_byte::@1/assert_byte::@3->assert_byte::@2]
  //SEG162 assert_byte::@2
  b2:
  //SEG163 [64] call print_ln 
  //SEG164 [43] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln]
  //SEG165 [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#50 [phi:assert_byte::@2->print_ln#0] -- register_copy 
    jsr print_ln
  //SEG166 assert_byte::@return
  //SEG167 [65] return 
    rts
  //SEG168 assert_byte::@1
  b1:
  //SEG169 [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
  //SEG170 [67] call print_str 
  //SEG171 [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
  //SEG172 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy 
  //SEG173 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2
}
//SEG174 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = 2
  //SEG175 [69] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  //SEG176 [69] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta sc
    lda #>$400
    sta sc+1
  //SEG177 [69] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  //SEG178 [69] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
  //SEG179 print_cls::@1
  b1:
  //SEG180 [70] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG181 [71] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG182 [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>$400+$3e8
    bne b1
    lda sc
    cmp #<$400+$3e8
    bne b1
  //SEG183 print_cls::@return
  //SEG184 [73] return 
    rts
}
  str: .text " @"
  str2: .text "ok@"
  msg1: .text "0+2=2@"
  msg: .text "0=0@"
  str1: .text "fail!@"

