1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00
kickc/src/test/ref/number-conversion.log

3436 lines
156 KiB
Plaintext

Resolved forward reference idx to (byte) idx
Resolved forward reference idx to (byte) idx
Resolved forward reference idx to (byte) idx
Culled Empty Block (label) assertType::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@1
main: scope:[main] from @2
(byte) idx#0 ← (byte) 0
(byte~) main::$0 ← typeid (signed byte) $c+(number) $c
(byte) assertType::t1#0 ← (byte~) main::$0
(byte) assertType::t2#0 ← (const byte) TYPEID_SIGNED_BYTE
call assertType
to:main::@1
main::@1: scope:[main] from main
(byte) idx#43 ← phi( main/(byte) idx#41 )
(byte) idx#1 ← (byte) idx#43
(byte~) main::$2 ← typeid (signed byte) $c+(number) $82
(byte) assertType::t1#1 ← (byte~) main::$2
(byte) assertType::t2#1 ← (const byte) TYPEID_SIGNED_WORD
call assertType
to:main::@2
main::@2: scope:[main] from main::@1
(byte) idx#44 ← phi( main::@1/(byte) idx#41 )
(byte) idx#2 ← (byte) idx#44
(byte~) main::$4 ← typeid (signed byte) $c+(number) $80e8
(byte) assertType::t1#2 ← (byte~) main::$4
(byte) assertType::t2#2 ← (const byte) TYPEID_SIGNED_DWORD
call assertType
to:main::@3
main::@3: scope:[main] from main::@2
(byte) idx#45 ← phi( main::@2/(byte) idx#41 )
(byte) idx#3 ← (byte) idx#45
(byte~) main::$6 ← typeid (signed word) $c+(number) $c
(byte) assertType::t1#3 ← (byte~) main::$6
(byte) assertType::t2#3 ← (const byte) TYPEID_SIGNED_WORD
call assertType
to:main::@4
main::@4: scope:[main] from main::@3
(byte) idx#46 ← phi( main::@3/(byte) idx#41 )
(byte) idx#4 ← (byte) idx#46
(byte~) main::$8 ← typeid (signed word) $c+(number) $82
(byte) assertType::t1#4 ← (byte~) main::$8
(byte) assertType::t2#4 ← (const byte) TYPEID_SIGNED_WORD
call assertType
to:main::@5
main::@5: scope:[main] from main::@4
(byte) idx#47 ← phi( main::@4/(byte) idx#41 )
(byte) idx#5 ← (byte) idx#47
(byte~) main::$10 ← typeid (signed word) $c+(number) $186a0
(byte) assertType::t1#5 ← (byte~) main::$10
(byte) assertType::t2#5 ← (const byte) TYPEID_SIGNED_DWORD
call assertType
to:main::@6
main::@6: scope:[main] from main::@5
(byte) idx#48 ← phi( main::@5/(byte) idx#41 )
(byte) idx#6 ← (byte) idx#48
(byte~) main::$12 ← typeid (signed dword) $c+(number) $c
(byte) assertType::t1#6 ← (byte~) main::$12
(byte) assertType::t2#6 ← (const byte) TYPEID_SIGNED_DWORD
call assertType
to:main::@7
main::@7: scope:[main] from main::@6
(byte) idx#49 ← phi( main::@6/(byte) idx#41 )
(byte) idx#7 ← (byte) idx#49
(byte~) main::$14 ← typeid (signed dword) $c+(number) $82
(byte) assertType::t1#7 ← (byte~) main::$14
(byte) assertType::t2#7 ← (const byte) TYPEID_SIGNED_DWORD
call assertType
to:main::@8
main::@8: scope:[main] from main::@7
(byte) idx#50 ← phi( main::@7/(byte) idx#41 )
(byte) idx#8 ← (byte) idx#50
(byte~) main::$16 ← typeid (signed dword) $c+(number) $186a0
(byte) assertType::t1#8 ← (byte~) main::$16
(byte) assertType::t2#8 ← (const byte) TYPEID_SIGNED_DWORD
call assertType
to:main::@9
main::@9: scope:[main] from main::@8
(byte) idx#51 ← phi( main::@8/(byte) idx#41 )
(byte) idx#9 ← (byte) idx#51
(byte) idx#10 ← (byte) $28
(byte~) main::$18 ← typeid (byte) $c+(number) $c
(byte) assertType::t1#9 ← (byte~) main::$18
(byte) assertType::t2#9 ← (const byte) TYPEID_BYTE
call assertType
to:main::@10
main::@10: scope:[main] from main::@9
(byte) idx#52 ← phi( main::@9/(byte) idx#41 )
(byte) idx#11 ← (byte) idx#52
(byte~) main::$20 ← typeid (byte) $c+(number) $fa
(byte) assertType::t1#10 ← (byte~) main::$20
(byte) assertType::t2#10 ← (const byte) TYPEID_BYTE
call assertType
to:main::@11
main::@11: scope:[main] from main::@10
(byte) idx#53 ← phi( main::@10/(byte) idx#41 )
(byte) idx#12 ← (byte) idx#53
(byte~) main::$22 ← typeid (byte) $c+(number) $12c
(byte) assertType::t1#11 ← (byte~) main::$22
(byte) assertType::t2#11 ← (const byte) TYPEID_WORD
call assertType
to:main::@12
main::@12: scope:[main] from main::@11
(byte) idx#54 ← phi( main::@11/(byte) idx#41 )
(byte) idx#13 ← (byte) idx#54
(byte~) main::$24 ← typeid (byte) $c+(number) $fffe
(byte) assertType::t1#12 ← (byte~) main::$24
(byte) assertType::t2#12 ← (const byte) TYPEID_WORD
call assertType
to:main::@13
main::@13: scope:[main] from main::@12
(byte) idx#55 ← phi( main::@12/(byte) idx#41 )
(byte) idx#14 ← (byte) idx#55
(byte~) main::$26 ← typeid (byte) $c+(number) $101d0
(byte) assertType::t1#13 ← (byte~) main::$26
(byte) assertType::t2#13 ← (const byte) TYPEID_DWORD
call assertType
to:main::@14
main::@14: scope:[main] from main::@13
(byte) idx#56 ← phi( main::@13/(byte) idx#41 )
(byte) idx#15 ← (byte) idx#56
(byte~) main::$28 ← typeid (word) $c+(number) $c
(byte) assertType::t1#14 ← (byte~) main::$28
(byte) assertType::t2#14 ← (const byte) TYPEID_WORD
call assertType
to:main::@15
main::@15: scope:[main] from main::@14
(byte) idx#57 ← phi( main::@14/(byte) idx#41 )
(byte) idx#16 ← (byte) idx#57
(byte~) main::$30 ← typeid (word) $c+(number) $82
(byte) assertType::t1#15 ← (byte~) main::$30
(byte) assertType::t2#15 ← (const byte) TYPEID_WORD
call assertType
to:main::@16
main::@16: scope:[main] from main::@15
(byte) idx#58 ← phi( main::@15/(byte) idx#41 )
(byte) idx#17 ← (byte) idx#58
(byte~) main::$32 ← typeid (word) $c+(number) $101d0
(byte) assertType::t1#16 ← (byte~) main::$32
(byte) assertType::t2#16 ← (const byte) TYPEID_DWORD
call assertType
to:main::@17
main::@17: scope:[main] from main::@16
(byte) idx#59 ← phi( main::@16/(byte) idx#41 )
(byte) idx#18 ← (byte) idx#59
(byte~) main::$34 ← typeid (dword) $c+(number) $c
(byte) assertType::t1#17 ← (byte~) main::$34
(byte) assertType::t2#17 ← (const byte) TYPEID_DWORD
call assertType
to:main::@18
main::@18: scope:[main] from main::@17
(byte) idx#60 ← phi( main::@17/(byte) idx#41 )
(byte) idx#19 ← (byte) idx#60
(byte~) main::$36 ← typeid (dword) $c+(number) $82
(byte) assertType::t1#18 ← (byte~) main::$36
(byte) assertType::t2#18 ← (const byte) TYPEID_DWORD
call assertType
to:main::@19
main::@19: scope:[main] from main::@18
(byte) idx#61 ← phi( main::@18/(byte) idx#41 )
(byte) idx#20 ← (byte) idx#61
(byte~) main::$38 ← typeid (dword) $c+(number) $101d0
(byte) assertType::t1#19 ← (byte~) main::$38
(byte) assertType::t2#19 ← (const byte) TYPEID_DWORD
call assertType
to:main::@20
main::@20: scope:[main] from main::@19
(byte) idx#62 ← phi( main::@19/(byte) idx#41 )
(byte) idx#21 ← (byte) idx#62
(byte~) main::$40 ← typeid (byte) $c+(number) $b2d05e00
(byte) assertType::t1#20 ← (byte~) main::$40
(byte) assertType::t2#20 ← (const byte) TYPEID_DWORD
call assertType
to:main::@21
main::@21: scope:[main] from main::@20
(byte) idx#63 ← phi( main::@20/(byte) idx#41 )
(byte) idx#22 ← (byte) idx#63
(byte) idx#23 ← (byte) $50
(byte~) main::$42 ← typeid (byte) $c+(number) -$c
(byte) assertType::t1#21 ← (byte~) main::$42
(byte) assertType::t2#21 ← (const byte) TYPEID_BYTE
call assertType
to:main::@22
main::@22: scope:[main] from main::@21
(byte) idx#64 ← phi( main::@21/(byte) idx#41 )
(byte) idx#24 ← (byte) idx#64
(byte~) main::$44 ← typeid (byte) $c+(number) -$78
(byte) assertType::t1#22 ← (byte~) main::$44
(byte) assertType::t2#22 ← (const byte) TYPEID_BYTE
call assertType
to:main::@23
main::@23: scope:[main] from main::@22
(byte) idx#65 ← phi( main::@22/(byte) idx#41 )
(byte) idx#25 ← (byte) idx#65
(byte~) main::$46 ← typeid (byte) $c+(number) -$fa
(byte) assertType::t1#23 ← (byte~) main::$46
(byte) assertType::t2#23 ← (const byte) TYPEID_BYTE
call assertType
to:main::@24
main::@24: scope:[main] from main::@23
(byte) idx#66 ← phi( main::@23/(byte) idx#41 )
(byte) idx#26 ← (byte) idx#66
(byte~) main::$48 ← typeid (byte) $c+(number) -$104
(byte) assertType::t1#24 ← (byte~) main::$48
(byte) assertType::t2#24 ← (const byte) TYPEID_WORD
call assertType
to:main::@25
main::@25: scope:[main] from main::@24
(byte) idx#67 ← phi( main::@24/(byte) idx#41 )
(byte) idx#27 ← (byte) idx#67
(byte~) main::$50 ← typeid (byte) $c+(number) -$fde8
(byte) assertType::t1#25 ← (byte~) main::$50
(byte) assertType::t2#25 ← (const byte) TYPEID_WORD
call assertType
to:main::@26
main::@26: scope:[main] from main::@25
(byte) idx#68 ← phi( main::@25/(byte) idx#41 )
(byte) idx#28 ← (byte) idx#68
(byte~) main::$52 ← typeid (byte) $c+(number) -$101d0
(byte) assertType::t1#26 ← (byte~) main::$52
(byte) assertType::t2#26 ← (const byte) TYPEID_DWORD
call assertType
to:main::@27
main::@27: scope:[main] from main::@26
(byte) idx#69 ← phi( main::@26/(byte) idx#41 )
(byte) idx#29 ← (byte) idx#69
(byte~) main::$54 ← typeid (word) $c+(number) -$c
(byte) assertType::t1#27 ← (byte~) main::$54
(byte) assertType::t2#27 ← (const byte) TYPEID_WORD
call assertType
to:main::@28
main::@28: scope:[main] from main::@27
(byte) idx#70 ← phi( main::@27/(byte) idx#41 )
(byte) idx#30 ← (byte) idx#70
(byte~) main::$56 ← typeid (word) $c+(number) -$82
(byte) assertType::t1#28 ← (byte~) main::$56
(byte) assertType::t2#28 ← (const byte) TYPEID_WORD
call assertType
to:main::@29
main::@29: scope:[main] from main::@28
(byte) idx#71 ← phi( main::@28/(byte) idx#41 )
(byte) idx#31 ← (byte) idx#71
(byte~) main::$58 ← typeid (word) $c+(number) -$fde8
(byte) assertType::t1#29 ← (byte~) main::$58
(byte) assertType::t2#29 ← (const byte) TYPEID_WORD
call assertType
to:main::@30
main::@30: scope:[main] from main::@29
(byte) idx#72 ← phi( main::@29/(byte) idx#41 )
(byte) idx#32 ← (byte) idx#72
(byte~) main::$60 ← typeid (word) $c+(number) -$101d0
(byte) assertType::t1#30 ← (byte~) main::$60
(byte) assertType::t2#30 ← (const byte) TYPEID_DWORD
call assertType
to:main::@31
main::@31: scope:[main] from main::@30
(byte) idx#73 ← phi( main::@30/(byte) idx#41 )
(byte) idx#33 ← (byte) idx#73
(byte~) main::$62 ← typeid (dword) $c+(number) -$c
(byte) assertType::t1#31 ← (byte~) main::$62
(byte) assertType::t2#31 ← (const byte) TYPEID_DWORD
call assertType
to:main::@32
main::@32: scope:[main] from main::@31
(byte) idx#74 ← phi( main::@31/(byte) idx#41 )
(byte) idx#34 ← (byte) idx#74
(byte~) main::$64 ← typeid (dword) $c+(number) -$82
(byte) assertType::t1#32 ← (byte~) main::$64
(byte) assertType::t2#32 ← (const byte) TYPEID_DWORD
call assertType
to:main::@33
main::@33: scope:[main] from main::@32
(byte) idx#75 ← phi( main::@32/(byte) idx#41 )
(byte) idx#35 ← (byte) idx#75
(byte~) main::$66 ← typeid (dword) $c+(number) -$101d0
(byte) assertType::t1#33 ← (byte~) main::$66
(byte) assertType::t2#33 ← (const byte) TYPEID_DWORD
call assertType
to:main::@34
main::@34: scope:[main] from main::@33
(byte) idx#76 ← phi( main::@33/(byte) idx#41 )
(byte) idx#36 ← (byte) idx#76
(byte~) main::$68 ← typeid (signed byte) $c+(number) -$7d2b7500
(byte) assertType::t1#34 ← (byte~) main::$68
(byte) assertType::t2#34 ← (const byte) TYPEID_DWORD
call assertType
to:main::@35
main::@35: scope:[main] from main::@34
(byte) idx#77 ← phi( main::@34/(byte) idx#41 )
(byte) idx#37 ← (byte) idx#77
to:main::@return
main::@return: scope:[main] from main::@35
(byte) idx#78 ← phi( main::@35/(byte) idx#37 )
(byte) idx#38 ← (byte) idx#78
return
to:@return
@1: scope:[] from @begin
(byte) RED#0 ← (byte) 2
(byte) GREEN#0 ← (byte) 5
(byte*) SCREEN#0 ← ((byte*)) (word) $400
(byte*) COLS#0 ← ((byte*)) (word) $d800
(byte) idx#39 ← (byte) 0
to:@2
assertType: scope:[assertType] from main main::@1 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@2 main::@20 main::@21 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@28 main::@29 main::@3 main::@30 main::@31 main::@32 main::@33 main::@34 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9
(byte) idx#84 ← phi( main/(byte) idx#0 main::@1/(byte) idx#1 main::@10/(byte) idx#11 main::@11/(byte) idx#12 main::@12/(byte) idx#13 main::@13/(byte) idx#14 main::@14/(byte) idx#15 main::@15/(byte) idx#16 main::@16/(byte) idx#17 main::@17/(byte) idx#18 main::@18/(byte) idx#19 main::@19/(byte) idx#20 main::@2/(byte) idx#2 main::@20/(byte) idx#21 main::@21/(byte) idx#23 main::@22/(byte) idx#24 main::@23/(byte) idx#25 main::@24/(byte) idx#26 main::@25/(byte) idx#27 main::@26/(byte) idx#28 main::@27/(byte) idx#29 main::@28/(byte) idx#30 main::@29/(byte) idx#31 main::@3/(byte) idx#3 main::@30/(byte) idx#32 main::@31/(byte) idx#33 main::@32/(byte) idx#34 main::@33/(byte) idx#35 main::@34/(byte) idx#36 main::@4/(byte) idx#4 main::@5/(byte) idx#5 main::@6/(byte) idx#6 main::@7/(byte) idx#7 main::@8/(byte) idx#8 main::@9/(byte) idx#10 )
(byte) assertType::t2#35 ← phi( main/(byte) assertType::t2#0 main::@1/(byte) assertType::t2#1 main::@10/(byte) assertType::t2#10 main::@11/(byte) assertType::t2#11 main::@12/(byte) assertType::t2#12 main::@13/(byte) assertType::t2#13 main::@14/(byte) assertType::t2#14 main::@15/(byte) assertType::t2#15 main::@16/(byte) assertType::t2#16 main::@17/(byte) assertType::t2#17 main::@18/(byte) assertType::t2#18 main::@19/(byte) assertType::t2#19 main::@2/(byte) assertType::t2#2 main::@20/(byte) assertType::t2#20 main::@21/(byte) assertType::t2#21 main::@22/(byte) assertType::t2#22 main::@23/(byte) assertType::t2#23 main::@24/(byte) assertType::t2#24 main::@25/(byte) assertType::t2#25 main::@26/(byte) assertType::t2#26 main::@27/(byte) assertType::t2#27 main::@28/(byte) assertType::t2#28 main::@29/(byte) assertType::t2#29 main::@3/(byte) assertType::t2#3 main::@30/(byte) assertType::t2#30 main::@31/(byte) assertType::t2#31 main::@32/(byte) assertType::t2#32 main::@33/(byte) assertType::t2#33 main::@34/(byte) assertType::t2#34 main::@4/(byte) assertType::t2#4 main::@5/(byte) assertType::t2#5 main::@6/(byte) assertType::t2#6 main::@7/(byte) assertType::t2#7 main::@8/(byte) assertType::t2#8 main::@9/(byte) assertType::t2#9 )
(byte) assertType::t1#35 ← phi( main/(byte) assertType::t1#0 main::@1/(byte) assertType::t1#1 main::@10/(byte) assertType::t1#10 main::@11/(byte) assertType::t1#11 main::@12/(byte) assertType::t1#12 main::@13/(byte) assertType::t1#13 main::@14/(byte) assertType::t1#14 main::@15/(byte) assertType::t1#15 main::@16/(byte) assertType::t1#16 main::@17/(byte) assertType::t1#17 main::@18/(byte) assertType::t1#18 main::@19/(byte) assertType::t1#19 main::@2/(byte) assertType::t1#2 main::@20/(byte) assertType::t1#20 main::@21/(byte) assertType::t1#21 main::@22/(byte) assertType::t1#22 main::@23/(byte) assertType::t1#23 main::@24/(byte) assertType::t1#24 main::@25/(byte) assertType::t1#25 main::@26/(byte) assertType::t1#26 main::@27/(byte) assertType::t1#27 main::@28/(byte) assertType::t1#28 main::@29/(byte) assertType::t1#29 main::@3/(byte) assertType::t1#3 main::@30/(byte) assertType::t1#30 main::@31/(byte) assertType::t1#31 main::@32/(byte) assertType::t1#32 main::@33/(byte) assertType::t1#33 main::@34/(byte) assertType::t1#34 main::@4/(byte) assertType::t1#4 main::@5/(byte) assertType::t1#5 main::@6/(byte) assertType::t1#6 main::@7/(byte) assertType::t1#7 main::@8/(byte) assertType::t1#8 main::@9/(byte) assertType::t1#9 )
(bool~) assertType::$0 ← (byte) assertType::t1#35 == (byte) assertType::t2#35
if((bool~) assertType::$0) goto assertType::@1
to:assertType::@3
assertType::@1: scope:[assertType] from assertType
(byte) assertType::t1#37 ← phi( assertType/(byte) assertType::t1#35 )
(byte) idx#79 ← phi( assertType/(byte) idx#84 )
*((byte*) COLS#0 + (byte) idx#79) ← (byte) GREEN#0
to:assertType::@2
assertType::@3: scope:[assertType] from assertType
(byte) assertType::t1#38 ← phi( assertType/(byte) assertType::t1#35 )
(byte) idx#80 ← phi( assertType/(byte) idx#84 )
*((byte*) COLS#0 + (byte) idx#80) ← (byte) RED#0
to:assertType::@2
assertType::@2: scope:[assertType] from assertType::@1 assertType::@3
(byte) idx#81 ← phi( assertType::@1/(byte) idx#79 assertType::@3/(byte) idx#80 )
(byte) assertType::t1#36 ← phi( assertType::@1/(byte) assertType::t1#37 assertType::@3/(byte) assertType::t1#38 )
*((byte*) SCREEN#0 + (byte) idx#81) ← (byte) assertType::t1#36
(byte) idx#40 ← ++ (byte) idx#81
to:assertType::@return
assertType::@return: scope:[assertType] from assertType::@2
(byte) idx#82 ← phi( assertType::@2/(byte) idx#40 )
(byte) idx#41 ← (byte) idx#82
return
to:@return
@2: scope:[] from @1
(byte) idx#85 ← phi( @1/(byte) idx#39 )
call main
to:@3
@3: scope:[] from @2
(byte) idx#83 ← phi( @2/(byte) idx#38 )
(byte) idx#42 ← (byte) idx#83
to:@end
@end: scope:[] from @3
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(byte*) COLS
(byte*) COLS#0
(byte) GREEN
(byte) GREEN#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(const byte) TYPEID_BYTE = (number) 1
(const byte) TYPEID_DWORD = (number) 5
(const byte) TYPEID_SIGNED_BYTE = (number) 2
(const byte) TYPEID_SIGNED_DWORD = (number) 6
(const byte) TYPEID_SIGNED_WORD = (number) 4
(const byte) TYPEID_WORD = (number) 3
(void()) assertType((byte) assertType::t1 , (byte) assertType::t2)
(bool~) assertType::$0
(label) assertType::@1
(label) assertType::@2
(label) assertType::@3
(label) assertType::@return
(byte) assertType::t1
(byte) assertType::t1#0
(byte) assertType::t1#1
(byte) assertType::t1#10
(byte) assertType::t1#11
(byte) assertType::t1#12
(byte) assertType::t1#13
(byte) assertType::t1#14
(byte) assertType::t1#15
(byte) assertType::t1#16
(byte) assertType::t1#17
(byte) assertType::t1#18
(byte) assertType::t1#19
(byte) assertType::t1#2
(byte) assertType::t1#20
(byte) assertType::t1#21
(byte) assertType::t1#22
(byte) assertType::t1#23
(byte) assertType::t1#24
(byte) assertType::t1#25
(byte) assertType::t1#26
(byte) assertType::t1#27
(byte) assertType::t1#28
(byte) assertType::t1#29
(byte) assertType::t1#3
(byte) assertType::t1#30
(byte) assertType::t1#31
(byte) assertType::t1#32
(byte) assertType::t1#33
(byte) assertType::t1#34
(byte) assertType::t1#35
(byte) assertType::t1#36
(byte) assertType::t1#37
(byte) assertType::t1#38
(byte) assertType::t1#4
(byte) assertType::t1#5
(byte) assertType::t1#6
(byte) assertType::t1#7
(byte) assertType::t1#8
(byte) assertType::t1#9
(byte) assertType::t2
(byte) assertType::t2#0
(byte) assertType::t2#1
(byte) assertType::t2#10
(byte) assertType::t2#11
(byte) assertType::t2#12
(byte) assertType::t2#13
(byte) assertType::t2#14
(byte) assertType::t2#15
(byte) assertType::t2#16
(byte) assertType::t2#17
(byte) assertType::t2#18
(byte) assertType::t2#19
(byte) assertType::t2#2
(byte) assertType::t2#20
(byte) assertType::t2#21
(byte) assertType::t2#22
(byte) assertType::t2#23
(byte) assertType::t2#24
(byte) assertType::t2#25
(byte) assertType::t2#26
(byte) assertType::t2#27
(byte) assertType::t2#28
(byte) assertType::t2#29
(byte) assertType::t2#3
(byte) assertType::t2#30
(byte) assertType::t2#31
(byte) assertType::t2#32
(byte) assertType::t2#33
(byte) assertType::t2#34
(byte) assertType::t2#35
(byte) assertType::t2#4
(byte) assertType::t2#5
(byte) assertType::t2#6
(byte) assertType::t2#7
(byte) assertType::t2#8
(byte) assertType::t2#9
(byte) idx
(byte) idx#0
(byte) idx#1
(byte) idx#10
(byte) idx#11
(byte) idx#12
(byte) idx#13
(byte) idx#14
(byte) idx#15
(byte) idx#16
(byte) idx#17
(byte) idx#18
(byte) idx#19
(byte) idx#2
(byte) idx#20
(byte) idx#21
(byte) idx#22
(byte) idx#23
(byte) idx#24
(byte) idx#25
(byte) idx#26
(byte) idx#27
(byte) idx#28
(byte) idx#29
(byte) idx#3
(byte) idx#30
(byte) idx#31
(byte) idx#32
(byte) idx#33
(byte) idx#34
(byte) idx#35
(byte) idx#36
(byte) idx#37
(byte) idx#38
(byte) idx#39
(byte) idx#4
(byte) idx#40
(byte) idx#41
(byte) idx#42
(byte) idx#43
(byte) idx#44
(byte) idx#45
(byte) idx#46
(byte) idx#47
(byte) idx#48
(byte) idx#49
(byte) idx#5
(byte) idx#50
(byte) idx#51
(byte) idx#52
(byte) idx#53
(byte) idx#54
(byte) idx#55
(byte) idx#56
(byte) idx#57
(byte) idx#58
(byte) idx#59
(byte) idx#6
(byte) idx#60
(byte) idx#61
(byte) idx#62
(byte) idx#63
(byte) idx#64
(byte) idx#65
(byte) idx#66
(byte) idx#67
(byte) idx#68
(byte) idx#69
(byte) idx#7
(byte) idx#70
(byte) idx#71
(byte) idx#72
(byte) idx#73
(byte) idx#74
(byte) idx#75
(byte) idx#76
(byte) idx#77
(byte) idx#78
(byte) idx#79
(byte) idx#8
(byte) idx#80
(byte) idx#81
(byte) idx#82
(byte) idx#83
(byte) idx#84
(byte) idx#85
(byte) idx#9
(void()) main()
(byte~) main::$0
(byte~) main::$10
(byte~) main::$12
(byte~) main::$14
(byte~) main::$16
(byte~) main::$18
(byte~) main::$2
(byte~) main::$20
(byte~) main::$22
(byte~) main::$24
(byte~) main::$26
(byte~) main::$28
(byte~) main::$30
(byte~) main::$32
(byte~) main::$34
(byte~) main::$36
(byte~) main::$38
(byte~) main::$4
(byte~) main::$40
(byte~) main::$42
(byte~) main::$44
(byte~) main::$46
(byte~) main::$48
(byte~) main::$50
(byte~) main::$52
(byte~) main::$54
(byte~) main::$56
(byte~) main::$58
(byte~) main::$6
(byte~) main::$60
(byte~) main::$62
(byte~) main::$64
(byte~) main::$66
(byte~) main::$68
(byte~) main::$8
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@18
(label) main::@19
(label) main::@2
(label) main::@20
(label) main::@21
(label) main::@22
(label) main::@23
(label) main::@24
(label) main::@25
(label) main::@26
(label) main::@27
(label) main::@28
(label) main::@29
(label) main::@3
(label) main::@30
(label) main::@31
(label) main::@32
(label) main::@33
(label) main::@34
(label) main::@35
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
Adding number conversion cast (snumber) $c in (byte~) main::$0 ← typeid (signed byte) $c+(number) $c
Adding number conversion cast (snumber) $82 in (byte~) main::$2 ← typeid (signed byte) $c+(number) $82
Adding number conversion cast (snumber) $80e8 in (byte~) main::$4 ← typeid (signed byte) $c+(number) $80e8
Adding number conversion cast (snumber) $c in (byte~) main::$6 ← typeid (signed word) $c+(number) $c
Adding number conversion cast (snumber) $82 in (byte~) main::$8 ← typeid (signed word) $c+(number) $82
Adding number conversion cast (snumber) $186a0 in (byte~) main::$10 ← typeid (signed word) $c+(number) $186a0
Adding number conversion cast (snumber) $c in (byte~) main::$12 ← typeid (signed dword) $c+(number) $c
Adding number conversion cast (snumber) $82 in (byte~) main::$14 ← typeid (signed dword) $c+(number) $82
Adding number conversion cast (snumber) $186a0 in (byte~) main::$16 ← typeid (signed dword) $c+(number) $186a0
Adding number conversion cast (unumber) $c in (byte~) main::$18 ← typeid (byte) $c+(number) $c
Adding number conversion cast (unumber) $fa in (byte~) main::$20 ← typeid (byte) $c+(number) $fa
Adding number conversion cast (unumber) $12c in (byte~) main::$22 ← typeid (byte) $c+(number) $12c
Adding number conversion cast (unumber) $fffe in (byte~) main::$24 ← typeid (byte) $c+(number) $fffe
Adding number conversion cast (unumber) $101d0 in (byte~) main::$26 ← typeid (byte) $c+(number) $101d0
Adding number conversion cast (unumber) $c in (byte~) main::$28 ← typeid (word) $c+(number) $c
Adding number conversion cast (unumber) $82 in (byte~) main::$30 ← typeid (word) $c+(number) $82
Adding number conversion cast (unumber) $101d0 in (byte~) main::$32 ← typeid (word) $c+(number) $101d0
Adding number conversion cast (unumber) $c in (byte~) main::$34 ← typeid (dword) $c+(number) $c
Adding number conversion cast (unumber) $82 in (byte~) main::$36 ← typeid (dword) $c+(number) $82
Adding number conversion cast (unumber) $101d0 in (byte~) main::$38 ← typeid (dword) $c+(number) $101d0
Adding number conversion cast (unumber) $b2d05e00 in (byte~) main::$40 ← typeid (byte) $c+(number) $b2d05e00
Adding number conversion cast (unumber) -$c in (byte~) main::$42 ← typeid (byte) $c+(number) -$c
Adding number conversion cast (unumber) -$78 in (byte~) main::$44 ← typeid (byte) $c+(number) -$78
Adding number conversion cast (unumber) -$fa in (byte~) main::$46 ← typeid (byte) $c+(number) -$fa
Adding number conversion cast (unumber) -$104 in (byte~) main::$48 ← typeid (byte) $c+(number) -$104
Adding number conversion cast (unumber) -$fde8 in (byte~) main::$50 ← typeid (byte) $c+(number) -$fde8
Adding number conversion cast (unumber) -$101d0 in (byte~) main::$52 ← typeid (byte) $c+(number) -$101d0
Adding number conversion cast (unumber) -$c in (byte~) main::$54 ← typeid (word) $c+(number) -$c
Adding number conversion cast (unumber) -$82 in (byte~) main::$56 ← typeid (word) $c+(number) -$82
Adding number conversion cast (unumber) -$fde8 in (byte~) main::$58 ← typeid (word) $c+(number) -$fde8
Adding number conversion cast (unumber) -$101d0 in (byte~) main::$60 ← typeid (word) $c+(number) -$101d0
Adding number conversion cast (unumber) -$c in (byte~) main::$62 ← typeid (dword) $c+(number) -$c
Adding number conversion cast (unumber) -$82 in (byte~) main::$64 ← typeid (dword) $c+(number) -$82
Adding number conversion cast (unumber) -$101d0 in (byte~) main::$66 ← typeid (dword) $c+(number) -$101d0
Adding number conversion cast (snumber) -$7d2b7500 in (byte~) main::$68 ← typeid (signed byte) $c+(number) -$7d2b7500
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) SCREEN#0 ← (byte*)(word) $400
Inlining cast (byte*) COLS#0 ← (byte*)(word) $d800
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast $c
Simplifying constant integer cast $82
Simplifying constant integer cast $80e8
Simplifying constant integer cast $c
Simplifying constant integer cast $82
Simplifying constant integer cast $186a0
Simplifying constant integer cast $c
Simplifying constant integer cast $82
Simplifying constant integer cast $186a0
Simplifying constant integer cast $c
Simplifying constant integer cast $fa
Simplifying constant integer cast $12c
Simplifying constant integer cast $fffe
Simplifying constant integer cast $101d0
Simplifying constant integer cast $c
Simplifying constant integer cast $82
Simplifying constant integer cast $101d0
Simplifying constant integer cast $c
Simplifying constant integer cast $82
Simplifying constant integer cast $101d0
Simplifying constant integer cast $b2d05e00
Simplifying constant integer cast -$c
Simplifying constant integer cast -$78
Simplifying constant integer cast -$fa
Simplifying constant integer cast -$104
Simplifying constant integer cast -$fde8
Simplifying constant integer cast -$101d0
Simplifying constant integer cast -$c
Simplifying constant integer cast -$82
Simplifying constant integer cast -$fde8
Simplifying constant integer cast -$101d0
Simplifying constant integer cast -$c
Simplifying constant integer cast -$82
Simplifying constant integer cast -$101d0
Simplifying constant integer cast -$7d2b7500
Successful SSA optimization PassNCastSimplification
Finalized signed number type (signed byte) $c
Finalized signed number type (signed word) $82
Finalized signed number type (signed dword) $80e8
Finalized signed number type (signed byte) $c
Finalized signed number type (signed word) $82
Finalized signed number type (signed dword) $186a0
Finalized signed number type (signed byte) $c
Finalized signed number type (signed word) $82
Finalized signed number type (signed dword) $186a0
Finalized unsigned number type (byte) $c
Finalized unsigned number type (byte) $fa
Finalized unsigned number type (word) $12c
Finalized unsigned number type (word) $fffe
Finalized unsigned number type (dword) $101d0
Finalized unsigned number type (byte) $c
Finalized unsigned number type (byte) $82
Finalized unsigned number type (dword) $101d0
Finalized unsigned number type (byte) $c
Finalized unsigned number type (byte) $82
Finalized unsigned number type (dword) $101d0
Finalized unsigned number type (dword) $b2d05e00
Finalized unsigned number type (byte) -$c
Finalized unsigned number type (byte) -$78
Finalized unsigned number type (byte) -$fa
Finalized unsigned number type (word) -$104
Finalized unsigned number type (word) -$fde8
Finalized unsigned number type (dword) -$101d0
Finalized unsigned number type (byte) -$c
Finalized unsigned number type (byte) -$82
Finalized unsigned number type (word) -$fde8
Finalized unsigned number type (dword) -$101d0
Finalized unsigned number type (byte) -$c
Finalized unsigned number type (byte) -$82
Finalized unsigned number type (dword) -$101d0
Finalized signed number type (signed dword) -$7d2b7500
Successful SSA optimization PassNFinalizeNumberTypeConversions
Resolving typeid() (byte~) main::$0 ← typeid (signed byte) $c+(signed byte) $c
Resolving typeid() (byte~) main::$2 ← typeid (signed byte) $c+(signed word) $82
Resolving typeid() (byte~) main::$4 ← typeid (signed byte) $c+(signed dword) $80e8
Resolving typeid() (byte~) main::$6 ← typeid (signed word) $c+(signed byte) $c
Resolving typeid() (byte~) main::$8 ← typeid (signed word) $c+(signed word) $82
Resolving typeid() (byte~) main::$10 ← typeid (signed word) $c+(signed dword) $186a0
Resolving typeid() (byte~) main::$12 ← typeid (signed dword) $c+(signed byte) $c
Resolving typeid() (byte~) main::$14 ← typeid (signed dword) $c+(signed word) $82
Resolving typeid() (byte~) main::$16 ← typeid (signed dword) $c+(signed dword) $186a0
Resolving typeid() (byte~) main::$18 ← typeid (byte) $c+(byte) $c
Resolving typeid() (byte~) main::$20 ← typeid (byte) $c+(byte) $fa
Resolving typeid() (byte~) main::$22 ← typeid (byte) $c+(word) $12c
Resolving typeid() (byte~) main::$24 ← typeid (byte) $c+(word) $fffe
Resolving typeid() (byte~) main::$26 ← typeid (byte) $c+(dword) $101d0
Resolving typeid() (byte~) main::$28 ← typeid (word) $c+(byte) $c
Resolving typeid() (byte~) main::$30 ← typeid (word) $c+(byte) $82
Resolving typeid() (byte~) main::$32 ← typeid (word) $c+(dword) $101d0
Resolving typeid() (byte~) main::$34 ← typeid (dword) $c+(byte) $c
Resolving typeid() (byte~) main::$36 ← typeid (dword) $c+(byte) $82
Resolving typeid() (byte~) main::$38 ← typeid (dword) $c+(dword) $101d0
Resolving typeid() (byte~) main::$40 ← typeid (byte) $c+(dword) $b2d05e00
Resolving typeid() (byte~) main::$42 ← typeid (byte) $c+(byte) -$c
Resolving typeid() (byte~) main::$44 ← typeid (byte) $c+(byte) -$78
Resolving typeid() (byte~) main::$46 ← typeid (byte) $c+(byte) -$fa
Resolving typeid() (byte~) main::$48 ← typeid (byte) $c+(word) -$104
Resolving typeid() (byte~) main::$50 ← typeid (byte) $c+(word) -$fde8
Resolving typeid() (byte~) main::$52 ← typeid (byte) $c+(dword) -$101d0
Resolving typeid() (byte~) main::$54 ← typeid (word) $c+(byte) -$c
Resolving typeid() (byte~) main::$56 ← typeid (word) $c+(byte) -$82
Resolving typeid() (byte~) main::$58 ← typeid (word) $c+(word) -$fde8
Resolving typeid() (byte~) main::$60 ← typeid (word) $c+(dword) -$101d0
Resolving typeid() (byte~) main::$62 ← typeid (dword) $c+(byte) -$c
Resolving typeid() (byte~) main::$64 ← typeid (dword) $c+(byte) -$82
Resolving typeid() (byte~) main::$66 ← typeid (dword) $c+(dword) -$101d0
Resolving typeid() (byte~) main::$68 ← typeid (signed byte) $c+(signed dword) -$7d2b7500
Successful SSA optimization PassNTypeIdSimplification
Alias (byte) assertType::t1#0 = (byte~) main::$0
Alias (byte) idx#1 = (byte) idx#43
Alias (byte) assertType::t1#1 = (byte~) main::$2
Alias (byte) idx#2 = (byte) idx#44
Alias (byte) assertType::t1#2 = (byte~) main::$4
Alias (byte) idx#3 = (byte) idx#45
Alias (byte) assertType::t1#3 = (byte~) main::$6
Alias (byte) idx#4 = (byte) idx#46
Alias (byte) assertType::t1#4 = (byte~) main::$8
Alias (byte) idx#47 = (byte) idx#5
Alias (byte) assertType::t1#5 = (byte~) main::$10
Alias (byte) idx#48 = (byte) idx#6
Alias (byte) assertType::t1#6 = (byte~) main::$12
Alias (byte) idx#49 = (byte) idx#7
Alias (byte) assertType::t1#7 = (byte~) main::$14
Alias (byte) idx#50 = (byte) idx#8
Alias (byte) assertType::t1#8 = (byte~) main::$16
Alias (byte) idx#51 = (byte) idx#9
Alias (byte) assertType::t1#9 = (byte~) main::$18
Alias (byte) idx#11 = (byte) idx#52
Alias (byte) assertType::t1#10 = (byte~) main::$20
Alias (byte) idx#12 = (byte) idx#53
Alias (byte) assertType::t1#11 = (byte~) main::$22
Alias (byte) idx#13 = (byte) idx#54
Alias (byte) assertType::t1#12 = (byte~) main::$24
Alias (byte) idx#14 = (byte) idx#55
Alias (byte) assertType::t1#13 = (byte~) main::$26
Alias (byte) idx#15 = (byte) idx#56
Alias (byte) assertType::t1#14 = (byte~) main::$28
Alias (byte) idx#16 = (byte) idx#57
Alias (byte) assertType::t1#15 = (byte~) main::$30
Alias (byte) idx#17 = (byte) idx#58
Alias (byte) assertType::t1#16 = (byte~) main::$32
Alias (byte) idx#18 = (byte) idx#59
Alias (byte) assertType::t1#17 = (byte~) main::$34
Alias (byte) idx#19 = (byte) idx#60
Alias (byte) assertType::t1#18 = (byte~) main::$36
Alias (byte) idx#20 = (byte) idx#61
Alias (byte) assertType::t1#19 = (byte~) main::$38
Alias (byte) idx#21 = (byte) idx#62
Alias (byte) assertType::t1#20 = (byte~) main::$40
Alias (byte) idx#22 = (byte) idx#63
Alias (byte) assertType::t1#21 = (byte~) main::$42
Alias (byte) idx#24 = (byte) idx#64
Alias (byte) assertType::t1#22 = (byte~) main::$44
Alias (byte) idx#25 = (byte) idx#65
Alias (byte) assertType::t1#23 = (byte~) main::$46
Alias (byte) idx#26 = (byte) idx#66
Alias (byte) assertType::t1#24 = (byte~) main::$48
Alias (byte) idx#27 = (byte) idx#67
Alias (byte) assertType::t1#25 = (byte~) main::$50
Alias (byte) idx#28 = (byte) idx#68
Alias (byte) assertType::t1#26 = (byte~) main::$52
Alias (byte) idx#29 = (byte) idx#69
Alias (byte) assertType::t1#27 = (byte~) main::$54
Alias (byte) idx#30 = (byte) idx#70
Alias (byte) assertType::t1#28 = (byte~) main::$56
Alias (byte) idx#31 = (byte) idx#71
Alias (byte) assertType::t1#29 = (byte~) main::$58
Alias (byte) idx#32 = (byte) idx#72
Alias (byte) assertType::t1#30 = (byte~) main::$60
Alias (byte) idx#33 = (byte) idx#73
Alias (byte) assertType::t1#31 = (byte~) main::$62
Alias (byte) idx#34 = (byte) idx#74
Alias (byte) assertType::t1#32 = (byte~) main::$64
Alias (byte) idx#35 = (byte) idx#75
Alias (byte) assertType::t1#33 = (byte~) main::$66
Alias (byte) idx#36 = (byte) idx#76
Alias (byte) assertType::t1#34 = (byte~) main::$68
Alias (byte) idx#37 = (byte) idx#77 (byte) idx#78 (byte) idx#38
Alias (byte) idx#79 = (byte) idx#84 (byte) idx#80
Alias (byte) assertType::t1#35 = (byte) assertType::t1#37 (byte) assertType::t1#38
Alias (byte) idx#40 = (byte) idx#82 (byte) idx#41
Alias (byte) idx#39 = (byte) idx#85
Alias (byte) idx#42 = (byte) idx#83
Successful SSA optimization Pass2AliasElimination
Alias (byte) assertType::t1#35 = (byte) assertType::t1#36
Alias (byte) idx#79 = (byte) idx#81
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) idx#1 (byte) idx#40
Identical Phi Values (byte) idx#2 (byte) idx#40
Identical Phi Values (byte) idx#3 (byte) idx#40
Identical Phi Values (byte) idx#4 (byte) idx#40
Identical Phi Values (byte) idx#47 (byte) idx#40
Identical Phi Values (byte) idx#48 (byte) idx#40
Identical Phi Values (byte) idx#49 (byte) idx#40
Identical Phi Values (byte) idx#50 (byte) idx#40
Identical Phi Values (byte) idx#51 (byte) idx#40
Identical Phi Values (byte) idx#11 (byte) idx#40
Identical Phi Values (byte) idx#12 (byte) idx#40
Identical Phi Values (byte) idx#13 (byte) idx#40
Identical Phi Values (byte) idx#14 (byte) idx#40
Identical Phi Values (byte) idx#15 (byte) idx#40
Identical Phi Values (byte) idx#16 (byte) idx#40
Identical Phi Values (byte) idx#17 (byte) idx#40
Identical Phi Values (byte) idx#18 (byte) idx#40
Identical Phi Values (byte) idx#19 (byte) idx#40
Identical Phi Values (byte) idx#20 (byte) idx#40
Identical Phi Values (byte) idx#21 (byte) idx#40
Identical Phi Values (byte) idx#22 (byte) idx#40
Identical Phi Values (byte) idx#24 (byte) idx#40
Identical Phi Values (byte) idx#25 (byte) idx#40
Identical Phi Values (byte) idx#26 (byte) idx#40
Identical Phi Values (byte) idx#27 (byte) idx#40
Identical Phi Values (byte) idx#28 (byte) idx#40
Identical Phi Values (byte) idx#29 (byte) idx#40
Identical Phi Values (byte) idx#30 (byte) idx#40
Identical Phi Values (byte) idx#31 (byte) idx#40
Identical Phi Values (byte) idx#32 (byte) idx#40
Identical Phi Values (byte) idx#33 (byte) idx#40
Identical Phi Values (byte) idx#34 (byte) idx#40
Identical Phi Values (byte) idx#35 (byte) idx#40
Identical Phi Values (byte) idx#36 (byte) idx#40
Identical Phi Values (byte) idx#37 (byte) idx#40
Identical Phi Values (byte) idx#42 (byte) idx#37
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) assertType::$0 [223] if((byte) assertType::t1#35==(byte) assertType::t2#35) goto assertType::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [218] (byte*) SCREEN#0 ← (byte*)(word) $400
Constant right-side identified [219] (byte*) COLS#0 ← (byte*)(word) $d800
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) idx#0 = 0
Constant (const byte) assertType::t1#0 = TYPEID_SIGNED_BYTE
Constant (const byte) assertType::t2#0 = TYPEID_SIGNED_BYTE
Constant (const byte) assertType::t1#1 = TYPEID_SIGNED_WORD
Constant (const byte) assertType::t2#1 = TYPEID_SIGNED_WORD
Constant (const byte) assertType::t1#2 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t2#2 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t1#3 = TYPEID_SIGNED_WORD
Constant (const byte) assertType::t2#3 = TYPEID_SIGNED_WORD
Constant (const byte) assertType::t1#4 = TYPEID_SIGNED_WORD
Constant (const byte) assertType::t2#4 = TYPEID_SIGNED_WORD
Constant (const byte) assertType::t1#5 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t2#5 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t1#6 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t2#6 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t1#7 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t2#7 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t1#8 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t2#8 = TYPEID_SIGNED_DWORD
Constant (const byte) idx#10 = $28
Constant (const byte) assertType::t1#9 = TYPEID_BYTE
Constant (const byte) assertType::t2#9 = TYPEID_BYTE
Constant (const byte) assertType::t1#10 = TYPEID_BYTE
Constant (const byte) assertType::t2#10 = TYPEID_BYTE
Constant (const byte) assertType::t1#11 = TYPEID_WORD
Constant (const byte) assertType::t2#11 = TYPEID_WORD
Constant (const byte) assertType::t1#12 = TYPEID_WORD
Constant (const byte) assertType::t2#12 = TYPEID_WORD
Constant (const byte) assertType::t1#13 = TYPEID_DWORD
Constant (const byte) assertType::t2#13 = TYPEID_DWORD
Constant (const byte) assertType::t1#14 = TYPEID_WORD
Constant (const byte) assertType::t2#14 = TYPEID_WORD
Constant (const byte) assertType::t1#15 = TYPEID_WORD
Constant (const byte) assertType::t2#15 = TYPEID_WORD
Constant (const byte) assertType::t1#16 = TYPEID_DWORD
Constant (const byte) assertType::t2#16 = TYPEID_DWORD
Constant (const byte) assertType::t1#17 = TYPEID_DWORD
Constant (const byte) assertType::t2#17 = TYPEID_DWORD
Constant (const byte) assertType::t1#18 = TYPEID_DWORD
Constant (const byte) assertType::t2#18 = TYPEID_DWORD
Constant (const byte) assertType::t1#19 = TYPEID_DWORD
Constant (const byte) assertType::t2#19 = TYPEID_DWORD
Constant (const byte) assertType::t1#20 = TYPEID_DWORD
Constant (const byte) assertType::t2#20 = TYPEID_DWORD
Constant (const byte) idx#23 = $50
Constant (const byte) assertType::t1#21 = TYPEID_BYTE
Constant (const byte) assertType::t2#21 = TYPEID_BYTE
Constant (const byte) assertType::t1#22 = TYPEID_BYTE
Constant (const byte) assertType::t2#22 = TYPEID_BYTE
Constant (const byte) assertType::t1#23 = TYPEID_BYTE
Constant (const byte) assertType::t2#23 = TYPEID_BYTE
Constant (const byte) assertType::t1#24 = TYPEID_WORD
Constant (const byte) assertType::t2#24 = TYPEID_WORD
Constant (const byte) assertType::t1#25 = TYPEID_WORD
Constant (const byte) assertType::t2#25 = TYPEID_WORD
Constant (const byte) assertType::t1#26 = TYPEID_DWORD
Constant (const byte) assertType::t2#26 = TYPEID_DWORD
Constant (const byte) assertType::t1#27 = TYPEID_WORD
Constant (const byte) assertType::t2#27 = TYPEID_WORD
Constant (const byte) assertType::t1#28 = TYPEID_WORD
Constant (const byte) assertType::t2#28 = TYPEID_WORD
Constant (const byte) assertType::t1#29 = TYPEID_WORD
Constant (const byte) assertType::t2#29 = TYPEID_WORD
Constant (const byte) assertType::t1#30 = TYPEID_DWORD
Constant (const byte) assertType::t2#30 = TYPEID_DWORD
Constant (const byte) assertType::t1#31 = TYPEID_DWORD
Constant (const byte) assertType::t2#31 = TYPEID_DWORD
Constant (const byte) assertType::t1#32 = TYPEID_DWORD
Constant (const byte) assertType::t2#32 = TYPEID_DWORD
Constant (const byte) assertType::t1#33 = TYPEID_DWORD
Constant (const byte) assertType::t2#33 = TYPEID_DWORD
Constant (const byte) assertType::t1#34 = TYPEID_SIGNED_DWORD
Constant (const byte) assertType::t2#34 = TYPEID_DWORD
Constant (const byte) RED#0 = 2
Constant (const byte) GREEN#0 = 5
Constant (const byte*) SCREEN#0 = (byte*)$400
Constant (const byte*) COLS#0 = (byte*)$d800
Constant (const byte) idx#39 = 0
Successful SSA optimization Pass2ConstantIdentification
Eliminating unused constant (const byte) idx#39
Successful SSA optimization PassNEliminateUnusedVars
Inlining constant with var siblings (const byte) assertType::t1#0
Inlining constant with var siblings (const byte) assertType::t2#0
Inlining constant with var siblings (const byte) assertType::t1#1
Inlining constant with var siblings (const byte) assertType::t2#1
Inlining constant with var siblings (const byte) assertType::t1#2
Inlining constant with var siblings (const byte) assertType::t2#2
Inlining constant with var siblings (const byte) assertType::t1#3
Inlining constant with var siblings (const byte) assertType::t2#3
Inlining constant with var siblings (const byte) assertType::t1#4
Inlining constant with var siblings (const byte) assertType::t2#4
Inlining constant with var siblings (const byte) assertType::t1#5
Inlining constant with var siblings (const byte) assertType::t2#5
Inlining constant with var siblings (const byte) assertType::t1#6
Inlining constant with var siblings (const byte) assertType::t2#6
Inlining constant with var siblings (const byte) assertType::t1#7
Inlining constant with var siblings (const byte) assertType::t2#7
Inlining constant with var siblings (const byte) assertType::t1#8
Inlining constant with var siblings (const byte) assertType::t2#8
Inlining constant with var siblings (const byte) assertType::t1#9
Inlining constant with var siblings (const byte) assertType::t2#9
Inlining constant with var siblings (const byte) assertType::t1#10
Inlining constant with var siblings (const byte) assertType::t2#10
Inlining constant with var siblings (const byte) assertType::t1#11
Inlining constant with var siblings (const byte) assertType::t2#11
Inlining constant with var siblings (const byte) assertType::t1#12
Inlining constant with var siblings (const byte) assertType::t2#12
Inlining constant with var siblings (const byte) assertType::t1#13
Inlining constant with var siblings (const byte) assertType::t2#13
Inlining constant with var siblings (const byte) assertType::t1#14
Inlining constant with var siblings (const byte) assertType::t2#14
Inlining constant with var siblings (const byte) assertType::t1#15
Inlining constant with var siblings (const byte) assertType::t2#15
Inlining constant with var siblings (const byte) assertType::t1#16
Inlining constant with var siblings (const byte) assertType::t2#16
Inlining constant with var siblings (const byte) assertType::t1#17
Inlining constant with var siblings (const byte) assertType::t2#17
Inlining constant with var siblings (const byte) assertType::t1#18
Inlining constant with var siblings (const byte) assertType::t2#18
Inlining constant with var siblings (const byte) assertType::t1#19
Inlining constant with var siblings (const byte) assertType::t2#19
Inlining constant with var siblings (const byte) assertType::t1#20
Inlining constant with var siblings (const byte) assertType::t2#20
Inlining constant with var siblings (const byte) assertType::t1#21
Inlining constant with var siblings (const byte) assertType::t2#21
Inlining constant with var siblings (const byte) assertType::t1#22
Inlining constant with var siblings (const byte) assertType::t2#22
Inlining constant with var siblings (const byte) assertType::t1#23
Inlining constant with var siblings (const byte) assertType::t2#23
Inlining constant with var siblings (const byte) assertType::t1#24
Inlining constant with var siblings (const byte) assertType::t2#24
Inlining constant with var siblings (const byte) assertType::t1#25
Inlining constant with var siblings (const byte) assertType::t2#25
Inlining constant with var siblings (const byte) assertType::t1#26
Inlining constant with var siblings (const byte) assertType::t2#26
Inlining constant with var siblings (const byte) assertType::t1#27
Inlining constant with var siblings (const byte) assertType::t2#27
Inlining constant with var siblings (const byte) assertType::t1#28
Inlining constant with var siblings (const byte) assertType::t2#28
Inlining constant with var siblings (const byte) assertType::t1#29
Inlining constant with var siblings (const byte) assertType::t2#29
Inlining constant with var siblings (const byte) assertType::t1#30
Inlining constant with var siblings (const byte) assertType::t2#30
Inlining constant with var siblings (const byte) assertType::t1#31
Inlining constant with var siblings (const byte) assertType::t2#31
Inlining constant with var siblings (const byte) assertType::t1#32
Inlining constant with var siblings (const byte) assertType::t2#32
Inlining constant with var siblings (const byte) assertType::t1#33
Inlining constant with var siblings (const byte) assertType::t2#33
Inlining constant with var siblings (const byte) assertType::t1#34
Inlining constant with var siblings (const byte) assertType::t2#34
Inlining constant with var siblings (const byte) idx#0
Inlining constant with var siblings (const byte) idx#10
Inlining constant with var siblings (const byte) idx#23
Constant inlined assertType::t2#5 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t2#6 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t2#7 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t2#8 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t2#9 = (const byte) TYPEID_BYTE
Constant inlined assertType::t2#31 = (const byte) TYPEID_DWORD
Constant inlined assertType::t2#30 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#21 = (const byte) TYPEID_BYTE
Constant inlined assertType::t2#33 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#20 = (const byte) TYPEID_DWORD
Constant inlined assertType::t2#32 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#23 = (const byte) TYPEID_BYTE
Constant inlined assertType::t1#22 = (const byte) TYPEID_BYTE
Constant inlined assertType::t2#34 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#25 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#24 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#27 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#0 = (const byte) TYPEID_SIGNED_BYTE
Constant inlined assertType::t1#26 = (const byte) TYPEID_DWORD
Constant inlined assertType::t2#1 = (const byte) TYPEID_SIGNED_WORD
Constant inlined assertType::t1#29 = (const byte) TYPEID_WORD
Constant inlined idx#0 = (byte) 0
Constant inlined assertType::t2#2 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t1#28 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#3 = (const byte) TYPEID_SIGNED_WORD
Constant inlined assertType::t2#4 = (const byte) TYPEID_SIGNED_WORD
Constant inlined idx#23 = (byte) $50
Constant inlined assertType::t2#20 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#10 = (const byte) TYPEID_BYTE
Constant inlined assertType::t2#22 = (const byte) TYPEID_BYTE
Constant inlined assertType::t2#21 = (const byte) TYPEID_BYTE
Constant inlined assertType::t1#12 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#24 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#11 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#23 = (const byte) TYPEID_BYTE
Constant inlined assertType::t1#14 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#26 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#13 = (const byte) TYPEID_DWORD
Constant inlined assertType::t2#25 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#16 = (const byte) TYPEID_DWORD
Constant inlined assertType::t2#28 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#15 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#27 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#18 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#17 = (const byte) TYPEID_DWORD
Constant inlined assertType::t2#29 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#19 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#6 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined idx#10 = (byte) $28
Constant inlined assertType::t1#7 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t1#8 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t1#9 = (const byte) TYPEID_BYTE
Constant inlined assertType::t2#11 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#10 = (const byte) TYPEID_BYTE
Constant inlined assertType::t2#13 = (const byte) TYPEID_DWORD
Constant inlined assertType::t2#12 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#15 = (const byte) TYPEID_WORD
Constant inlined assertType::t2#14 = (const byte) TYPEID_WORD
Constant inlined assertType::t1#0 = (const byte) TYPEID_SIGNED_BYTE
Constant inlined assertType::t2#17 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#1 = (const byte) TYPEID_SIGNED_WORD
Constant inlined assertType::t2#16 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#2 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t2#19 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#3 = (const byte) TYPEID_SIGNED_WORD
Constant inlined assertType::t2#18 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#4 = (const byte) TYPEID_SIGNED_WORD
Constant inlined assertType::t1#5 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t1#30 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#32 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#31 = (const byte) TYPEID_DWORD
Constant inlined assertType::t1#34 = (const byte) TYPEID_SIGNED_DWORD
Constant inlined assertType::t1#33 = (const byte) TYPEID_DWORD
Successful SSA optimization Pass2ConstantInlining
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@21
Adding NOP phi() at start of main::@35
CALL GRAPH
Calls in [] to main:3
Calls in [main] to assertType:7 assertType:9 assertType:11 assertType:13 assertType:15 assertType:17 assertType:19 assertType:21 assertType:23 assertType:25 assertType:27 assertType:29 assertType:31 assertType:33 assertType:35 assertType:37 assertType:39 assertType:41 assertType:43 assertType:45 assertType:47 assertType:49 assertType:51 assertType:53 assertType:55 assertType:57 assertType:59 assertType:61 assertType:63 assertType:65 assertType:67 assertType:69 assertType:71 assertType:73 assertType:75
Created 3 initial phi equivalence classes
Coalesced [8] idx#86 ← idx#40
Coalesced (already) [10] idx#97 ← idx#40
Coalesced (already) [12] idx#107 ← idx#40
Coalesced (already) [14] idx#113 ← idx#40
Coalesced (already) [16] idx#114 ← idx#40
Coalesced (already) [18] idx#115 ← idx#40
Coalesced (already) [20] idx#116 ← idx#40
Coalesced (already) [22] idx#117 ← idx#40
Coalesced (already) [26] idx#87 ← idx#40
Coalesced (already) [28] idx#88 ← idx#40
Coalesced (already) [30] idx#89 ← idx#40
Coalesced (already) [32] idx#90 ← idx#40
Coalesced (already) [34] idx#91 ← idx#40
Coalesced (already) [36] idx#92 ← idx#40
Coalesced (already) [38] idx#93 ← idx#40
Coalesced (already) [40] idx#94 ← idx#40
Coalesced (already) [42] idx#95 ← idx#40
Coalesced (already) [44] idx#96 ← idx#40
Coalesced (already) [46] idx#98 ← idx#40
Coalesced (already) [50] idx#99 ← idx#40
Coalesced (already) [52] idx#100 ← idx#40
Coalesced (already) [54] idx#101 ← idx#40
Coalesced (already) [56] idx#102 ← idx#40
Coalesced (already) [58] idx#103 ← idx#40
Coalesced (already) [60] idx#104 ← idx#40
Coalesced (already) [62] idx#105 ← idx#40
Coalesced (already) [64] idx#106 ← idx#40
Coalesced (already) [66] idx#108 ← idx#40
Coalesced (already) [68] idx#109 ← idx#40
Coalesced (already) [70] idx#110 ← idx#40
Coalesced (already) [72] idx#111 ← idx#40
Coalesced (already) [74] idx#112 ← idx#40
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) @1
Culled Empty Block (label) @3
Culled Empty Block (label) main::@35
Renumbering block @2 to @1
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of main::@15
Adding NOP phi() at start of main::@16
Adding NOP phi() at start of main::@17
Adding NOP phi() at start of main::@18
Adding NOP phi() at start of main::@19
Adding NOP phi() at start of main::@20
Adding NOP phi() at start of main::@21
Adding NOP phi() at start of main::@22
Adding NOP phi() at start of main::@23
Adding NOP phi() at start of main::@24
Adding NOP phi() at start of main::@25
Adding NOP phi() at start of main::@26
Adding NOP phi() at start of main::@27
Adding NOP phi() at start of main::@28
Adding NOP phi() at start of main::@29
Adding NOP phi() at start of main::@30
Adding NOP phi() at start of main::@31
Adding NOP phi() at start of main::@32
Adding NOP phi() at start of main::@33
Adding NOP phi() at start of main::@34
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@1
@1: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @1
[3] phi()
main: scope:[main] from @1
[4] phi()
[5] call assertType
to:main::@1
main::@1: scope:[main] from main
[6] phi()
[7] call assertType
to:main::@2
main::@2: scope:[main] from main::@1
[8] phi()
[9] call assertType
to:main::@3
main::@3: scope:[main] from main::@2
[10] phi()
[11] call assertType
to:main::@4
main::@4: scope:[main] from main::@3
[12] phi()
[13] call assertType
to:main::@5
main::@5: scope:[main] from main::@4
[14] phi()
[15] call assertType
to:main::@6
main::@6: scope:[main] from main::@5
[16] phi()
[17] call assertType
to:main::@7
main::@7: scope:[main] from main::@6
[18] phi()
[19] call assertType
to:main::@8
main::@8: scope:[main] from main::@7
[20] phi()
[21] call assertType
to:main::@9
main::@9: scope:[main] from main::@8
[22] phi()
[23] call assertType
to:main::@10
main::@10: scope:[main] from main::@9
[24] phi()
[25] call assertType
to:main::@11
main::@11: scope:[main] from main::@10
[26] phi()
[27] call assertType
to:main::@12
main::@12: scope:[main] from main::@11
[28] phi()
[29] call assertType
to:main::@13
main::@13: scope:[main] from main::@12
[30] phi()
[31] call assertType
to:main::@14
main::@14: scope:[main] from main::@13
[32] phi()
[33] call assertType
to:main::@15
main::@15: scope:[main] from main::@14
[34] phi()
[35] call assertType
to:main::@16
main::@16: scope:[main] from main::@15
[36] phi()
[37] call assertType
to:main::@17
main::@17: scope:[main] from main::@16
[38] phi()
[39] call assertType
to:main::@18
main::@18: scope:[main] from main::@17
[40] phi()
[41] call assertType
to:main::@19
main::@19: scope:[main] from main::@18
[42] phi()
[43] call assertType
to:main::@20
main::@20: scope:[main] from main::@19
[44] phi()
[45] call assertType
to:main::@21
main::@21: scope:[main] from main::@20
[46] phi()
[47] call assertType
to:main::@22
main::@22: scope:[main] from main::@21
[48] phi()
[49] call assertType
to:main::@23
main::@23: scope:[main] from main::@22
[50] phi()
[51] call assertType
to:main::@24
main::@24: scope:[main] from main::@23
[52] phi()
[53] call assertType
to:main::@25
main::@25: scope:[main] from main::@24
[54] phi()
[55] call assertType
to:main::@26
main::@26: scope:[main] from main::@25
[56] phi()
[57] call assertType
to:main::@27
main::@27: scope:[main] from main::@26
[58] phi()
[59] call assertType
to:main::@28
main::@28: scope:[main] from main::@27
[60] phi()
[61] call assertType
to:main::@29
main::@29: scope:[main] from main::@28
[62] phi()
[63] call assertType
to:main::@30
main::@30: scope:[main] from main::@29
[64] phi()
[65] call assertType
to:main::@31
main::@31: scope:[main] from main::@30
[66] phi()
[67] call assertType
to:main::@32
main::@32: scope:[main] from main::@31
[68] phi()
[69] call assertType
to:main::@33
main::@33: scope:[main] from main::@32
[70] phi()
[71] call assertType
to:main::@34
main::@34: scope:[main] from main::@33
[72] phi()
[73] call assertType
to:main::@return
main::@return: scope:[main] from main::@34
[74] return
to:@return
assertType: scope:[assertType] from main main::@1 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@2 main::@20 main::@21 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@28 main::@29 main::@3 main::@30 main::@31 main::@32 main::@33 main::@34 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9
[75] (byte) idx#79 ← phi( main/(byte) 0 main::@1/(byte) idx#40 main::@10/(byte) idx#40 main::@11/(byte) idx#40 main::@12/(byte) idx#40 main::@13/(byte) idx#40 main::@14/(byte) idx#40 main::@15/(byte) idx#40 main::@16/(byte) idx#40 main::@17/(byte) idx#40 main::@18/(byte) idx#40 main::@19/(byte) idx#40 main::@2/(byte) idx#40 main::@20/(byte) idx#40 main::@21/(byte) $50 main::@22/(byte) idx#40 main::@23/(byte) idx#40 main::@24/(byte) idx#40 main::@25/(byte) idx#40 main::@26/(byte) idx#40 main::@27/(byte) idx#40 main::@28/(byte) idx#40 main::@29/(byte) idx#40 main::@3/(byte) idx#40 main::@30/(byte) idx#40 main::@31/(byte) idx#40 main::@32/(byte) idx#40 main::@33/(byte) idx#40 main::@34/(byte) idx#40 main::@4/(byte) idx#40 main::@5/(byte) idx#40 main::@6/(byte) idx#40 main::@7/(byte) idx#40 main::@8/(byte) idx#40 main::@9/(byte) $28 )
[75] (byte) assertType::t2#35 ← phi( main/(const byte) TYPEID_SIGNED_BYTE main::@1/(const byte) TYPEID_SIGNED_WORD main::@10/(const byte) TYPEID_BYTE main::@11/(const byte) TYPEID_WORD main::@12/(const byte) TYPEID_WORD main::@13/(const byte) TYPEID_DWORD main::@14/(const byte) TYPEID_WORD main::@15/(const byte) TYPEID_WORD main::@16/(const byte) TYPEID_DWORD main::@17/(const byte) TYPEID_DWORD main::@18/(const byte) TYPEID_DWORD main::@19/(const byte) TYPEID_DWORD main::@2/(const byte) TYPEID_SIGNED_DWORD main::@20/(const byte) TYPEID_DWORD main::@21/(const byte) TYPEID_BYTE main::@22/(const byte) TYPEID_BYTE main::@23/(const byte) TYPEID_BYTE main::@24/(const byte) TYPEID_WORD main::@25/(const byte) TYPEID_WORD main::@26/(const byte) TYPEID_DWORD main::@27/(const byte) TYPEID_WORD main::@28/(const byte) TYPEID_WORD main::@29/(const byte) TYPEID_WORD main::@3/(const byte) TYPEID_SIGNED_WORD main::@30/(const byte) TYPEID_DWORD main::@31/(const byte) TYPEID_DWORD main::@32/(const byte) TYPEID_DWORD main::@33/(const byte) TYPEID_DWORD main::@34/(const byte) TYPEID_DWORD main::@4/(const byte) TYPEID_SIGNED_WORD main::@5/(const byte) TYPEID_SIGNED_DWORD main::@6/(const byte) TYPEID_SIGNED_DWORD main::@7/(const byte) TYPEID_SIGNED_DWORD main::@8/(const byte) TYPEID_SIGNED_DWORD main::@9/(const byte) TYPEID_BYTE )
[75] (byte) assertType::t1#35 ← phi( main/(const byte) TYPEID_SIGNED_BYTE main::@1/(const byte) TYPEID_SIGNED_WORD main::@10/(const byte) TYPEID_BYTE main::@11/(const byte) TYPEID_WORD main::@12/(const byte) TYPEID_WORD main::@13/(const byte) TYPEID_DWORD main::@14/(const byte) TYPEID_WORD main::@15/(const byte) TYPEID_WORD main::@16/(const byte) TYPEID_DWORD main::@17/(const byte) TYPEID_DWORD main::@18/(const byte) TYPEID_DWORD main::@19/(const byte) TYPEID_DWORD main::@2/(const byte) TYPEID_SIGNED_DWORD main::@20/(const byte) TYPEID_DWORD main::@21/(const byte) TYPEID_BYTE main::@22/(const byte) TYPEID_BYTE main::@23/(const byte) TYPEID_BYTE main::@24/(const byte) TYPEID_WORD main::@25/(const byte) TYPEID_WORD main::@26/(const byte) TYPEID_DWORD main::@27/(const byte) TYPEID_WORD main::@28/(const byte) TYPEID_WORD main::@29/(const byte) TYPEID_WORD main::@3/(const byte) TYPEID_SIGNED_WORD main::@30/(const byte) TYPEID_DWORD main::@31/(const byte) TYPEID_DWORD main::@32/(const byte) TYPEID_DWORD main::@33/(const byte) TYPEID_DWORD main::@34/(const byte) TYPEID_SIGNED_DWORD main::@4/(const byte) TYPEID_SIGNED_WORD main::@5/(const byte) TYPEID_SIGNED_DWORD main::@6/(const byte) TYPEID_SIGNED_DWORD main::@7/(const byte) TYPEID_SIGNED_DWORD main::@8/(const byte) TYPEID_SIGNED_DWORD main::@9/(const byte) TYPEID_BYTE )
[76] if((byte) assertType::t1#35==(byte) assertType::t2#35) goto assertType::@1
to:assertType::@3
assertType::@3: scope:[assertType] from assertType
[77] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) RED#0
to:assertType::@2
assertType::@2: scope:[assertType] from assertType::@1 assertType::@3
[78] *((const byte*) SCREEN#0 + (byte) idx#79) ← (byte) assertType::t1#35
[79] (byte) idx#40 ← ++ (byte) idx#79
to:assertType::@return
assertType::@return: scope:[assertType] from assertType::@2
[80] return
to:@return
assertType::@1: scope:[assertType] from assertType
[81] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) GREEN#0
to:assertType::@2
VARIABLE REGISTER WEIGHTS
(byte*) COLS
(byte) GREEN
(byte) RED
(byte*) SCREEN
(void()) assertType((byte) assertType::t1 , (byte) assertType::t2)
(byte) assertType::t1
(byte) assertType::t1#35 1.0
(byte) assertType::t2
(byte) assertType::t2#35 2.0
(byte) idx
(byte) idx#40 0.9999999999999993
(byte) idx#79 14.400000000000007
(void()) main()
Initial phi equivalence classes
[ assertType::t1#35 ]
[ assertType::t2#35 ]
[ idx#79 idx#40 ]
Complete equivalence classes
[ assertType::t1#35 ]
[ assertType::t2#35 ]
[ idx#79 idx#40 ]
Allocated zp ZP_BYTE:2 [ assertType::t1#35 ]
Allocated zp ZP_BYTE:3 [ assertType::t2#35 ]
Allocated zp ZP_BYTE:4 [ idx#79 idx#40 ]
INITIAL ASM
Target platform is c64basic / MOS6502X
// File Comments
// Tests conversion of numbers to correct int types
// See https://gitlab.com/camelot/kickc/issues/181
// Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
// Global Constants & labels
.const TYPEID_SIGNED_BYTE = 2
.const TYPEID_SIGNED_WORD = 4
.const TYPEID_SIGNED_DWORD = 6
.const TYPEID_BYTE = 1
.const TYPEID_WORD = 3
.const TYPEID_DWORD = 5
.const RED = 2
.const GREEN = 5
.label SCREEN = $400
.label COLS = $d800
.label idx = 4
// @begin
bbegin:
// [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
// @1
b1:
// [2] call main
// [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
// [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
// @end
bend:
// main
main: {
// [5] call assertType
// [75] phi from main to assertType [phi:main->assertType]
assertType_from_main:
// [75] phi (byte) idx#79 = (byte) 0 [phi:main->assertType#0] -- vbuz1=vbuc1
lda #0
sta.z idx
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_BYTE [phi:main->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_BYTE [phi:main->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_BYTE
sta.z assertType.t1
jsr assertType
// [6] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
jmp b1
// main::@1
b1:
// [7] call assertType
// [75] phi from main::@1 to assertType [phi:main::@1->assertType]
assertType_from_b1:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@1->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@1->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@1->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t1
jsr assertType
// [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
jmp b2
// main::@2
b2:
// [9] call assertType
// [75] phi from main::@2 to assertType [phi:main::@2->assertType]
assertType_from_b2:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@2->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@2->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@2->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t1
jsr assertType
// [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
b3_from_b2:
jmp b3
// main::@3
b3:
// [11] call assertType
// [75] phi from main::@3 to assertType [phi:main::@3->assertType]
assertType_from_b3:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@3->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@3->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@3->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t1
jsr assertType
// [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
b4_from_b3:
jmp b4
// main::@4
b4:
// [13] call assertType
// [75] phi from main::@4 to assertType [phi:main::@4->assertType]
assertType_from_b4:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@4->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@4->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@4->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t1
jsr assertType
// [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
b5_from_b4:
jmp b5
// main::@5
b5:
// [15] call assertType
// [75] phi from main::@5 to assertType [phi:main::@5->assertType]
assertType_from_b5:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@5->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@5->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@5->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t1
jsr assertType
// [16] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
b6_from_b5:
jmp b6
// main::@6
b6:
// [17] call assertType
// [75] phi from main::@6 to assertType [phi:main::@6->assertType]
assertType_from_b6:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@6->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@6->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@6->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t1
jsr assertType
// [18] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
b7_from_b6:
jmp b7
// main::@7
b7:
// [19] call assertType
// [75] phi from main::@7 to assertType [phi:main::@7->assertType]
assertType_from_b7:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@7->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@7->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@7->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t1
jsr assertType
// [20] phi from main::@7 to main::@8 [phi:main::@7->main::@8]
b8_from_b7:
jmp b8
// main::@8
b8:
// [21] call assertType
// [75] phi from main::@8 to assertType [phi:main::@8->assertType]
assertType_from_b8:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@8->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@8->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@8->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t1
jsr assertType
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
b9_from_b8:
jmp b9
// main::@9
b9:
// [23] call assertType
// [75] phi from main::@9 to assertType [phi:main::@9->assertType]
assertType_from_b9:
// [75] phi (byte) idx#79 = (byte) $28 [phi:main::@9->assertType#0] -- vbuz1=vbuc1
lda #$28
sta.z idx
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@9->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@9->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t1
jsr assertType
// [24] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
b10_from_b9:
jmp b10
// main::@10
b10:
// [25] call assertType
// [75] phi from main::@10 to assertType [phi:main::@10->assertType]
assertType_from_b10:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@10->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@10->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@10->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t1
jsr assertType
// [26] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
b11_from_b10:
jmp b11
// main::@11
b11:
// [27] call assertType
// [75] phi from main::@11 to assertType [phi:main::@11->assertType]
assertType_from_b11:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@11->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@11->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@11->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
b12_from_b11:
jmp b12
// main::@12
b12:
// [29] call assertType
// [75] phi from main::@12 to assertType [phi:main::@12->assertType]
assertType_from_b12:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@12->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@12->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@12->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [30] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
b13_from_b12:
jmp b13
// main::@13
b13:
// [31] call assertType
// [75] phi from main::@13 to assertType [phi:main::@13->assertType]
assertType_from_b13:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@13->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@13->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@13->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [32] phi from main::@13 to main::@14 [phi:main::@13->main::@14]
b14_from_b13:
jmp b14
// main::@14
b14:
// [33] call assertType
// [75] phi from main::@14 to assertType [phi:main::@14->assertType]
assertType_from_b14:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@14->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@14->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@14->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [34] phi from main::@14 to main::@15 [phi:main::@14->main::@15]
b15_from_b14:
jmp b15
// main::@15
b15:
// [35] call assertType
// [75] phi from main::@15 to assertType [phi:main::@15->assertType]
assertType_from_b15:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@15->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@15->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@15->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [36] phi from main::@15 to main::@16 [phi:main::@15->main::@16]
b16_from_b15:
jmp b16
// main::@16
b16:
// [37] call assertType
// [75] phi from main::@16 to assertType [phi:main::@16->assertType]
assertType_from_b16:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@16->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@16->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@16->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [38] phi from main::@16 to main::@17 [phi:main::@16->main::@17]
b17_from_b16:
jmp b17
// main::@17
b17:
// [39] call assertType
// [75] phi from main::@17 to assertType [phi:main::@17->assertType]
assertType_from_b17:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@17->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@17->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@17->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
b18_from_b17:
jmp b18
// main::@18
b18:
// [41] call assertType
// [75] phi from main::@18 to assertType [phi:main::@18->assertType]
assertType_from_b18:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@18->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@18->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@18->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [42] phi from main::@18 to main::@19 [phi:main::@18->main::@19]
b19_from_b18:
jmp b19
// main::@19
b19:
// [43] call assertType
// [75] phi from main::@19 to assertType [phi:main::@19->assertType]
assertType_from_b19:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@19->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@19->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@19->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [44] phi from main::@19 to main::@20 [phi:main::@19->main::@20]
b20_from_b19:
jmp b20
// main::@20
b20:
// [45] call assertType
// [75] phi from main::@20 to assertType [phi:main::@20->assertType]
assertType_from_b20:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@20->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@20->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@20->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [46] phi from main::@20 to main::@21 [phi:main::@20->main::@21]
b21_from_b20:
jmp b21
// main::@21
b21:
// [47] call assertType
// [75] phi from main::@21 to assertType [phi:main::@21->assertType]
assertType_from_b21:
// [75] phi (byte) idx#79 = (byte) $50 [phi:main::@21->assertType#0] -- vbuz1=vbuc1
lda #$50
sta.z idx
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@21->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@21->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t1
jsr assertType
// [48] phi from main::@21 to main::@22 [phi:main::@21->main::@22]
b22_from_b21:
jmp b22
// main::@22
b22:
// [49] call assertType
// [75] phi from main::@22 to assertType [phi:main::@22->assertType]
assertType_from_b22:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@22->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@22->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@22->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t1
jsr assertType
// [50] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
b23_from_b22:
jmp b23
// main::@23
b23:
// [51] call assertType
// [75] phi from main::@23 to assertType [phi:main::@23->assertType]
assertType_from_b23:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@23->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@23->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@23->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t1
jsr assertType
// [52] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
b24_from_b23:
jmp b24
// main::@24
b24:
// [53] call assertType
// [75] phi from main::@24 to assertType [phi:main::@24->assertType]
assertType_from_b24:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@24->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@24->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@24->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [54] phi from main::@24 to main::@25 [phi:main::@24->main::@25]
b25_from_b24:
jmp b25
// main::@25
b25:
// [55] call assertType
// [75] phi from main::@25 to assertType [phi:main::@25->assertType]
assertType_from_b25:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@25->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@25->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@25->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [56] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
b26_from_b25:
jmp b26
// main::@26
b26:
// [57] call assertType
// [75] phi from main::@26 to assertType [phi:main::@26->assertType]
assertType_from_b26:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@26->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@26->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@26->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [58] phi from main::@26 to main::@27 [phi:main::@26->main::@27]
b27_from_b26:
jmp b27
// main::@27
b27:
// [59] call assertType
// [75] phi from main::@27 to assertType [phi:main::@27->assertType]
assertType_from_b27:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@27->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@27->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@27->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [60] phi from main::@27 to main::@28 [phi:main::@27->main::@28]
b28_from_b27:
jmp b28
// main::@28
b28:
// [61] call assertType
// [75] phi from main::@28 to assertType [phi:main::@28->assertType]
assertType_from_b28:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@28->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@28->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@28->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [62] phi from main::@28 to main::@29 [phi:main::@28->main::@29]
b29_from_b28:
jmp b29
// main::@29
b29:
// [63] call assertType
// [75] phi from main::@29 to assertType [phi:main::@29->assertType]
assertType_from_b29:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@29->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@29->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@29->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t1
jsr assertType
// [64] phi from main::@29 to main::@30 [phi:main::@29->main::@30]
b30_from_b29:
jmp b30
// main::@30
b30:
// [65] call assertType
// [75] phi from main::@30 to assertType [phi:main::@30->assertType]
assertType_from_b30:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@30->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@30->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@30->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [66] phi from main::@30 to main::@31 [phi:main::@30->main::@31]
b31_from_b30:
jmp b31
// main::@31
b31:
// [67] call assertType
// [75] phi from main::@31 to assertType [phi:main::@31->assertType]
assertType_from_b31:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@31->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@31->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@31->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [68] phi from main::@31 to main::@32 [phi:main::@31->main::@32]
b32_from_b31:
jmp b32
// main::@32
b32:
// [69] call assertType
// [75] phi from main::@32 to assertType [phi:main::@32->assertType]
assertType_from_b32:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@32->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@32->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@32->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [70] phi from main::@32 to main::@33 [phi:main::@32->main::@33]
b33_from_b32:
jmp b33
// main::@33
b33:
// [71] call assertType
// [75] phi from main::@33 to assertType [phi:main::@33->assertType]
assertType_from_b33:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@33->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@33->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@33->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t1
jsr assertType
// [72] phi from main::@33 to main::@34 [phi:main::@33->main::@34]
b34_from_b33:
jmp b34
// main::@34
b34:
// [73] call assertType
// [75] phi from main::@34 to assertType [phi:main::@34->assertType]
assertType_from_b34:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@34->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@34->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@34->assertType#2] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t1
jsr assertType
jmp breturn
// main::@return
breturn:
// [74] return
rts
}
// assertType
// Check that the two passed type IDs are equal.
// Shows a letter symbolizing t1
// If they are equal the letter is green - if not it is red.
// assertType(byte zeropage(2) t1, byte zeropage(3) t2)
assertType: {
.label t1 = 2
.label t2 = 3
// [76] if((byte) assertType::t1#35==(byte) assertType::t2#35) goto assertType::@1 -- vbuz1_eq_vbuz2_then_la1
lda.z t1
cmp.z t2
beq b1
jmp b3
// assertType::@3
b3:
// [77] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) RED#0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #RED
ldy.z idx
sta COLS,y
jmp b2
// assertType::@2
b2:
// [78] *((const byte*) SCREEN#0 + (byte) idx#79) ← (byte) assertType::t1#35 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z t1
ldy.z idx
sta SCREEN,y
// [79] (byte) idx#40 ← ++ (byte) idx#79 -- vbuz1=_inc_vbuz1
inc.z idx
jmp breturn
// assertType::@return
breturn:
// [80] return
rts
// assertType::@1
b1:
// [81] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #GREEN
ldy.z idx
sta COLS,y
jmp b2
}
// File Data
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [77] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) RED#0 [ assertType::t1#35 idx#79 ] ( main:2::assertType:5 [ assertType::t1#35 idx#79 ] main:2::assertType:7 [ assertType::t1#35 idx#79 ] main:2::assertType:9 [ assertType::t1#35 idx#79 ] main:2::assertType:11 [ assertType::t1#35 idx#79 ] main:2::assertType:13 [ assertType::t1#35 idx#79 ] main:2::assertType:15 [ assertType::t1#35 idx#79 ] main:2::assertType:17 [ assertType::t1#35 idx#79 ] main:2::assertType:19 [ assertType::t1#35 idx#79 ] main:2::assertType:21 [ assertType::t1#35 idx#79 ] main:2::assertType:23 [ assertType::t1#35 idx#79 ] main:2::assertType:25 [ assertType::t1#35 idx#79 ] main:2::assertType:27 [ assertType::t1#35 idx#79 ] main:2::assertType:29 [ assertType::t1#35 idx#79 ] main:2::assertType:31 [ assertType::t1#35 idx#79 ] main:2::assertType:33 [ assertType::t1#35 idx#79 ] main:2::assertType:35 [ assertType::t1#35 idx#79 ] main:2::assertType:37 [ assertType::t1#35 idx#79 ] main:2::assertType:39 [ assertType::t1#35 idx#79 ] main:2::assertType:41 [ assertType::t1#35 idx#79 ] main:2::assertType:43 [ assertType::t1#35 idx#79 ] main:2::assertType:45 [ assertType::t1#35 idx#79 ] main:2::assertType:47 [ assertType::t1#35 idx#79 ] main:2::assertType:49 [ assertType::t1#35 idx#79 ] main:2::assertType:51 [ assertType::t1#35 idx#79 ] main:2::assertType:53 [ assertType::t1#35 idx#79 ] main:2::assertType:55 [ assertType::t1#35 idx#79 ] main:2::assertType:57 [ assertType::t1#35 idx#79 ] main:2::assertType:59 [ assertType::t1#35 idx#79 ] main:2::assertType:61 [ assertType::t1#35 idx#79 ] main:2::assertType:63 [ assertType::t1#35 idx#79 ] main:2::assertType:65 [ assertType::t1#35 idx#79 ] main:2::assertType:67 [ assertType::t1#35 idx#79 ] main:2::assertType:69 [ assertType::t1#35 idx#79 ] main:2::assertType:71 [ assertType::t1#35 idx#79 ] main:2::assertType:73 [ assertType::t1#35 idx#79 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ assertType::t1#35 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ idx#79 idx#40 ]
Statement [78] *((const byte*) SCREEN#0 + (byte) idx#79) ← (byte) assertType::t1#35 [ idx#79 ] ( main:2::assertType:5 [ idx#79 ] main:2::assertType:7 [ idx#79 ] main:2::assertType:9 [ idx#79 ] main:2::assertType:11 [ idx#79 ] main:2::assertType:13 [ idx#79 ] main:2::assertType:15 [ idx#79 ] main:2::assertType:17 [ idx#79 ] main:2::assertType:19 [ idx#79 ] main:2::assertType:21 [ idx#79 ] main:2::assertType:23 [ idx#79 ] main:2::assertType:25 [ idx#79 ] main:2::assertType:27 [ idx#79 ] main:2::assertType:29 [ idx#79 ] main:2::assertType:31 [ idx#79 ] main:2::assertType:33 [ idx#79 ] main:2::assertType:35 [ idx#79 ] main:2::assertType:37 [ idx#79 ] main:2::assertType:39 [ idx#79 ] main:2::assertType:41 [ idx#79 ] main:2::assertType:43 [ idx#79 ] main:2::assertType:45 [ idx#79 ] main:2::assertType:47 [ idx#79 ] main:2::assertType:49 [ idx#79 ] main:2::assertType:51 [ idx#79 ] main:2::assertType:53 [ idx#79 ] main:2::assertType:55 [ idx#79 ] main:2::assertType:57 [ idx#79 ] main:2::assertType:59 [ idx#79 ] main:2::assertType:61 [ idx#79 ] main:2::assertType:63 [ idx#79 ] main:2::assertType:65 [ idx#79 ] main:2::assertType:67 [ idx#79 ] main:2::assertType:69 [ idx#79 ] main:2::assertType:71 [ idx#79 ] main:2::assertType:73 [ idx#79 ] ) always clobbers reg byte a
Statement [81] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) GREEN#0 [ assertType::t1#35 idx#79 ] ( main:2::assertType:5 [ assertType::t1#35 idx#79 ] main:2::assertType:7 [ assertType::t1#35 idx#79 ] main:2::assertType:9 [ assertType::t1#35 idx#79 ] main:2::assertType:11 [ assertType::t1#35 idx#79 ] main:2::assertType:13 [ assertType::t1#35 idx#79 ] main:2::assertType:15 [ assertType::t1#35 idx#79 ] main:2::assertType:17 [ assertType::t1#35 idx#79 ] main:2::assertType:19 [ assertType::t1#35 idx#79 ] main:2::assertType:21 [ assertType::t1#35 idx#79 ] main:2::assertType:23 [ assertType::t1#35 idx#79 ] main:2::assertType:25 [ assertType::t1#35 idx#79 ] main:2::assertType:27 [ assertType::t1#35 idx#79 ] main:2::assertType:29 [ assertType::t1#35 idx#79 ] main:2::assertType:31 [ assertType::t1#35 idx#79 ] main:2::assertType:33 [ assertType::t1#35 idx#79 ] main:2::assertType:35 [ assertType::t1#35 idx#79 ] main:2::assertType:37 [ assertType::t1#35 idx#79 ] main:2::assertType:39 [ assertType::t1#35 idx#79 ] main:2::assertType:41 [ assertType::t1#35 idx#79 ] main:2::assertType:43 [ assertType::t1#35 idx#79 ] main:2::assertType:45 [ assertType::t1#35 idx#79 ] main:2::assertType:47 [ assertType::t1#35 idx#79 ] main:2::assertType:49 [ assertType::t1#35 idx#79 ] main:2::assertType:51 [ assertType::t1#35 idx#79 ] main:2::assertType:53 [ assertType::t1#35 idx#79 ] main:2::assertType:55 [ assertType::t1#35 idx#79 ] main:2::assertType:57 [ assertType::t1#35 idx#79 ] main:2::assertType:59 [ assertType::t1#35 idx#79 ] main:2::assertType:61 [ assertType::t1#35 idx#79 ] main:2::assertType:63 [ assertType::t1#35 idx#79 ] main:2::assertType:65 [ assertType::t1#35 idx#79 ] main:2::assertType:67 [ assertType::t1#35 idx#79 ] main:2::assertType:69 [ assertType::t1#35 idx#79 ] main:2::assertType:71 [ assertType::t1#35 idx#79 ] main:2::assertType:73 [ assertType::t1#35 idx#79 ] ) always clobbers reg byte a
Statement [77] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) RED#0 [ assertType::t1#35 idx#79 ] ( main:2::assertType:5 [ assertType::t1#35 idx#79 ] main:2::assertType:7 [ assertType::t1#35 idx#79 ] main:2::assertType:9 [ assertType::t1#35 idx#79 ] main:2::assertType:11 [ assertType::t1#35 idx#79 ] main:2::assertType:13 [ assertType::t1#35 idx#79 ] main:2::assertType:15 [ assertType::t1#35 idx#79 ] main:2::assertType:17 [ assertType::t1#35 idx#79 ] main:2::assertType:19 [ assertType::t1#35 idx#79 ] main:2::assertType:21 [ assertType::t1#35 idx#79 ] main:2::assertType:23 [ assertType::t1#35 idx#79 ] main:2::assertType:25 [ assertType::t1#35 idx#79 ] main:2::assertType:27 [ assertType::t1#35 idx#79 ] main:2::assertType:29 [ assertType::t1#35 idx#79 ] main:2::assertType:31 [ assertType::t1#35 idx#79 ] main:2::assertType:33 [ assertType::t1#35 idx#79 ] main:2::assertType:35 [ assertType::t1#35 idx#79 ] main:2::assertType:37 [ assertType::t1#35 idx#79 ] main:2::assertType:39 [ assertType::t1#35 idx#79 ] main:2::assertType:41 [ assertType::t1#35 idx#79 ] main:2::assertType:43 [ assertType::t1#35 idx#79 ] main:2::assertType:45 [ assertType::t1#35 idx#79 ] main:2::assertType:47 [ assertType::t1#35 idx#79 ] main:2::assertType:49 [ assertType::t1#35 idx#79 ] main:2::assertType:51 [ assertType::t1#35 idx#79 ] main:2::assertType:53 [ assertType::t1#35 idx#79 ] main:2::assertType:55 [ assertType::t1#35 idx#79 ] main:2::assertType:57 [ assertType::t1#35 idx#79 ] main:2::assertType:59 [ assertType::t1#35 idx#79 ] main:2::assertType:61 [ assertType::t1#35 idx#79 ] main:2::assertType:63 [ assertType::t1#35 idx#79 ] main:2::assertType:65 [ assertType::t1#35 idx#79 ] main:2::assertType:67 [ assertType::t1#35 idx#79 ] main:2::assertType:69 [ assertType::t1#35 idx#79 ] main:2::assertType:71 [ assertType::t1#35 idx#79 ] main:2::assertType:73 [ assertType::t1#35 idx#79 ] ) always clobbers reg byte a
Statement [78] *((const byte*) SCREEN#0 + (byte) idx#79) ← (byte) assertType::t1#35 [ idx#79 ] ( main:2::assertType:5 [ idx#79 ] main:2::assertType:7 [ idx#79 ] main:2::assertType:9 [ idx#79 ] main:2::assertType:11 [ idx#79 ] main:2::assertType:13 [ idx#79 ] main:2::assertType:15 [ idx#79 ] main:2::assertType:17 [ idx#79 ] main:2::assertType:19 [ idx#79 ] main:2::assertType:21 [ idx#79 ] main:2::assertType:23 [ idx#79 ] main:2::assertType:25 [ idx#79 ] main:2::assertType:27 [ idx#79 ] main:2::assertType:29 [ idx#79 ] main:2::assertType:31 [ idx#79 ] main:2::assertType:33 [ idx#79 ] main:2::assertType:35 [ idx#79 ] main:2::assertType:37 [ idx#79 ] main:2::assertType:39 [ idx#79 ] main:2::assertType:41 [ idx#79 ] main:2::assertType:43 [ idx#79 ] main:2::assertType:45 [ idx#79 ] main:2::assertType:47 [ idx#79 ] main:2::assertType:49 [ idx#79 ] main:2::assertType:51 [ idx#79 ] main:2::assertType:53 [ idx#79 ] main:2::assertType:55 [ idx#79 ] main:2::assertType:57 [ idx#79 ] main:2::assertType:59 [ idx#79 ] main:2::assertType:61 [ idx#79 ] main:2::assertType:63 [ idx#79 ] main:2::assertType:65 [ idx#79 ] main:2::assertType:67 [ idx#79 ] main:2::assertType:69 [ idx#79 ] main:2::assertType:71 [ idx#79 ] main:2::assertType:73 [ idx#79 ] ) always clobbers reg byte a
Statement [81] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) GREEN#0 [ assertType::t1#35 idx#79 ] ( main:2::assertType:5 [ assertType::t1#35 idx#79 ] main:2::assertType:7 [ assertType::t1#35 idx#79 ] main:2::assertType:9 [ assertType::t1#35 idx#79 ] main:2::assertType:11 [ assertType::t1#35 idx#79 ] main:2::assertType:13 [ assertType::t1#35 idx#79 ] main:2::assertType:15 [ assertType::t1#35 idx#79 ] main:2::assertType:17 [ assertType::t1#35 idx#79 ] main:2::assertType:19 [ assertType::t1#35 idx#79 ] main:2::assertType:21 [ assertType::t1#35 idx#79 ] main:2::assertType:23 [ assertType::t1#35 idx#79 ] main:2::assertType:25 [ assertType::t1#35 idx#79 ] main:2::assertType:27 [ assertType::t1#35 idx#79 ] main:2::assertType:29 [ assertType::t1#35 idx#79 ] main:2::assertType:31 [ assertType::t1#35 idx#79 ] main:2::assertType:33 [ assertType::t1#35 idx#79 ] main:2::assertType:35 [ assertType::t1#35 idx#79 ] main:2::assertType:37 [ assertType::t1#35 idx#79 ] main:2::assertType:39 [ assertType::t1#35 idx#79 ] main:2::assertType:41 [ assertType::t1#35 idx#79 ] main:2::assertType:43 [ assertType::t1#35 idx#79 ] main:2::assertType:45 [ assertType::t1#35 idx#79 ] main:2::assertType:47 [ assertType::t1#35 idx#79 ] main:2::assertType:49 [ assertType::t1#35 idx#79 ] main:2::assertType:51 [ assertType::t1#35 idx#79 ] main:2::assertType:53 [ assertType::t1#35 idx#79 ] main:2::assertType:55 [ assertType::t1#35 idx#79 ] main:2::assertType:57 [ assertType::t1#35 idx#79 ] main:2::assertType:59 [ assertType::t1#35 idx#79 ] main:2::assertType:61 [ assertType::t1#35 idx#79 ] main:2::assertType:63 [ assertType::t1#35 idx#79 ] main:2::assertType:65 [ assertType::t1#35 idx#79 ] main:2::assertType:67 [ assertType::t1#35 idx#79 ] main:2::assertType:69 [ assertType::t1#35 idx#79 ] main:2::assertType:71 [ assertType::t1#35 idx#79 ] main:2::assertType:73 [ assertType::t1#35 idx#79 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ assertType::t1#35 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ assertType::t2#35 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ idx#79 idx#40 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [] 15.4: zp ZP_BYTE:4 [ idx#79 idx#40 ]
Uplift Scope [assertType] 2: zp ZP_BYTE:3 [ assertType::t2#35 ] 1: zp ZP_BYTE:2 [ assertType::t1#35 ]
Uplift Scope [main]
Uplifting [] best 739 combination reg byte x [ idx#79 idx#40 ]
Uplifting [assertType] best 632 combination zp ZP_BYTE:3 [ assertType::t2#35 ] reg byte y [ assertType::t1#35 ]
Uplifting [main] best 632 combination
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ assertType::t2#35 ]
Uplifting [assertType] best 632 combination zp ZP_BYTE:3 [ assertType::t2#35 ]
Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ assertType::t2#35 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Tests conversion of numbers to correct int types
// See https://gitlab.com/camelot/kickc/issues/181
// Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
// Global Constants & labels
.const TYPEID_SIGNED_BYTE = 2
.const TYPEID_SIGNED_WORD = 4
.const TYPEID_SIGNED_DWORD = 6
.const TYPEID_BYTE = 1
.const TYPEID_WORD = 3
.const TYPEID_DWORD = 5
.const RED = 2
.const GREEN = 5
.label SCREEN = $400
.label COLS = $d800
// @begin
bbegin:
// [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
// @1
b1:
// [2] call main
// [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
// [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
// @end
bend:
// main
main: {
// [5] call assertType
// [75] phi from main to assertType [phi:main->assertType]
assertType_from_main:
// [75] phi (byte) idx#79 = (byte) 0 [phi:main->assertType#0] -- vbuxx=vbuc1
ldx #0
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_BYTE [phi:main->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_BYTE [phi:main->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_BYTE
jsr assertType
// [6] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
jmp b1
// main::@1
b1:
// [7] call assertType
// [75] phi from main::@1 to assertType [phi:main::@1->assertType]
assertType_from_b1:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@1->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@1->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@1->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_WORD
jsr assertType
// [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
jmp b2
// main::@2
b2:
// [9] call assertType
// [75] phi from main::@2 to assertType [phi:main::@2->assertType]
assertType_from_b2:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@2->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@2->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@2->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_DWORD
jsr assertType
// [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
b3_from_b2:
jmp b3
// main::@3
b3:
// [11] call assertType
// [75] phi from main::@3 to assertType [phi:main::@3->assertType]
assertType_from_b3:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@3->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@3->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@3->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_WORD
jsr assertType
// [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
b4_from_b3:
jmp b4
// main::@4
b4:
// [13] call assertType
// [75] phi from main::@4 to assertType [phi:main::@4->assertType]
assertType_from_b4:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@4->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@4->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@4->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_WORD
jsr assertType
// [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
b5_from_b4:
jmp b5
// main::@5
b5:
// [15] call assertType
// [75] phi from main::@5 to assertType [phi:main::@5->assertType]
assertType_from_b5:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@5->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@5->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@5->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_DWORD
jsr assertType
// [16] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
b6_from_b5:
jmp b6
// main::@6
b6:
// [17] call assertType
// [75] phi from main::@6 to assertType [phi:main::@6->assertType]
assertType_from_b6:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@6->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@6->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@6->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_DWORD
jsr assertType
// [18] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
b7_from_b6:
jmp b7
// main::@7
b7:
// [19] call assertType
// [75] phi from main::@7 to assertType [phi:main::@7->assertType]
assertType_from_b7:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@7->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@7->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@7->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_DWORD
jsr assertType
// [20] phi from main::@7 to main::@8 [phi:main::@7->main::@8]
b8_from_b7:
jmp b8
// main::@8
b8:
// [21] call assertType
// [75] phi from main::@8 to assertType [phi:main::@8->assertType]
assertType_from_b8:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@8->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@8->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@8->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_DWORD
jsr assertType
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
b9_from_b8:
jmp b9
// main::@9
b9:
// [23] call assertType
// [75] phi from main::@9 to assertType [phi:main::@9->assertType]
assertType_from_b9:
// [75] phi (byte) idx#79 = (byte) $28 [phi:main::@9->assertType#0] -- vbuxx=vbuc1
ldx #$28
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@9->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@9->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_BYTE
jsr assertType
// [24] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
b10_from_b9:
jmp b10
// main::@10
b10:
// [25] call assertType
// [75] phi from main::@10 to assertType [phi:main::@10->assertType]
assertType_from_b10:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@10->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@10->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@10->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_BYTE
jsr assertType
// [26] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
b11_from_b10:
jmp b11
// main::@11
b11:
// [27] call assertType
// [75] phi from main::@11 to assertType [phi:main::@11->assertType]
assertType_from_b11:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@11->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@11->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@11->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
b12_from_b11:
jmp b12
// main::@12
b12:
// [29] call assertType
// [75] phi from main::@12 to assertType [phi:main::@12->assertType]
assertType_from_b12:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@12->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@12->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@12->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [30] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
b13_from_b12:
jmp b13
// main::@13
b13:
// [31] call assertType
// [75] phi from main::@13 to assertType [phi:main::@13->assertType]
assertType_from_b13:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@13->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@13->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@13->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [32] phi from main::@13 to main::@14 [phi:main::@13->main::@14]
b14_from_b13:
jmp b14
// main::@14
b14:
// [33] call assertType
// [75] phi from main::@14 to assertType [phi:main::@14->assertType]
assertType_from_b14:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@14->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@14->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@14->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [34] phi from main::@14 to main::@15 [phi:main::@14->main::@15]
b15_from_b14:
jmp b15
// main::@15
b15:
// [35] call assertType
// [75] phi from main::@15 to assertType [phi:main::@15->assertType]
assertType_from_b15:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@15->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@15->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@15->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [36] phi from main::@15 to main::@16 [phi:main::@15->main::@16]
b16_from_b15:
jmp b16
// main::@16
b16:
// [37] call assertType
// [75] phi from main::@16 to assertType [phi:main::@16->assertType]
assertType_from_b16:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@16->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@16->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@16->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [38] phi from main::@16 to main::@17 [phi:main::@16->main::@17]
b17_from_b16:
jmp b17
// main::@17
b17:
// [39] call assertType
// [75] phi from main::@17 to assertType [phi:main::@17->assertType]
assertType_from_b17:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@17->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@17->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@17->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
b18_from_b17:
jmp b18
// main::@18
b18:
// [41] call assertType
// [75] phi from main::@18 to assertType [phi:main::@18->assertType]
assertType_from_b18:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@18->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@18->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@18->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [42] phi from main::@18 to main::@19 [phi:main::@18->main::@19]
b19_from_b18:
jmp b19
// main::@19
b19:
// [43] call assertType
// [75] phi from main::@19 to assertType [phi:main::@19->assertType]
assertType_from_b19:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@19->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@19->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@19->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [44] phi from main::@19 to main::@20 [phi:main::@19->main::@20]
b20_from_b19:
jmp b20
// main::@20
b20:
// [45] call assertType
// [75] phi from main::@20 to assertType [phi:main::@20->assertType]
assertType_from_b20:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@20->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@20->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@20->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [46] phi from main::@20 to main::@21 [phi:main::@20->main::@21]
b21_from_b20:
jmp b21
// main::@21
b21:
// [47] call assertType
// [75] phi from main::@21 to assertType [phi:main::@21->assertType]
assertType_from_b21:
// [75] phi (byte) idx#79 = (byte) $50 [phi:main::@21->assertType#0] -- vbuxx=vbuc1
ldx #$50
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@21->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@21->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_BYTE
jsr assertType
// [48] phi from main::@21 to main::@22 [phi:main::@21->main::@22]
b22_from_b21:
jmp b22
// main::@22
b22:
// [49] call assertType
// [75] phi from main::@22 to assertType [phi:main::@22->assertType]
assertType_from_b22:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@22->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@22->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@22->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_BYTE
jsr assertType
// [50] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
b23_from_b22:
jmp b23
// main::@23
b23:
// [51] call assertType
// [75] phi from main::@23 to assertType [phi:main::@23->assertType]
assertType_from_b23:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@23->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@23->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@23->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_BYTE
jsr assertType
// [52] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
b24_from_b23:
jmp b24
// main::@24
b24:
// [53] call assertType
// [75] phi from main::@24 to assertType [phi:main::@24->assertType]
assertType_from_b24:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@24->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@24->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@24->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [54] phi from main::@24 to main::@25 [phi:main::@24->main::@25]
b25_from_b24:
jmp b25
// main::@25
b25:
// [55] call assertType
// [75] phi from main::@25 to assertType [phi:main::@25->assertType]
assertType_from_b25:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@25->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@25->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@25->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [56] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
b26_from_b25:
jmp b26
// main::@26
b26:
// [57] call assertType
// [75] phi from main::@26 to assertType [phi:main::@26->assertType]
assertType_from_b26:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@26->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@26->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@26->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [58] phi from main::@26 to main::@27 [phi:main::@26->main::@27]
b27_from_b26:
jmp b27
// main::@27
b27:
// [59] call assertType
// [75] phi from main::@27 to assertType [phi:main::@27->assertType]
assertType_from_b27:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@27->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@27->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@27->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [60] phi from main::@27 to main::@28 [phi:main::@27->main::@28]
b28_from_b27:
jmp b28
// main::@28
b28:
// [61] call assertType
// [75] phi from main::@28 to assertType [phi:main::@28->assertType]
assertType_from_b28:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@28->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@28->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@28->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [62] phi from main::@28 to main::@29 [phi:main::@28->main::@29]
b29_from_b28:
jmp b29
// main::@29
b29:
// [63] call assertType
// [75] phi from main::@29 to assertType [phi:main::@29->assertType]
assertType_from_b29:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@29->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@29->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@29->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_WORD
jsr assertType
// [64] phi from main::@29 to main::@30 [phi:main::@29->main::@30]
b30_from_b29:
jmp b30
// main::@30
b30:
// [65] call assertType
// [75] phi from main::@30 to assertType [phi:main::@30->assertType]
assertType_from_b30:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@30->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@30->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@30->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [66] phi from main::@30 to main::@31 [phi:main::@30->main::@31]
b31_from_b30:
jmp b31
// main::@31
b31:
// [67] call assertType
// [75] phi from main::@31 to assertType [phi:main::@31->assertType]
assertType_from_b31:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@31->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@31->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@31->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [68] phi from main::@31 to main::@32 [phi:main::@31->main::@32]
b32_from_b31:
jmp b32
// main::@32
b32:
// [69] call assertType
// [75] phi from main::@32 to assertType [phi:main::@32->assertType]
assertType_from_b32:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@32->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@32->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@32->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [70] phi from main::@32 to main::@33 [phi:main::@32->main::@33]
b33_from_b32:
jmp b33
// main::@33
b33:
// [71] call assertType
// [75] phi from main::@33 to assertType [phi:main::@33->assertType]
assertType_from_b33:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@33->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@33->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@33->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_DWORD
jsr assertType
// [72] phi from main::@33 to main::@34 [phi:main::@33->main::@34]
b34_from_b33:
jmp b34
// main::@34
b34:
// [73] call assertType
// [75] phi from main::@34 to assertType [phi:main::@34->assertType]
assertType_from_b34:
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@34->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@34->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@34->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_DWORD
jsr assertType
jmp breturn
// main::@return
breturn:
// [74] return
rts
}
// assertType
// Check that the two passed type IDs are equal.
// Shows a letter symbolizing t1
// If they are equal the letter is green - if not it is red.
// assertType(byte register(Y) t1, byte zeropage(2) t2)
assertType: {
.label t2 = 2
// [76] if((byte) assertType::t1#35==(byte) assertType::t2#35) goto assertType::@1 -- vbuyy_eq_vbuz1_then_la1
tya
cmp.z t2
beq b1
jmp b3
// assertType::@3
b3:
// [77] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) RED#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #RED
sta COLS,x
jmp b2
// assertType::@2
b2:
// [78] *((const byte*) SCREEN#0 + (byte) idx#79) ← (byte) assertType::t1#35 -- pbuc1_derefidx_vbuxx=vbuyy
tya
sta SCREEN,x
// [79] (byte) idx#40 ← ++ (byte) idx#79 -- vbuxx=_inc_vbuxx
inx
jmp breturn
// assertType::@return
breturn:
// [80] return
rts
// assertType::@1
b1:
// [81] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #GREEN
sta COLS,x
jmp b2
}
// File Data
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp b13
Removing instruction jmp b14
Removing instruction jmp b15
Removing instruction jmp b16
Removing instruction jmp b17
Removing instruction jmp b18
Removing instruction jmp b19
Removing instruction jmp b20
Removing instruction jmp b21
Removing instruction jmp b22
Removing instruction jmp b23
Removing instruction jmp b24
Removing instruction jmp b25
Removing instruction jmp b26
Removing instruction jmp b27
Removing instruction jmp b28
Removing instruction jmp b29
Removing instruction jmp b30
Removing instruction jmp b31
Removing instruction jmp b32
Removing instruction jmp b33
Removing instruction jmp b34
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldy #TYPEID_SIGNED_BYTE with TAY
Replacing instruction ldy #TYPEID_SIGNED_WORD with TAY
Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY
Replacing instruction ldy #TYPEID_SIGNED_WORD with TAY
Replacing instruction ldy #TYPEID_SIGNED_WORD with TAY
Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY
Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY
Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY
Replacing instruction ldy #TYPEID_SIGNED_DWORD with TAY
Replacing instruction ldy #TYPEID_BYTE with TAY
Replacing instruction ldy #TYPEID_BYTE with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_BYTE with TAY
Replacing instruction ldy #TYPEID_BYTE with TAY
Replacing instruction ldy #TYPEID_BYTE with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_WORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Replacing instruction ldy #TYPEID_DWORD with TAY
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction main_from_b1:
Removing instruction bend_from_b1:
Removing instruction b1_from_main:
Removing instruction assertType_from_b1:
Removing instruction b2_from_b1:
Removing instruction assertType_from_b2:
Removing instruction b3_from_b2:
Removing instruction assertType_from_b3:
Removing instruction b4_from_b3:
Removing instruction assertType_from_b4:
Removing instruction b5_from_b4:
Removing instruction assertType_from_b5:
Removing instruction b6_from_b5:
Removing instruction assertType_from_b6:
Removing instruction b7_from_b6:
Removing instruction assertType_from_b7:
Removing instruction b8_from_b7:
Removing instruction assertType_from_b8:
Removing instruction b9_from_b8:
Removing instruction assertType_from_b9:
Removing instruction b10_from_b9:
Removing instruction assertType_from_b10:
Removing instruction b11_from_b10:
Removing instruction assertType_from_b11:
Removing instruction b12_from_b11:
Removing instruction assertType_from_b12:
Removing instruction b13_from_b12:
Removing instruction assertType_from_b13:
Removing instruction b14_from_b13:
Removing instruction assertType_from_b14:
Removing instruction b15_from_b14:
Removing instruction assertType_from_b15:
Removing instruction b16_from_b15:
Removing instruction assertType_from_b16:
Removing instruction b17_from_b16:
Removing instruction assertType_from_b17:
Removing instruction b18_from_b17:
Removing instruction assertType_from_b18:
Removing instruction b19_from_b18:
Removing instruction assertType_from_b19:
Removing instruction b20_from_b19:
Removing instruction assertType_from_b20:
Removing instruction b21_from_b20:
Removing instruction assertType_from_b21:
Removing instruction b22_from_b21:
Removing instruction assertType_from_b22:
Removing instruction b23_from_b22:
Removing instruction assertType_from_b23:
Removing instruction b24_from_b23:
Removing instruction assertType_from_b24:
Removing instruction b25_from_b24:
Removing instruction assertType_from_b25:
Removing instruction b26_from_b25:
Removing instruction assertType_from_b26:
Removing instruction b27_from_b26:
Removing instruction assertType_from_b27:
Removing instruction b28_from_b27:
Removing instruction assertType_from_b28:
Removing instruction b29_from_b28:
Removing instruction assertType_from_b29:
Removing instruction b30_from_b29:
Removing instruction assertType_from_b30:
Removing instruction b31_from_b30:
Removing instruction assertType_from_b31:
Removing instruction b32_from_b31:
Removing instruction assertType_from_b32:
Removing instruction b33_from_b32:
Removing instruction assertType_from_b33:
Removing instruction b34_from_b33:
Removing instruction assertType_from_b34:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction assertType_from_main:
Removing instruction b1:
Removing instruction b2:
Removing instruction b3:
Removing instruction b4:
Removing instruction b5:
Removing instruction b6:
Removing instruction b7:
Removing instruction b8:
Removing instruction b9:
Removing instruction b10:
Removing instruction b11:
Removing instruction b12:
Removing instruction b13:
Removing instruction b14:
Removing instruction b15:
Removing instruction b16:
Removing instruction b17:
Removing instruction b18:
Removing instruction b19:
Removing instruction b20:
Removing instruction b21:
Removing instruction b22:
Removing instruction b23:
Removing instruction b24:
Removing instruction b25:
Removing instruction b26:
Removing instruction b27:
Removing instruction b28:
Removing instruction b29:
Removing instruction b30:
Removing instruction b31:
Removing instruction b32:
Removing instruction b33:
Removing instruction b34:
Removing instruction breturn:
Removing instruction b3:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte*) COLS
(const byte*) COLS#0 COLS = (byte*)(word) $d800
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte) 5
(byte) RED
(const byte) RED#0 RED = (byte) 2
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*)(word) $400
(const byte) TYPEID_BYTE TYPEID_BYTE = (number) 1
(const byte) TYPEID_DWORD TYPEID_DWORD = (number) 5
(const byte) TYPEID_SIGNED_BYTE TYPEID_SIGNED_BYTE = (number) 2
(const byte) TYPEID_SIGNED_DWORD TYPEID_SIGNED_DWORD = (number) 6
(const byte) TYPEID_SIGNED_WORD TYPEID_SIGNED_WORD = (number) 4
(const byte) TYPEID_WORD TYPEID_WORD = (number) 3
(void()) assertType((byte) assertType::t1 , (byte) assertType::t2)
(label) assertType::@1
(label) assertType::@2
(label) assertType::@3
(label) assertType::@return
(byte) assertType::t1
(byte) assertType::t1#35 reg byte y 1.0
(byte) assertType::t2
(byte) assertType::t2#35 t2 zp ZP_BYTE:2 2.0
(byte) idx
(byte) idx#40 reg byte x 0.9999999999999993
(byte) idx#79 reg byte x 14.400000000000007
(void()) main()
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@18
(label) main::@19
(label) main::@2
(label) main::@20
(label) main::@21
(label) main::@22
(label) main::@23
(label) main::@24
(label) main::@25
(label) main::@26
(label) main::@27
(label) main::@28
(label) main::@29
(label) main::@3
(label) main::@30
(label) main::@31
(label) main::@32
(label) main::@33
(label) main::@34
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
reg byte y [ assertType::t1#35 ]
zp ZP_BYTE:2 [ assertType::t2#35 ]
reg byte x [ idx#79 idx#40 ]
FINAL ASSEMBLER
Score: 506
// File Comments
// Tests conversion of numbers to correct int types
// See https://gitlab.com/camelot/kickc/issues/181
// Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
// Global Constants & labels
.const TYPEID_SIGNED_BYTE = 2
.const TYPEID_SIGNED_WORD = 4
.const TYPEID_SIGNED_DWORD = 6
.const TYPEID_BYTE = 1
.const TYPEID_WORD = 3
.const TYPEID_DWORD = 5
.const RED = 2
.const GREEN = 5
.label SCREEN = $400
.label COLS = $d800
// @begin
// [1] phi from @begin to @1 [phi:@begin->@1]
// @1
// [2] call main
// [4] phi from @1 to main [phi:@1->main]
// [3] phi from @1 to @end [phi:@1->@end]
// @end
// main
main: {
// assertType(typeid(12sb+12), typeid(signed byte))
// [5] call assertType
// [75] phi from main to assertType [phi:main->assertType]
// [75] phi (byte) idx#79 = (byte) 0 [phi:main->assertType#0] -- vbuxx=vbuc1
ldx #0
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_BYTE [phi:main->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_BYTE [phi:main->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [6] phi from main to main::@1 [phi:main->main::@1]
// main::@1
// assertType(typeid(12sb+130), typeid(signed word))
// [7] call assertType
// [75] phi from main::@1 to assertType [phi:main::@1->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@1->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@1->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@1->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
// main::@2
// assertType(typeid(12sb+33000), typeid(signed dword))
// [9] call assertType
// [75] phi from main::@2 to assertType [phi:main::@2->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@2->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@2->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@2->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
// main::@3
// assertType(typeid(12sw+12), typeid(signed word))
// [11] call assertType
// [75] phi from main::@3 to assertType [phi:main::@3->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@3->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@3->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@3->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
// main::@4
// assertType(typeid(12sw+130), typeid(signed word))
// [13] call assertType
// [75] phi from main::@4 to assertType [phi:main::@4->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@4->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@4->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_WORD [phi:main::@4->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
// main::@5
// assertType(typeid(12sw+100000), typeid(signed dword))
// [15] call assertType
// [75] phi from main::@5 to assertType [phi:main::@5->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@5->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@5->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@5->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [16] phi from main::@5 to main::@6 [phi:main::@5->main::@6]
// main::@6
// assertType(typeid(12sd+12), typeid(signed dword))
// [17] call assertType
// [75] phi from main::@6 to assertType [phi:main::@6->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@6->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@6->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@6->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [18] phi from main::@6 to main::@7 [phi:main::@6->main::@7]
// main::@7
// assertType(typeid(12sd+130), typeid(signed dword))
// [19] call assertType
// [75] phi from main::@7 to assertType [phi:main::@7->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@7->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@7->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@7->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [20] phi from main::@7 to main::@8 [phi:main::@7->main::@8]
// main::@8
// assertType(typeid(12sd+100000), typeid(signed dword))
// [21] call assertType
// [75] phi from main::@8 to assertType [phi:main::@8->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@8->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@8->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_SIGNED_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@8->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
// main::@9
// assertType(typeid(12ub+12), typeid(unsigned byte))
// [23] call assertType
// [75] phi from main::@9 to assertType [phi:main::@9->assertType]
// [75] phi (byte) idx#79 = (byte) $28 [phi:main::@9->assertType#0] -- vbuxx=vbuc1
ldx #$28
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@9->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@9->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [24] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
// main::@10
// assertType(typeid(12ub+250), typeid(unsigned byte))
// [25] call assertType
// [75] phi from main::@10 to assertType [phi:main::@10->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@10->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@10->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@10->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [26] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
// main::@11
// assertType(typeid(12ub+300), typeid(unsigned word))
// [27] call assertType
// [75] phi from main::@11 to assertType [phi:main::@11->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@11->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@11->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@11->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
// main::@12
// assertType(typeid(12ub+65534), typeid(unsigned word))
// [29] call assertType
// [75] phi from main::@12 to assertType [phi:main::@12->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@12->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@12->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@12->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [30] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
// main::@13
// assertType(typeid(12ub+66000), typeid(unsigned dword))
// [31] call assertType
// [75] phi from main::@13 to assertType [phi:main::@13->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@13->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@13->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@13->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [32] phi from main::@13 to main::@14 [phi:main::@13->main::@14]
// main::@14
// assertType(typeid(12uw+12), typeid(unsigned word))
// [33] call assertType
// [75] phi from main::@14 to assertType [phi:main::@14->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@14->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@14->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@14->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [34] phi from main::@14 to main::@15 [phi:main::@14->main::@15]
// main::@15
// assertType(typeid(12uw+130), typeid(unsigned word))
// [35] call assertType
// [75] phi from main::@15 to assertType [phi:main::@15->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@15->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@15->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@15->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [36] phi from main::@15 to main::@16 [phi:main::@15->main::@16]
// main::@16
// assertType(typeid(12uw+66000), typeid(unsigned dword))
// [37] call assertType
// [75] phi from main::@16 to assertType [phi:main::@16->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@16->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@16->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@16->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [38] phi from main::@16 to main::@17 [phi:main::@16->main::@17]
// main::@17
// assertType(typeid(12ud+12), typeid(unsigned dword))
// [39] call assertType
// [75] phi from main::@17 to assertType [phi:main::@17->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@17->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@17->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@17->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
// main::@18
// assertType(typeid(12ud+130), typeid(unsigned dword))
// [41] call assertType
// [75] phi from main::@18 to assertType [phi:main::@18->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@18->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@18->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@18->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [42] phi from main::@18 to main::@19 [phi:main::@18->main::@19]
// main::@19
// assertType(typeid(12ud+66000), typeid(unsigned dword))
// [43] call assertType
// [75] phi from main::@19 to assertType [phi:main::@19->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@19->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@19->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@19->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [44] phi from main::@19 to main::@20 [phi:main::@19->main::@20]
// main::@20
// assertType(typeid(12ub+3000000000), typeid(unsigned dword))
// [45] call assertType
// [75] phi from main::@20 to assertType [phi:main::@20->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@20->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@20->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@20->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [46] phi from main::@20 to main::@21 [phi:main::@20->main::@21]
// main::@21
// assertType(typeid(12ub+-12), typeid(unsigned byte))
// [47] call assertType
// [75] phi from main::@21 to assertType [phi:main::@21->assertType]
// [75] phi (byte) idx#79 = (byte) $50 [phi:main::@21->assertType#0] -- vbuxx=vbuc1
ldx #$50
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@21->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@21->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [48] phi from main::@21 to main::@22 [phi:main::@21->main::@22]
// main::@22
// assertType(typeid(12ub+-120), typeid(unsigned byte))
// [49] call assertType
// [75] phi from main::@22 to assertType [phi:main::@22->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@22->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@22->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@22->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [50] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
// main::@23
// assertType(typeid(12ub+-250), typeid(unsigned byte))
// [51] call assertType
// [75] phi from main::@23 to assertType [phi:main::@23->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@23->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_BYTE [phi:main::@23->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_BYTE
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_BYTE [phi:main::@23->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [52] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
// main::@24
// assertType(typeid(12ub+-260), typeid(unsigned word))
// [53] call assertType
// [75] phi from main::@24 to assertType [phi:main::@24->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@24->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@24->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@24->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [54] phi from main::@24 to main::@25 [phi:main::@24->main::@25]
// main::@25
// assertType(typeid(12ub+-65000), typeid(unsigned word))
// [55] call assertType
// [75] phi from main::@25 to assertType [phi:main::@25->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@25->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@25->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@25->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [56] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
// main::@26
// assertType(typeid(12ub+-66000), typeid(unsigned dword))
// [57] call assertType
// [75] phi from main::@26 to assertType [phi:main::@26->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@26->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@26->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@26->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [58] phi from main::@26 to main::@27 [phi:main::@26->main::@27]
// main::@27
// assertType(typeid(12uw+-12), typeid(unsigned word))
// [59] call assertType
// [75] phi from main::@27 to assertType [phi:main::@27->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@27->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@27->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@27->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [60] phi from main::@27 to main::@28 [phi:main::@27->main::@28]
// main::@28
// assertType(typeid(12uw+-130), typeid(unsigned word))
// [61] call assertType
// [75] phi from main::@28 to assertType [phi:main::@28->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@28->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@28->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@28->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [62] phi from main::@28 to main::@29 [phi:main::@28->main::@29]
// main::@29
// assertType(typeid(12uw+-65000), typeid(unsigned word))
// [63] call assertType
// [75] phi from main::@29 to assertType [phi:main::@29->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@29->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_WORD [phi:main::@29->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_WORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_WORD [phi:main::@29->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [64] phi from main::@29 to main::@30 [phi:main::@29->main::@30]
// main::@30
// assertType(typeid(12uw+-66000), typeid(unsigned dword))
// [65] call assertType
// [75] phi from main::@30 to assertType [phi:main::@30->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@30->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@30->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@30->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [66] phi from main::@30 to main::@31 [phi:main::@30->main::@31]
// main::@31
// assertType(typeid(12ud+-12), typeid(unsigned dword))
// [67] call assertType
// [75] phi from main::@31 to assertType [phi:main::@31->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@31->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@31->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@31->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [68] phi from main::@31 to main::@32 [phi:main::@31->main::@32]
// main::@32
// assertType(typeid(12ud+-130), typeid(unsigned dword))
// [69] call assertType
// [75] phi from main::@32 to assertType [phi:main::@32->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@32->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@32->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@32->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [70] phi from main::@32 to main::@33 [phi:main::@32->main::@33]
// main::@33
// assertType(typeid(12ud+-66000), typeid(unsigned dword))
// [71] call assertType
// [75] phi from main::@33 to assertType [phi:main::@33->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@33->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@33->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_DWORD [phi:main::@33->assertType#2] -- vbuyy=vbuc1
tay
jsr assertType
// [72] phi from main::@33 to main::@34 [phi:main::@33->main::@34]
// main::@34
// assertType(typeid(12sb+-2100000000), typeid(unsigned dword))
// [73] call assertType
// [75] phi from main::@34 to assertType [phi:main::@34->assertType]
// [75] phi (byte) idx#79 = (byte) idx#40 [phi:main::@34->assertType#0] -- register_copy
// [75] phi (byte) assertType::t2#35 = (const byte) TYPEID_DWORD [phi:main::@34->assertType#1] -- vbuz1=vbuc1
lda #TYPEID_DWORD
sta.z assertType.t2
// [75] phi (byte) assertType::t1#35 = (const byte) TYPEID_SIGNED_DWORD [phi:main::@34->assertType#2] -- vbuyy=vbuc1
ldy #TYPEID_SIGNED_DWORD
jsr assertType
// main::@return
// }
// [74] return
rts
}
// assertType
// Check that the two passed type IDs are equal.
// Shows a letter symbolizing t1
// If they are equal the letter is green - if not it is red.
// assertType(byte register(Y) t1, byte zeropage(2) t2)
assertType: {
.label t2 = 2
// if(t1==t2)
// [76] if((byte) assertType::t1#35==(byte) assertType::t2#35) goto assertType::@1 -- vbuyy_eq_vbuz1_then_la1
tya
cmp.z t2
beq b1
// assertType::@3
// COLS[idx] = RED
// [77] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) RED#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #RED
sta COLS,x
// assertType::@2
b2:
// SCREEN[idx++] = t1
// [78] *((const byte*) SCREEN#0 + (byte) idx#79) ← (byte) assertType::t1#35 -- pbuc1_derefidx_vbuxx=vbuyy
tya
sta SCREEN,x
// SCREEN[idx++] = t1;
// [79] (byte) idx#40 ← ++ (byte) idx#79 -- vbuxx=_inc_vbuxx
inx
// assertType::@return
// }
// [80] return
rts
// assertType::@1
b1:
// COLS[idx] = GREEN
// [81] *((const byte*) COLS#0 + (byte) idx#79) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #GREEN
sta COLS,x
jmp b2
}
// File Data