From b05160bfffcfc53e028199731c01df33c3e885ba Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sat, 6 Jul 2019 11:24:16 +0200 Subject: [PATCH] Made char (without sign qualifier) unsigned as allowed by standard C. Closes #204 --- .../kickc/model/types/SymbolType.java | 2 +- src/test/kc/c-types.kc | 4 +- src/test/kc/typeid-simple.kc | 17 + src/test/ref/c-types.asm | 26 +- src/test/ref/c-types.cfg | 59 +- src/test/ref/c-types.log | 801 ++++++++---------- src/test/ref/c-types.sym | 22 +- src/test/ref/typeid-simple.asm | 23 + src/test/ref/typeid-simple.cfg | 14 +- src/test/ref/typeid-simple.log | 285 ++++++- 10 files changed, 719 insertions(+), 534 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java index c0abe5d1b..19fe8c93e 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java @@ -49,7 +49,7 @@ public interface SymbolType { case "signed byte": return SBYTE; case "char": - return SBYTE; + return BYTE; case "unsigned char": return BYTE; case "signed char": diff --git a/src/test/kc/c-types.kc b/src/test/kc/c-types.kc index 52a00b341..a92ded5d5 100644 --- a/src/test/kc/c-types.kc +++ b/src/test/kc/c-types.kc @@ -12,13 +12,13 @@ void main() { void testChar() { unsigned char u = 14; - char n = -14; + char n = 14; signed char s = -14; print_str("char: "); print_byte(u); print_char(' '); - print_sbyte(n); + print_byte(n); print_char(' '); print_sbyte(s); print_ln(); diff --git a/src/test/kc/typeid-simple.kc b/src/test/kc/typeid-simple.kc index 48f6b5796..03c0d3fd0 100644 --- a/src/test/kc/typeid-simple.kc +++ b/src/test/kc/typeid-simple.kc @@ -23,4 +23,21 @@ void main() { SCREEN[idx++] = typeid(byte()*); // Pointer to pointer SCREEN[idx++] = typeid(byte**); + + idx = 40; + // Test C types + SCREEN[idx++] = typeid(char); + SCREEN[idx++] = typeid(unsigned char); + SCREEN[idx++] = typeid(signed char); + SCREEN[idx++] = typeid(short); + SCREEN[idx++] = typeid(unsigned short); + SCREEN[idx++] = typeid(signed short); + SCREEN[idx++] = typeid(int); + SCREEN[idx++] = typeid(unsigned int); + SCREEN[idx++] = typeid(signed int); + SCREEN[idx++] = typeid(long); + SCREEN[idx++] = typeid(unsigned long); + SCREEN[idx++] = typeid(signed long); + + } diff --git a/src/test/ref/c-types.asm b/src/test/ref/c-types.asm index 1d9a424d6..7b75a18f6 100644 --- a/src/test/ref/c-types.asm +++ b/src/test/ref/c-types.asm @@ -286,8 +286,8 @@ testShort: { } testChar: { .const u = $e - .const n = -$e - .const s = -$e + .const n = $e + .label s = -$e lda #<$400 sta print_char_cursor lda #>$400 @@ -302,10 +302,9 @@ testChar: { lda #' ' jsr print_char ldx #n - jsr print_sbyte + jsr print_byte lda #' ' jsr print_char - ldx #s jsr print_sbyte lda #<$400 sta print_line_cursor @@ -316,24 +315,13 @@ testChar: { str: .text "char: @" } // Print a signed byte as HEX -// print_sbyte(signed byte register(X) b) print_sbyte: { - cpx #0 - bmi b1 - lda #' ' - jsr print_char - b2: - jsr print_byte - rts - b1: + .const b = -testChar.s lda #'-' jsr print_char - txa - eor #$ff - clc - adc #1 - tax - jmp b2 + ldx #b + jsr print_byte + rts } // Clear the screen. Also resets current line/char cursor. print_cls: { diff --git a/src/test/ref/c-types.cfg b/src/test/ref/c-types.cfg index 326f39408..8488e29d8 100644 --- a/src/test/ref/c-types.cfg +++ b/src/test/ref/c-types.cfg @@ -117,24 +117,24 @@ print_word::@1: scope:[print_word] from print_word print_word::@return: scope:[print_word] from print_word::@1 [55] return to:@return -print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 - [56] (byte*) print_char_cursor#146 ← phi( print_sbyte::@2/(byte*) print_char_cursor#25 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#25 testChar::@1/(byte*) print_char_cursor#134 ) - [56] (byte) print_byte::b#4 ← phi( print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(const byte) testChar::u#0 ) - [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte) 4 +print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 testChar::@3 + [56] (byte*) print_char_cursor#146 ← phi( print_sbyte::@2/(byte*) print_char_cursor#25 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#25 testChar::@1/(byte*) print_char_cursor#134 testChar::@3/(byte*) print_char_cursor#25 ) + [56] (byte) print_byte::b#5 ← phi( print_sbyte::@2/(byte)(const signed byte) print_sbyte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(const byte) testChar::u#0 testChar::@3/(const byte) testChar::n#0 ) + [57] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [58] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [59] call print_char to:print_byte::@1 print_byte::@1: scope:[print_byte] from print_byte - [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte) $f + [60] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [61] (byte) print_char::ch#6 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [62] call print_char to:print_byte::@return print_byte::@return: scope:[print_byte] from print_byte::@1 [63] return to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sdword::@2 print_sword::@1 print_sword::@3 testChar::@2 testChar::@4 testInt::@2 testInt::@4 testLong::@2 testLong::@4 testShort::@2 testShort::@4 - [64] (byte*) print_char_cursor#92 ← phi( print_byte/(byte*) print_char_cursor#146 print_byte::@1/(byte*) print_char_cursor#25 print_sbyte::@1/(byte*) print_char_cursor#25 print_sbyte::@3/(byte*) print_char_cursor#25 print_sdword::@2/(byte*) print_char_cursor#25 print_sword::@1/(byte*) print_char_cursor#25 print_sword::@3/(byte*) print_char_cursor#25 testChar::@2/(byte*) print_char_cursor#25 testChar::@4/(byte*) print_char_cursor#25 testInt::@2/(byte*) print_char_cursor#25 testInt::@4/(byte*) print_char_cursor#25 testLong::@2/(byte*) print_char_cursor#25 testLong::@4/(byte*) print_char_cursor#25 testShort::@2/(byte*) print_char_cursor#25 testShort::@4/(byte*) print_char_cursor#25 ) - [64] (byte) print_char::ch#15 ← phi( print_byte/(byte) print_char::ch#5 print_byte::@1/(byte) print_char::ch#6 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sdword::@2/(byte) '-' print_sword::@1/(byte) '-' print_sword::@3/(byte) ' ' testChar::@2/(byte) ' ' testChar::@4/(byte) ' ' testInt::@2/(byte) ' ' testInt::@4/(byte) ' ' testLong::@2/(byte) ' ' testLong::@4/(byte) ' ' testShort::@2/(byte) ' ' testShort::@4/(byte) ' ' ) +print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sdword::@2 print_sword::@1 print_sword::@3 testChar::@2 testChar::@4 testInt::@2 testInt::@4 testLong::@2 testLong::@4 testShort::@2 testShort::@4 + [64] (byte*) print_char_cursor#92 ← phi( print_byte/(byte*) print_char_cursor#146 print_byte::@1/(byte*) print_char_cursor#25 print_sbyte::@1/(byte*) print_char_cursor#25 print_sdword::@2/(byte*) print_char_cursor#25 print_sword::@1/(byte*) print_char_cursor#25 print_sword::@3/(byte*) print_char_cursor#25 testChar::@2/(byte*) print_char_cursor#25 testChar::@4/(byte*) print_char_cursor#25 testInt::@2/(byte*) print_char_cursor#25 testInt::@4/(byte*) print_char_cursor#25 testLong::@2/(byte*) print_char_cursor#25 testLong::@4/(byte*) print_char_cursor#25 testShort::@2/(byte*) print_char_cursor#25 testShort::@4/(byte*) print_char_cursor#25 ) + [64] (byte) print_char::ch#15 ← phi( print_byte/(byte) print_char::ch#5 print_byte::@1/(byte) print_char::ch#6 print_sbyte::@1/(byte) '-' print_sdword::@2/(byte) '-' print_sword::@1/(byte) '-' print_sword::@3/(byte) ' ' testChar::@2/(byte) ' ' testChar::@4/(byte) ' ' testInt::@2/(byte) ' ' testInt::@4/(byte) ' ' testLong::@2/(byte) ' ' testLong::@4/(byte) ' ' testShort::@2/(byte) ' ' testShort::@4/(byte) ' ' ) [65] *((byte*) print_char_cursor#92) ← (byte) print_char::ch#15 [66] (byte*) print_char_cursor#25 ← ++ (byte*) print_char_cursor#92 to:print_char::@return @@ -257,7 +257,7 @@ testChar::@2: scope:[testChar] from testChar::@1 to:testChar::@3 testChar::@3: scope:[testChar] from testChar::@2 [122] phi() - [123] call print_sbyte + [123] call print_byte to:testChar::@4 testChar::@4: scope:[testChar] from testChar::@3 [124] phi() @@ -274,38 +274,29 @@ testChar::@6: scope:[testChar] from testChar::@5 testChar::@return: scope:[testChar] from testChar::@6 [130] return to:@return -print_sbyte: scope:[print_sbyte] from testChar::@3 testChar::@5 - [131] (signed byte) print_sbyte::b#3 ← phi( testChar::@3/(const signed byte) testChar::n#0 testChar::@5/(const signed byte) testChar::s#0 ) - [132] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 - to:print_sbyte::@3 -print_sbyte::@3: scope:[print_sbyte] from print_sbyte - [133] phi() - [134] call print_char +print_sbyte: scope:[print_sbyte] from testChar::@5 + [131] phi() + to:print_sbyte::@1 +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + [132] phi() + [133] call print_char to:print_sbyte::@2 -print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 - [135] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) - [136] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - [137] call print_byte +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@1 + [134] phi() + [135] call print_byte to:print_sbyte::@return print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 - [138] return + [136] return to:@return -print_sbyte::@1: scope:[print_sbyte] from print_sbyte - [139] phi() - [140] call print_char - to:print_sbyte::@4 -print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 - [141] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 - to:print_sbyte::@2 print_cls: scope:[print_cls] from main - [142] phi() + [137] phi() to:print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - [143] (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) - [144] *((byte*) print_cls::sc#2) ← (byte) ' ' - [145] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 - [146] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 + [138] (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) + [139] *((byte*) print_cls::sc#2) ← (byte) ' ' + [140] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + [141] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls::@1 - [147] return + [142] return to:@return diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index 4be1819a8..e37f3c084 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -1,5 +1,5 @@ Identified constant variable (byte) testChar::u -Identified constant variable (signed byte) testChar::n +Identified constant variable (byte) testChar::n Identified constant variable (signed byte) testChar::s Identified constant variable (word) testShort::u Identified constant variable (signed word) testShort::n @@ -138,40 +138,40 @@ print_sword::@return: scope:[print_sword] from print_sword::@7 (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#75 return to:@return -print_sbyte: scope:[print_sbyte] from testChar::@3 testChar::@5 - (byte*) print_char_cursor#155 ← phi( testChar::@3/(byte*) print_char_cursor#37 testChar::@5/(byte*) print_char_cursor#39 ) - (signed byte) print_sbyte::b#3 ← phi( testChar::@3/(signed byte) print_sbyte::b#1 testChar::@5/(signed byte) print_sbyte::b#2 ) - (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (number) 0 +print_sbyte: scope:[print_sbyte] from testChar::@5 + (byte*) print_char_cursor#155 ← phi( testChar::@5/(byte*) print_char_cursor#39 ) + (signed byte) print_sbyte::b#2 ← phi( testChar::@5/(signed byte) print_sbyte::b#1 ) + (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (number) 0 if((bool~) print_sbyte::$0) goto print_sbyte::@1 to:print_sbyte::@3 print_sbyte::@1: scope:[print_sbyte] from print_sbyte - (signed byte) print_sbyte::b#6 ← phi( print_sbyte/(signed byte) print_sbyte::b#3 ) + (signed byte) print_sbyte::b#5 ← phi( print_sbyte/(signed byte) print_sbyte::b#2 ) (byte*) print_char_cursor#139 ← phi( print_sbyte/(byte*) print_char_cursor#155 ) (byte) print_char::ch#2 ← (byte) '-' call print_char to:print_sbyte::@5 print_sbyte::@5: scope:[print_sbyte] from print_sbyte::@1 - (signed byte) print_sbyte::b#4 ← phi( print_sbyte::@1/(signed byte) print_sbyte::b#6 ) + (signed byte) print_sbyte::b#3 ← phi( print_sbyte::@1/(signed byte) print_sbyte::b#5 ) (byte*) print_char_cursor#76 ← phi( print_sbyte::@1/(byte*) print_char_cursor#26 ) (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#76 - (signed byte~) print_sbyte::$5 ← - (signed byte) print_sbyte::b#4 + (signed byte~) print_sbyte::$5 ← - (signed byte) print_sbyte::b#3 (signed byte) print_sbyte::b#0 ← (signed byte~) print_sbyte::$5 to:print_sbyte::@2 print_sbyte::@3: scope:[print_sbyte] from print_sbyte - (signed byte) print_sbyte::b#8 ← phi( print_sbyte/(signed byte) print_sbyte::b#3 ) + (signed byte) print_sbyte::b#7 ← phi( print_sbyte/(signed byte) print_sbyte::b#2 ) (byte*) print_char_cursor#140 ← phi( print_sbyte/(byte*) print_char_cursor#155 ) (byte) print_char::ch#3 ← (byte) ' ' call print_char to:print_sbyte::@6 print_sbyte::@6: scope:[print_sbyte] from print_sbyte::@3 - (signed byte) print_sbyte::b#7 ← phi( print_sbyte::@3/(signed byte) print_sbyte::b#8 ) + (signed byte) print_sbyte::b#6 ← phi( print_sbyte::@3/(signed byte) print_sbyte::b#7 ) (byte*) print_char_cursor#77 ← phi( print_sbyte::@3/(byte*) print_char_cursor#26 ) (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#77 to:print_sbyte::@2 print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@5 print_sbyte::@6 (byte*) print_char_cursor#141 ← phi( print_sbyte::@5/(byte*) print_char_cursor#9 print_sbyte::@6/(byte*) print_char_cursor#10 ) - (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@5/(signed byte) print_sbyte::b#0 print_sbyte::@6/(signed byte) print_sbyte::b#7 ) - (byte~) print_sbyte::$1 ← ((byte)) (signed byte) print_sbyte::b#5 + (signed byte) print_sbyte::b#4 ← phi( print_sbyte::@5/(signed byte) print_sbyte::b#0 print_sbyte::@6/(signed byte) print_sbyte::b#6 ) + (byte~) print_sbyte::$1 ← ((byte)) (signed byte) print_sbyte::b#4 (byte) print_byte::b#0 ← (byte~) print_sbyte::$1 call print_byte to:print_sbyte::@7 @@ -274,18 +274,18 @@ print_sdword::@return: scope:[print_sdword] from print_sdword::@3 (byte*) print_line_cursor#50 ← phi( @begin/(byte*) print_line_cursor#0 ) (byte[]) print_hextab#0 ← (const string) $0 to:@26 -print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 - (byte*) print_char_cursor#146 ← phi( print_sbyte::@2/(byte*) print_char_cursor#141 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#13 testChar::@1/(byte*) print_char_cursor#35 ) - (byte) print_byte::b#4 ← phi( print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(byte) print_byte::b#3 ) - (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (number) 4 +print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 testChar::@3 + (byte*) print_char_cursor#146 ← phi( print_sbyte::@2/(byte*) print_char_cursor#141 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#13 testChar::@1/(byte*) print_char_cursor#35 testChar::@3/(byte*) print_char_cursor#37 ) + (byte) print_byte::b#5 ← phi( print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(byte) print_byte::b#3 testChar::@3/(byte) print_byte::b#4 ) + (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (number) 4 (byte) print_char::ch#5 ← *((byte[]) print_hextab#0 + (byte~) print_byte::$0) call print_char to:print_byte::@1 print_byte::@1: scope:[print_byte] from print_byte - (byte) print_byte::b#5 ← phi( print_byte/(byte) print_byte::b#4 ) + (byte) print_byte::b#6 ← phi( print_byte/(byte) print_byte::b#5 ) (byte*) print_char_cursor#89 ← phi( print_byte/(byte*) print_char_cursor#26 ) (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#89 - (number~) print_byte::$2 ← (byte) print_byte::b#5 & (number) $f + (number~) print_byte::$2 ← (byte) print_byte::b#6 & (number) $f (byte) print_char::ch#6 ← *((byte[]) print_hextab#0 + (number~) print_byte::$2) call print_char to:print_byte::@2 @@ -385,7 +385,7 @@ testChar: scope:[testChar] from main::@1 (byte*) print_line_cursor#67 ← phi( main::@1/(byte*) print_line_cursor#5 ) (byte*) print_char_cursor#148 ← phi( main::@1/(byte*) print_char_cursor#29 ) (byte) testChar::u#0 ← (number) $e - (signed byte) testChar::n#0 ← (number) -$e + (byte) testChar::n#0 ← (number) $e (signed byte) testChar::s#0 ← (number) -$e (byte*) print_str::str#1 ← (const string) testChar::str call print_str @@ -408,12 +408,12 @@ testChar::@3: scope:[testChar] from testChar::@2 (byte*) print_line_cursor#55 ← phi( testChar::@2/(byte*) print_line_cursor#59 ) (byte*) print_char_cursor#103 ← phi( testChar::@2/(byte*) print_char_cursor#26 ) (byte*) print_char_cursor#37 ← (byte*) print_char_cursor#103 - (signed byte) print_sbyte::b#1 ← (signed byte) testChar::n#0 - call print_sbyte + (byte) print_byte::b#4 ← (byte) testChar::n#0 + call print_byte to:testChar::@4 testChar::@4: scope:[testChar] from testChar::@3 (byte*) print_line_cursor#51 ← phi( testChar::@3/(byte*) print_line_cursor#55 ) - (byte*) print_char_cursor#104 ← phi( testChar::@3/(byte*) print_char_cursor#12 ) + (byte*) print_char_cursor#104 ← phi( testChar::@3/(byte*) print_char_cursor#24 ) (byte*) print_char_cursor#38 ← (byte*) print_char_cursor#104 (byte) print_char::ch#8 ← (byte) ' ' call print_char @@ -422,7 +422,7 @@ testChar::@5: scope:[testChar] from testChar::@4 (byte*) print_line_cursor#46 ← phi( testChar::@4/(byte*) print_line_cursor#51 ) (byte*) print_char_cursor#105 ← phi( testChar::@4/(byte*) print_char_cursor#26 ) (byte*) print_char_cursor#39 ← (byte*) print_char_cursor#105 - (signed byte) print_sbyte::b#2 ← (signed byte) testChar::s#0 + (signed byte) print_sbyte::b#1 ← (signed byte) testChar::s#0 call print_sbyte to:testChar::@6 testChar::@6: scope:[testChar] from testChar::@5 @@ -674,6 +674,7 @@ SYMBOL TABLE SSA (byte) print_byte::b#3 (byte) print_byte::b#4 (byte) print_byte::b#5 +(byte) print_byte::b#6 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch @@ -973,7 +974,6 @@ SYMBOL TABLE SSA (signed byte) print_sbyte::b#5 (signed byte) print_sbyte::b#6 (signed byte) print_sbyte::b#7 -(signed byte) print_sbyte::b#8 (byte*) print_screen (byte*) print_screen#0 (byte*) print_screen#1 @@ -1060,8 +1060,8 @@ SYMBOL TABLE SSA (label) testChar::@6 (label) testChar::@7 (label) testChar::@return -(signed byte) testChar::n -(signed byte) testChar::n#0 +(byte) testChar::n +(byte) testChar::n#0 (signed byte) testChar::s (signed byte) testChar::s#0 (const string) testChar::str = (string) "char: @" @@ -1118,14 +1118,14 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#20 + (number) $28 Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#5 < (number) 0 -Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sdword::$0 ← (signed dword) print_sdword::dw#3 < (number) 0 -Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (number) 4 -Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#5 & (number) $f -Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#5 & (unumber)(number) $f +Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (number) 4 +Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#6 & (number) $f +Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#6 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) $e in (byte) testChar::u#0 ← (number) $e -Adding number conversion cast (snumber) -$e in (signed byte) testChar::n#0 ← (number) -$e +Adding number conversion cast (unumber) $e in (byte) testChar::n#0 ← (number) $e Adding number conversion cast (snumber) -$e in (signed byte) testChar::s#0 ← (number) -$e Adding number conversion cast (unumber) $578 in (word) testShort::u#0 ← (number) $578 Adding number conversion cast (snumber) -$578 in (signed word) testShort::n#0 ← (number) -$578 @@ -1139,10 +1139,10 @@ Adding number conversion cast (snumber) -$222e0 in (signed dword) testLong::s#0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#7 -Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#5 +Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#4 Inlining cast (dword~) print_sdword::$2 ← (dword)(signed dword) print_sdword::dw#4 Inlining cast (byte) testChar::u#0 ← (unumber)(number) $e -Inlining cast (signed byte) testChar::n#0 ← (snumber)(number) -$e +Inlining cast (byte) testChar::n#0 ← (unumber)(number) $e Inlining cast (signed byte) testChar::s#0 ← (snumber)(number) -$e Inlining cast (word) testShort::u#0 ← (unumber)(number) $578 Inlining cast (signed word) testShort::n#0 ← (snumber)(number) -$578 @@ -1163,7 +1163,7 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast $e -Simplifying constant integer cast -$e +Simplifying constant integer cast $e Simplifying constant integer cast -$e Simplifying constant integer cast $578 Simplifying constant integer cast -$578 @@ -1183,7 +1183,7 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $e -Finalized signed number type (signed byte) -$e +Finalized unsigned number type (byte) $e Finalized signed number type (signed byte) -$e Finalized unsigned number type (word) $578 Finalized signed number type (signed word) -$578 @@ -1195,7 +1195,7 @@ Finalized unsigned number type (dword) $222e0 Finalized signed number type (signed dword) -$222e0 Finalized signed number type (signed dword) -$222e0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f +Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#6 & (byte) $f Inversing boolean not [104] (bool~) print_sdword::$1 ← (signed dword) print_sdword::dw#3 >= (signed byte) 0 from [103] (bool~) print_sdword::$0 ← (signed dword) print_sdword::dw#3 < (signed byte) 0 Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#50 (byte*) print_char_cursor#157 (byte*) print_screen#6 (byte*) print_line_cursor#45 (byte*) print_char_cursor#152 (byte*) print_screen#5 @@ -1210,7 +1210,7 @@ Alias (byte*) print_char_cursor#6 = (byte*) print_char_cursor#73 Alias (word) print_word::w#0 = (word~) print_sword::$1 Alias (byte*) print_char_cursor#7 = (byte*) print_char_cursor#74 (byte*) print_char_cursor#75 (byte*) print_char_cursor#8 Alias (byte*) print_char_cursor#139 = (byte*) print_char_cursor#155 (byte*) print_char_cursor#140 -Alias (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#6 (signed byte) print_sbyte::b#4 (signed byte) print_sbyte::b#8 (signed byte) print_sbyte::b#7 +Alias (signed byte) print_sbyte::b#2 = (signed byte) print_sbyte::b#5 (signed byte) print_sbyte::b#3 (signed byte) print_sbyte::b#7 (signed byte) print_sbyte::b#6 Alias (byte*) print_char_cursor#76 = (byte*) print_char_cursor#9 Alias (signed byte) print_sbyte::b#0 = (signed byte~) print_sbyte::$5 Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#77 @@ -1232,7 +1232,7 @@ Alias (byte*) print_char_cursor#145 = (byte*) print_char_cursor#156 Alias (signed dword) print_sdword::dw#3 = (signed dword) print_sdword::dw#6 (signed dword) print_sdword::dw#5 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#87 Alias (signed dword) print_sdword::dw#0 = (signed dword~) print_sdword::$5 -Alias (byte) print_byte::b#4 = (byte) print_byte::b#5 +Alias (byte) print_byte::b#5 = (byte) print_byte::b#6 Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#89 Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#90 (byte*) print_char_cursor#91 (byte*) print_char_cursor#24 Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#93 (byte*) print_char_cursor#26 @@ -1293,6 +1293,8 @@ Identical Phi Values (byte*) print_char_cursor#70 (byte*) print_char_cursor#135 Identical Phi Values (byte*) print_char_cursor#5 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#6 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#7 (byte*) print_char_cursor#14 +Identical Phi Values (signed byte) print_sbyte::b#2 (signed byte) print_sbyte::b#1 +Identical Phi Values (byte*) print_char_cursor#139 (byte*) print_char_cursor#105 Identical Phi Values (byte*) print_char_cursor#76 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#23 @@ -1324,7 +1326,7 @@ Identical Phi Values (byte*) print_line_cursor#41 (byte*) print_line_cursor#24 Identical Phi Values (byte*) print_char_cursor#101 (byte*) print_char_cursor#134 Identical Phi Values (byte*) print_char_cursor#102 (byte*) print_char_cursor#23 Identical Phi Values (byte*) print_char_cursor#103 (byte*) print_char_cursor#25 -Identical Phi Values (byte*) print_char_cursor#104 (byte*) print_char_cursor#11 +Identical Phi Values (byte*) print_char_cursor#104 (byte*) print_char_cursor#23 Identical Phi Values (byte*) print_char_cursor#105 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#106 (byte*) print_char_cursor#11 Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#1 @@ -1365,7 +1367,6 @@ Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_char_cursor#135 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#136 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#138 (byte*) print_char_cursor#25 -Identical Phi Values (byte*) print_char_cursor#139 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#141 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#145 (byte*) print_char_cursor#25 Successful SSA optimization Pass2IdenticalPhiElimination @@ -1374,7 +1375,7 @@ Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) print_str::$0 [6] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 [19] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 Simple Condition (bool~) print_sword::$0 [28] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sword::@1 -Simple Condition (bool~) print_sbyte::$0 [52] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 +Simple Condition (bool~) print_sbyte::$0 [52] if((signed byte) print_sbyte::b#1<(signed byte) 0) goto print_sbyte::@1 Simple Condition (bool~) print_sdword::$1 [105] if((signed dword) print_sdword::dw#3>=(signed byte) 0) goto print_sdword::@1 Simple Condition (bool~) print_cls::$1 [151] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -1386,7 +1387,7 @@ Constant (const byte) print_char::ch#3 = ' ' Constant (const byte) print_char::ch#4 = '-' Constant (const byte[]) print_hextab#0 = $0 Constant (const byte) testChar::u#0 = $e -Constant (const signed byte) testChar::n#0 = -$e +Constant (const byte) testChar::n#0 = $e Constant (const signed byte) testChar::s#0 = -$e Constant (const byte*) print_str::str#1 = testChar::str Constant (const byte) print_char::ch#7 = ' ' @@ -1412,8 +1413,8 @@ Constant (const byte) print_char::ch#14 = ' ' Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte) print_byte::b#3 = testChar::u#0 -Constant (const signed byte) print_sbyte::b#1 = testChar::n#0 -Constant (const signed byte) print_sbyte::b#2 = testChar::s#0 +Constant (const byte) print_byte::b#4 = testChar::n#0 +Constant (const signed byte) print_sbyte::b#1 = testChar::s#0 Constant (const word) print_word::w#3 = testShort::u#0 Constant (const signed word) print_sword::w#1 = testShort::n#0 Constant (const signed word) print_sword::w#2 = testShort::s#0 @@ -1424,10 +1425,28 @@ Constant (const dword) print_dword::dw#1 = testLong::u#0 Constant (const signed dword) print_sdword::dw#1 = testLong::n#0 Constant (const signed dword) print_sdword::dw#2 = testLong::s#0 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [65] (byte*~) print_cls::$0 ← (const byte*) print_line_cursor#0 + (word) $3e8 +if() condition always true - replacing block destination [52] if((const signed byte) print_sbyte::b#1<(signed byte) 0) goto print_sbyte::@1 +Successful SSA optimization Pass2ConstantIfs +Removing PHI-reference to removed block (print_sbyte::@3) in block print_char +Removing PHI-reference to removed block (print_sbyte::@3) in block print_char +Removing unused block print_sbyte::@3 +Removing PHI-reference to removed block (print_sbyte::@6) in block print_sbyte::@2 +Removing unused block print_sbyte::@6 +Successful SSA optimization Pass2EliminateUnusedBlocks +Alias (signed byte) print_sbyte::b#0 = (signed byte) print_sbyte::b#4 +Successful SSA optimization Pass2AliasElimination +Constant right-side identified [22] (signed byte) print_sbyte::b#0 ← - (const signed byte) print_sbyte::b#1 +Constant right-side identified [62] (byte*~) print_cls::$0 ← (const byte*) print_line_cursor#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const signed byte) print_sbyte::b#0 = -print_sbyte::b#1 Constant (const byte*) print_cls::$0 = print_line_cursor#0+$3e8 Successful SSA optimization Pass2ConstantIdentification +Constant value identified (byte)print_sbyte::b#0 in [24] (byte) print_byte::b#0 ← (byte)(const signed byte) print_sbyte::b#0 +Successful SSA optimization Pass2ConstantValues +Eliminating unused constant (const byte) print_char::ch#3 +Successful SSA optimization PassNEliminateUnusedVars +Constant (const byte) print_byte::b#0 = (byte)print_sbyte::b#0 +Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#3 @@ -1436,18 +1455,18 @@ Inlining constant with var siblings (const signed word) print_sword::w#1 Inlining constant with var siblings (const signed word) print_sword::w#2 Inlining constant with var siblings (const signed word) print_sword::w#3 Inlining constant with var siblings (const signed word) print_sword::w#4 -Inlining constant with var siblings (const signed byte) print_sbyte::b#1 -Inlining constant with var siblings (const signed byte) print_sbyte::b#2 +Inlining constant with different constant siblings (const signed byte) print_sbyte::b#1 Inlining constant with var siblings (const word) print_word::w#3 Inlining constant with var siblings (const word) print_word::w#4 Inlining constant with var siblings (const dword) print_dword::dw#1 Inlining constant with var siblings (const signed dword) print_sdword::dw#1 Inlining constant with var siblings (const signed dword) print_sdword::dw#2 Inlining constant with var siblings (const byte) print_byte::b#3 +Inlining constant with var siblings (const byte) print_byte::b#4 +Inlining constant with var siblings (const byte) print_byte::b#0 Inlining constant with var siblings (const byte) print_char::ch#0 Inlining constant with var siblings (const byte) print_char::ch#1 Inlining constant with var siblings (const byte) print_char::ch#2 -Inlining constant with var siblings (const byte) print_char::ch#3 Inlining constant with var siblings (const byte) print_char::ch#4 Inlining constant with var siblings (const byte) print_char::ch#7 Inlining constant with var siblings (const byte) print_char::ch#8 @@ -1462,8 +1481,7 @@ Inlining constant with var siblings (const byte*) print_line_cursor#0 Constant inlined print_cls::$0 = (byte*) 1024+(word) $3e8 Constant inlined print_char::ch#13 = (byte) ' ' Constant inlined print_char::ch#14 = (byte) ' ' -Constant inlined print_sbyte::b#1 = (const signed byte) testChar::n#0 -Constant inlined print_sbyte::b#2 = (const signed byte) testChar::s#0 +Constant inlined print_sbyte::b#1 = (const signed byte) testChar::s#0 Constant inlined print_char::ch#10 = (byte) ' ' Constant inlined print_sword::w#1 = (const signed word) testShort::n#0 Constant inlined print_char::ch#11 = (byte) ' ' @@ -1478,12 +1496,13 @@ Constant inlined print_char::ch#9 = (byte) ' ' Constant inlined print_char::ch#8 = (byte) ' ' Constant inlined print_sdword::dw#2 = (const signed dword) testLong::s#0 Constant inlined print_sdword::dw#1 = (const signed dword) testLong::n#0 +Constant inlined print_byte::b#0 = (byte)(const signed byte) print_sbyte::b#0 Constant inlined print_line_cursor#0 = (byte*) 1024 +Constant inlined print_byte::b#4 = (const byte) testChar::n#0 Constant inlined print_byte::b#3 = (const byte) testChar::u#0 Constant inlined print_word::w#3 = (const word) testShort::u#0 Constant inlined print_cls::sc#0 = (byte*) 1024 Constant inlined print_word::w#4 = (const word) testInt::u#0 -Constant inlined print_char::ch#3 = (byte) ' ' Constant inlined print_char::ch#2 = (byte) '-' Constant inlined print_char::ch#4 = (byte) '-' Constant inlined print_char::ch#1 = (byte) ' ' @@ -1523,10 +1542,11 @@ Adding NOP phi() at start of testShort::@3 Adding NOP phi() at start of testShort::@5 Adding NOP phi() at start of testShort::@7 Adding NOP phi() at start of testChar -Adding NOP phi() at start of testChar::@3 Adding NOP phi() at start of testChar::@5 Adding NOP phi() at start of testChar::@6 Adding NOP phi() at start of testChar::@7 +Adding NOP phi() at start of print_sbyte +Adding NOP phi() at start of print_sbyte::@5 Adding NOP phi() at start of print_sbyte::@7 Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@2 @@ -1541,10 +1561,10 @@ Calls in [print_byte] to print_char:83 print_char:88 Calls in [testInt] to print_str:107 print_word:109 print_char:111 print_sword:113 print_char:115 print_sword:117 print_ln:119 Calls in [print_sword] to print_char:125 print_word:131 print_char:135 Calls in [testShort] to print_str:139 print_word:141 print_char:143 print_sword:145 print_char:147 print_sword:149 print_ln:151 -Calls in [testChar] to print_str:155 print_byte:157 print_char:159 print_sbyte:161 print_char:163 print_sbyte:165 print_ln:167 -Calls in [print_sbyte] to print_char:173 print_byte:179 print_char:183 +Calls in [testChar] to print_str:155 print_byte:157 print_char:159 print_byte:161 print_char:163 print_sbyte:165 print_ln:167 +Calls in [print_sbyte] to print_char:172 print_byte:175 -Created 21 initial phi equivalence classes +Created 19 initial phi equivalence classes Not coalescing [18] print_char_cursor#159 ← print_line_cursor#1 Coalesced [20] print_char_cursor#169 ← print_char_cursor#134 Coalesced [22] print_char_cursor#185 ← print_char_cursor#25 @@ -1566,9 +1586,9 @@ Coalesced [70] print_char_cursor#171 ← print_char_cursor#142 Coalesced [73] print_byte::b#8 ← print_byte::b#2 Coalesced (already) [74] print_char_cursor#172 ← print_char_cursor#25 Coalesced [81] print_char::ch#16 ← print_char::ch#5 -Coalesced (already) [82] print_char_cursor#174 ← print_char_cursor#146 +Coalesced (already) [82] print_char_cursor#175 ← print_char_cursor#146 Coalesced [86] print_char::ch#17 ← print_char::ch#6 -Coalesced (already) [87] print_char_cursor#175 ← print_char_cursor#25 +Coalesced (already) [87] print_char_cursor#176 ← print_char_cursor#25 Coalesced [96] print_str::str#8 ← print_str::str#7 Coalesced [97] print_char_cursor#161 ← print_char_cursor#153 Coalesced [104] print_str::str#9 ← print_str::str#0 @@ -1591,15 +1611,12 @@ Coalesced (already) [146] print_char_cursor#188 ← print_char_cursor#25 Coalesced (already) [150] print_line_cursor#73 ← print_line_cursor#1 Coalesced (already) [156] print_char_cursor#173 ← print_char_cursor#134 Coalesced (already) [158] print_char_cursor#181 ← print_char_cursor#25 +Coalesced (already) [160] print_char_cursor#174 ← print_char_cursor#25 Coalesced (already) [162] print_char_cursor#182 ← print_char_cursor#25 -Coalesced (already) [172] print_char_cursor#177 ← print_char_cursor#25 -Coalesced [174] print_sbyte::b#10 ← print_sbyte::b#3 -Coalesced [177] print_byte::b#6 ← print_byte::b#0 -Coalesced (already) [178] print_char_cursor#170 ← print_char_cursor#25 -Coalesced (already) [182] print_char_cursor#176 ← print_char_cursor#25 -Coalesced [185] print_sbyte::b#9 ← print_sbyte::b#0 -Coalesced [193] print_cls::sc#3 ← print_cls::sc#1 -Coalesced down to 11 phi equivalence classes +Coalesced (already) [171] print_char_cursor#177 ← print_char_cursor#25 +Coalesced (already) [174] print_char_cursor#170 ← print_char_cursor#25 +Coalesced [185] print_cls::sc#3 ← print_cls::sc#1 +Coalesced down to 10 phi equivalence classes Culled Empty Block (label) @14 Culled Empty Block (label) @27 Culled Empty Block (label) main::@5 @@ -1616,13 +1633,12 @@ Culled Empty Block (label) print_sword::@6 Culled Empty Block (label) print_sword::@7 Culled Empty Block (label) testShort::@7 Culled Empty Block (label) testChar::@7 -Culled Empty Block (label) print_sbyte::@6 +Culled Empty Block (label) print_sbyte::@5 Culled Empty Block (label) print_sbyte::@7 Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) print_cls::@3 Renumbering block @26 to @1 Renumbering block print_sword::@5 to print_sword::@4 -Renumbering block print_sbyte::@5 to print_sbyte::@4 Renumbering block print_sdword::@4 to print_sdword::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 @@ -1660,8 +1676,9 @@ Adding NOP phi() at start of testChar::@3 Adding NOP phi() at start of testChar::@4 Adding NOP phi() at start of testChar::@5 Adding NOP phi() at start of testChar::@6 -Adding NOP phi() at start of print_sbyte::@3 +Adding NOP phi() at start of print_sbyte Adding NOP phi() at start of print_sbyte::@1 +Adding NOP phi() at start of print_sbyte::@2 Adding NOP phi() at start of print_cls FINAL CONTROL FLOW GRAPH @@ -1784,24 +1801,24 @@ print_word::@1: scope:[print_word] from print_word print_word::@return: scope:[print_word] from print_word::@1 [55] return to:@return -print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 - [56] (byte*) print_char_cursor#146 ← phi( print_sbyte::@2/(byte*) print_char_cursor#25 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#25 testChar::@1/(byte*) print_char_cursor#134 ) - [56] (byte) print_byte::b#4 ← phi( print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(const byte) testChar::u#0 ) - [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte) 4 +print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 testChar::@3 + [56] (byte*) print_char_cursor#146 ← phi( print_sbyte::@2/(byte*) print_char_cursor#25 print_word/(byte*) print_char_cursor#142 print_word::@1/(byte*) print_char_cursor#25 testChar::@1/(byte*) print_char_cursor#134 testChar::@3/(byte*) print_char_cursor#25 ) + [56] (byte) print_byte::b#5 ← phi( print_sbyte::@2/(byte)(const signed byte) print_sbyte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(const byte) testChar::u#0 testChar::@3/(const byte) testChar::n#0 ) + [57] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [58] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [59] call print_char to:print_byte::@1 print_byte::@1: scope:[print_byte] from print_byte - [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte) $f + [60] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [61] (byte) print_char::ch#6 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [62] call print_char to:print_byte::@return print_byte::@return: scope:[print_byte] from print_byte::@1 [63] return to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sdword::@2 print_sword::@1 print_sword::@3 testChar::@2 testChar::@4 testInt::@2 testInt::@4 testLong::@2 testLong::@4 testShort::@2 testShort::@4 - [64] (byte*) print_char_cursor#92 ← phi( print_byte/(byte*) print_char_cursor#146 print_byte::@1/(byte*) print_char_cursor#25 print_sbyte::@1/(byte*) print_char_cursor#25 print_sbyte::@3/(byte*) print_char_cursor#25 print_sdword::@2/(byte*) print_char_cursor#25 print_sword::@1/(byte*) print_char_cursor#25 print_sword::@3/(byte*) print_char_cursor#25 testChar::@2/(byte*) print_char_cursor#25 testChar::@4/(byte*) print_char_cursor#25 testInt::@2/(byte*) print_char_cursor#25 testInt::@4/(byte*) print_char_cursor#25 testLong::@2/(byte*) print_char_cursor#25 testLong::@4/(byte*) print_char_cursor#25 testShort::@2/(byte*) print_char_cursor#25 testShort::@4/(byte*) print_char_cursor#25 ) - [64] (byte) print_char::ch#15 ← phi( print_byte/(byte) print_char::ch#5 print_byte::@1/(byte) print_char::ch#6 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sdword::@2/(byte) '-' print_sword::@1/(byte) '-' print_sword::@3/(byte) ' ' testChar::@2/(byte) ' ' testChar::@4/(byte) ' ' testInt::@2/(byte) ' ' testInt::@4/(byte) ' ' testLong::@2/(byte) ' ' testLong::@4/(byte) ' ' testShort::@2/(byte) ' ' testShort::@4/(byte) ' ' ) +print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sdword::@2 print_sword::@1 print_sword::@3 testChar::@2 testChar::@4 testInt::@2 testInt::@4 testLong::@2 testLong::@4 testShort::@2 testShort::@4 + [64] (byte*) print_char_cursor#92 ← phi( print_byte/(byte*) print_char_cursor#146 print_byte::@1/(byte*) print_char_cursor#25 print_sbyte::@1/(byte*) print_char_cursor#25 print_sdword::@2/(byte*) print_char_cursor#25 print_sword::@1/(byte*) print_char_cursor#25 print_sword::@3/(byte*) print_char_cursor#25 testChar::@2/(byte*) print_char_cursor#25 testChar::@4/(byte*) print_char_cursor#25 testInt::@2/(byte*) print_char_cursor#25 testInt::@4/(byte*) print_char_cursor#25 testLong::@2/(byte*) print_char_cursor#25 testLong::@4/(byte*) print_char_cursor#25 testShort::@2/(byte*) print_char_cursor#25 testShort::@4/(byte*) print_char_cursor#25 ) + [64] (byte) print_char::ch#15 ← phi( print_byte/(byte) print_char::ch#5 print_byte::@1/(byte) print_char::ch#6 print_sbyte::@1/(byte) '-' print_sdword::@2/(byte) '-' print_sword::@1/(byte) '-' print_sword::@3/(byte) ' ' testChar::@2/(byte) ' ' testChar::@4/(byte) ' ' testInt::@2/(byte) ' ' testInt::@4/(byte) ' ' testLong::@2/(byte) ' ' testLong::@4/(byte) ' ' testShort::@2/(byte) ' ' testShort::@4/(byte) ' ' ) [65] *((byte*) print_char_cursor#92) ← (byte) print_char::ch#15 [66] (byte*) print_char_cursor#25 ← ++ (byte*) print_char_cursor#92 to:print_char::@return @@ -1924,7 +1941,7 @@ testChar::@2: scope:[testChar] from testChar::@1 to:testChar::@3 testChar::@3: scope:[testChar] from testChar::@2 [122] phi() - [123] call print_sbyte + [123] call print_byte to:testChar::@4 testChar::@4: scope:[testChar] from testChar::@3 [124] phi() @@ -1941,40 +1958,31 @@ testChar::@6: scope:[testChar] from testChar::@5 testChar::@return: scope:[testChar] from testChar::@6 [130] return to:@return -print_sbyte: scope:[print_sbyte] from testChar::@3 testChar::@5 - [131] (signed byte) print_sbyte::b#3 ← phi( testChar::@3/(const signed byte) testChar::n#0 testChar::@5/(const signed byte) testChar::s#0 ) - [132] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 - to:print_sbyte::@3 -print_sbyte::@3: scope:[print_sbyte] from print_sbyte - [133] phi() - [134] call print_char +print_sbyte: scope:[print_sbyte] from testChar::@5 + [131] phi() + to:print_sbyte::@1 +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + [132] phi() + [133] call print_char to:print_sbyte::@2 -print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 - [135] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) - [136] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - [137] call print_byte +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@1 + [134] phi() + [135] call print_byte to:print_sbyte::@return print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 - [138] return + [136] return to:@return -print_sbyte::@1: scope:[print_sbyte] from print_sbyte - [139] phi() - [140] call print_char - to:print_sbyte::@4 -print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 - [141] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 - to:print_sbyte::@2 print_cls: scope:[print_cls] from main - [142] phi() + [137] phi() to:print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - [143] (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) - [144] *((byte*) print_cls::sc#2) ← (byte) ' ' - [145] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 - [146] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 + [138] (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) + [139] *((byte*) print_cls::sc#2) ← (byte) ' ' + [140] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + [141] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls::@1 - [147] return + [142] return to:@return @@ -1984,10 +1992,9 @@ VARIABLE REGISTER WEIGHTS (byte~) print_byte::$0 4.0 (byte~) print_byte::$2 4.0 (byte) print_byte::b -(byte) print_byte::b#0 4.0 (byte) print_byte::b#1 4.0 (byte) print_byte::b#2 4.0 -(byte) print_byte::b#4 2.5 +(byte) print_byte::b#5 2.0 (void()) print_char((byte) print_char::ch) (byte) print_char::ch (byte) print_char::ch#15 6.0 @@ -1998,13 +2005,13 @@ VARIABLE REGISTER WEIGHTS (byte*) print_char_cursor#134 3.583333333333333 (byte*) print_char_cursor#142 6.0 (byte*) print_char_cursor#143 3.0 -(byte*) print_char_cursor#146 3.333333333333333 +(byte*) print_char_cursor#146 3.9999999999999996 (byte*) print_char_cursor#153 8.0 (byte*~) print_char_cursor#158 4.0 (byte*~) print_char_cursor#159 4.0 (byte*~) print_char_cursor#160 4.0 -(byte*) print_char_cursor#25 0.5666666666666664 -(byte*) print_char_cursor#92 17.0 +(byte*) print_char_cursor#25 0.6000000000000004 +(byte*) print_char_cursor#92 16.0 (void()) print_cls() (byte*) print_cls::sc (byte*) print_cls::sc#1 16.5 @@ -2021,9 +2028,6 @@ VARIABLE REGISTER WEIGHTS (void()) print_ln() (void()) print_sbyte((signed byte) print_sbyte::b) (signed byte) print_sbyte::b -(signed byte) print_sbyte::b#0 4.0 -(signed byte) print_sbyte::b#3 1.0 -(signed byte) print_sbyte::b#5 4.0 (byte*) print_screen (void()) print_sdword((signed dword) print_sdword::dw) (signed dword) print_sdword::dw @@ -2047,7 +2051,7 @@ VARIABLE REGISTER WEIGHTS (word) print_word::w#2 4.0 (word) print_word::w#5 3.333333333333333 (void()) testChar() -(signed byte) testChar::n +(byte) testChar::n (signed byte) testChar::s (byte) testChar::u (void()) testInt() @@ -2068,12 +2072,11 @@ Initial phi equivalence classes [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] [ print_dword::dw#2 print_dword::dw#0 ] [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -[ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +[ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] [ print_str::str#5 print_str::str#7 print_str::str#0 ] [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] [ print_cls::sc#2 print_cls::sc#1 ] Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] @@ -2082,12 +2085,11 @@ Complete equivalence classes [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] [ print_dword::dw#2 print_dword::dw#0 ] [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -[ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +[ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] [ print_str::str#5 print_str::str#7 print_str::str#0 ] [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] [ print_cls::sc#2 print_cls::sc#1 ] [ print_byte::$0 ] [ print_byte::$2 ] @@ -2095,15 +2097,14 @@ Allocated zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cu Allocated zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] Allocated zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] Allocated zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -Allocated zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +Allocated zp ZP_BYTE:14 [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] Allocated zp ZP_BYTE:15 [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] Allocated zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] Allocated zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] Allocated zp ZP_WORD:20 [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -Allocated zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] -Allocated zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] -Allocated zp ZP_BYTE:25 [ print_byte::$0 ] -Allocated zp ZP_BYTE:26 [ print_byte::$2 ] +Allocated zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] +Allocated zp ZP_BYTE:24 [ print_byte::$0 ] +Allocated zp ZP_BYTE:25 [ print_byte::$2 ] INITIAL ASM //SEG0 File Comments @@ -2134,7 +2135,7 @@ bend: //SEG10 main main: { //SEG11 [5] call print_cls - //SEG12 [142] phi from main to print_cls [phi:main->print_cls] + //SEG12 [137] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] @@ -2442,7 +2443,7 @@ print_word: { //SEG114 [56] phi from print_word to print_byte [phi:print_word->print_byte] print_byte_from_print_word: //SEG115 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#142 [phi:print_word->print_byte#0] -- register_copy - //SEG116 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + //SEG116 [56] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy jsr print_byte jmp b1 //SEG117 print_word::@1 @@ -2454,7 +2455,7 @@ print_word: { //SEG120 [56] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] print_byte_from_b1: //SEG121 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_word::@1->print_byte#0] -- register_copy - //SEG122 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + //SEG122 [56] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy jsr print_byte jmp breturn //SEG123 print_word::@return @@ -2466,10 +2467,10 @@ print_word: { // Print a byte as HEX // print_byte(byte zeropage($e) b) print_byte: { - .label _0 = $19 - .label _2 = $1a + .label _0 = $18 + .label _2 = $19 .label b = $e - //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda b lsr lsr @@ -2489,7 +2490,7 @@ print_byte: { jmp b1 //SEG132 print_byte::@1 b1: - //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 lda #$f and b sta _2 @@ -2856,8 +2857,8 @@ testShort: { //SEG266 testChar testChar: { .const u = $e - .const n = -$e - .const s = -$e + .const n = $e + .label s = -$e //SEG267 [117] call print_str //SEG268 [68] phi from testChar to print_str [phi:testChar->print_str] print_str_from_testChar: @@ -2881,7 +2882,7 @@ testChar: { //SEG274 [56] phi from testChar::@1 to print_byte [phi:testChar::@1->print_byte] print_byte_from_b1: //SEG275 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#134 [phi:testChar::@1->print_byte#0] -- register_copy - //SEG276 [56] phi (byte) print_byte::b#4 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuz1=vbuc1 + //SEG276 [56] phi (byte) print_byte::b#5 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuz1=vbuc1 lda #u sta print_byte.b jsr print_byte @@ -2903,37 +2904,35 @@ testChar: { jmp b3 //SEG284 testChar::@3 b3: - //SEG285 [123] call print_sbyte - //SEG286 [131] phi from testChar::@3 to print_sbyte [phi:testChar::@3->print_sbyte] - print_sbyte_from_b3: - //SEG287 [131] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::n#0 [phi:testChar::@3->print_sbyte#0] -- vbsz1=vbsc1 + //SEG285 [123] call print_byte + //SEG286 [56] phi from testChar::@3 to print_byte [phi:testChar::@3->print_byte] + print_byte_from_b3: + //SEG287 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:testChar::@3->print_byte#0] -- register_copy + //SEG288 [56] phi (byte) print_byte::b#5 = (const byte) testChar::n#0 [phi:testChar::@3->print_byte#1] -- vbuz1=vbuc1 lda #n - sta print_sbyte.b - jsr print_sbyte - //SEG288 [124] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] + sta print_byte.b + jsr print_byte + //SEG289 [124] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] b4_from_b3: jmp b4 - //SEG289 testChar::@4 + //SEG290 testChar::@4 b4: - //SEG290 [125] call print_char - //SEG291 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] + //SEG291 [125] call print_char + //SEG292 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] print_char_from_b4: - //SEG292 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - //SEG293 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuz1=vbuc1 + //SEG293 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy + //SEG294 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuz1=vbuc1 lda #' ' sta print_char.ch jsr print_char - //SEG294 [126] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] + //SEG295 [126] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] b5_from_b4: jmp b5 - //SEG295 testChar::@5 + //SEG296 testChar::@5 b5: - //SEG296 [127] call print_sbyte - //SEG297 [131] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] + //SEG297 [127] call print_sbyte + //SEG298 [131] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] print_sbyte_from_b5: - //SEG298 [131] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::s#0 [phi:testChar::@5->print_sbyte#0] -- vbsz1=vbsc1 - lda #s - sta print_sbyte.b jsr print_sbyte //SEG299 [128] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] b6_from_b5: @@ -2958,98 +2957,68 @@ testChar: { } //SEG306 print_sbyte // Print a signed byte as HEX -// print_sbyte(signed byte zeropage($16) b) print_sbyte: { - .label b = $16 - //SEG307 [132] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsz1_lt_0_then_la1 - lda b - bmi b1_from_print_sbyte - //SEG308 [133] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] - b3_from_print_sbyte: - jmp b3 - //SEG309 print_sbyte::@3 - b3: - //SEG310 [134] call print_char - //SEG311 [64] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] - print_char_from_b3: - //SEG312 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@3->print_char#0] -- register_copy - //SEG313 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuz1=vbuc1 - lda #' ' - sta print_char.ch - jsr print_char - //SEG314 [135] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] - b2_from_b3: - b2_from_b4: - //SEG315 [135] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy - jmp b2 - //SEG316 print_sbyte::@2 - b2: - //SEG317 [136] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 -- vbuz1=vbuz2 - lda b - sta print_byte.b - //SEG318 [137] call print_byte - //SEG319 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] - print_byte_from_b2: - //SEG320 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_sbyte::@2->print_byte#0] -- register_copy - //SEG321 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - //SEG322 print_sbyte::@return - breturn: - //SEG323 [138] return - rts - //SEG324 [139] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + .const b = -testChar.s + //SEG307 [132] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] b1_from_print_sbyte: jmp b1 - //SEG325 print_sbyte::@1 + //SEG308 print_sbyte::@1 b1: - //SEG326 [140] call print_char - //SEG327 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + //SEG309 [133] call print_char + //SEG310 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] print_char_from_b1: - //SEG328 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@1->print_char#0] -- register_copy - //SEG329 [64] phi (byte) print_char::ch#15 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuz1=vbuc1 + //SEG311 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@1->print_char#0] -- register_copy + //SEG312 [64] phi (byte) print_char::ch#15 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuz1=vbuc1 lda #'-' sta print_char.ch jsr print_char - jmp b4 - //SEG330 print_sbyte::@4 - b4: - //SEG331 [141] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsz1=_neg_vbsz1 - lda b - eor #$ff - clc - adc #1 - sta b - jmp b2_from_b4 + //SEG313 [134] phi from print_sbyte::@1 to print_sbyte::@2 [phi:print_sbyte::@1->print_sbyte::@2] + b2_from_b1: + jmp b2 + //SEG314 print_sbyte::@2 + b2: + //SEG315 [135] call print_byte + //SEG316 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + print_byte_from_b2: + //SEG317 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_sbyte::@2->print_byte#0] -- register_copy + //SEG318 [56] phi (byte) print_byte::b#5 = (byte)(const signed byte) print_sbyte::b#0 [phi:print_sbyte::@2->print_byte#1] -- vbuz1=vbuc1 + lda #b + sta print_byte.b + jsr print_byte + jmp breturn + //SEG319 print_sbyte::@return + breturn: + //SEG320 [136] return + rts } -//SEG332 print_cls +//SEG321 print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - .label sc = $17 - //SEG333 [143] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + .label sc = $16 + //SEG322 [138] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] b1_from_print_cls: - //SEG334 [143] phi (byte*) print_cls::sc#2 = (byte*) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + //SEG323 [138] phi (byte*) print_cls::sc#2 = (byte*) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 jmp b1 - //SEG335 [143] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + //SEG324 [138] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] b1_from_b1: - //SEG336 [143] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + //SEG325 [138] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy jmp b1 - //SEG337 print_cls::@1 + //SEG326 print_cls::@1 b1: - //SEG338 [144] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + //SEG327 [139] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - //SEG339 [145] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + //SEG328 [140] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 inc sc bne !+ inc sc+1 !: - //SEG340 [146] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 + //SEG329 [141] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 lda sc+1 cmp #>$400+$3e8 bne b1_from_b1 @@ -3057,12 +3026,12 @@ print_cls: { cmp #<$400+$3e8 bne b1_from_b1 jmp breturn - //SEG341 print_cls::@return + //SEG330 print_cls::@return breturn: - //SEG342 [147] return + //SEG331 [142] return rts } -//SEG343 File Data +//SEG332 File Data print_hextab: .text "0123456789abcdef" REGISTER UPLIFT POTENTIAL REGISTERS @@ -3076,12 +3045,11 @@ Statement [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 [ print_dw Statement [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 [ print_char_cursor#25 print_word::w#2 ] ( main:2::testLong:13::print_dword:18 [ print_line_cursor#1 print_char_cursor#25 print_word::w#2 ] main:2::testLong:13::print_sdword:22::print_dword:42 [ print_line_cursor#1 print_char_cursor#25 print_word::w#2 ] main:2::testLong:13::print_sdword:26::print_dword:42 [ print_line_cursor#1 print_char_cursor#25 print_word::w#2 ] ) always clobbers reg byte a Statement [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#142 print_byte::b#1 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testInt:11::print_sword:82::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testInt:11::print_sword:86::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testShort:9::print_sword:108::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testShort:9::print_sword:112::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testShort:9::print_word:104 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a Statement [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#25 print_byte::b#2 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testInt:11::print_sword:82::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testInt:11::print_sword:86::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testShort:9::print_sword:108::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testShort:9::print_sword:112::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testShort:9::print_word:104 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] ) always clobbers reg byte a -Statement [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte) 4 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_byte:119 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_sbyte:123::print_byte:137 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_sbyte:127::print_byte:137 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte) $f [ print_char_cursor#25 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_byte:119 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_sbyte:123::print_byte:137 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_sbyte:127::print_byte:137 [ print_char_cursor#25 print_byte::$2 ] ) always clobbers reg byte a -Statement [65] *((byte*) print_char_cursor#92) ← (byte) print_char::ch#15 [ print_char_cursor#92 ] ( main:2::testLong:13::print_char:20 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_char:24 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:59 [ print_byte::b#4 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_byte:137::print_char:59 [ print_byte::b#4 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:137::print_char:59 [ print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_byte:137::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:137::print_char:62 [ print_char_cursor#92 ] main:2::testInt:11::print_char:80 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_char:84 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_char:106 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_char:110 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_char:121 [ print_char_cursor#92 ] main:2::testChar:7::print_char:125 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_char:134 [ print_sbyte::b#3 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_char:134 [ print_sbyte::b#3 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_char:140 [ print_sbyte::b#3 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_char:140 [ print_sbyte::b#3 print_char_cursor#92 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +Statement [57] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_byte:119 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_byte:123 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_sbyte:127::print_byte:135 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] +Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#25 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_byte:119 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_byte:123 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_sbyte:127::print_byte:135 [ print_char_cursor#25 print_byte::$2 ] ) always clobbers reg byte a +Statement [65] *((byte*) print_char_cursor#92) ← (byte) print_char::ch#15 [ print_char_cursor#92 ] ( main:2::testLong:13::print_char:20 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_char:24 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:59 [ print_byte::b#5 print_char_cursor#92 ] main:2::testChar:7::print_byte:123::print_char:59 [ print_byte::b#5 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:135::print_char:59 [ print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_byte:123::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:135::print_char:62 [ print_char_cursor#92 ] main:2::testInt:11::print_char:80 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_char:84 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_char:106 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_char:110 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_char:121 [ print_char_cursor#92 ] main:2::testChar:7::print_char:125 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_char:133 [ print_char_cursor#92 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] Statement [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testShort:9::print_str:102 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testChar:7::print_str:117 [ print_char_cursor#134 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [72] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#5) [ print_char_cursor#134 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testShort:9::print_str:102 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testChar:7::print_str:117 [ print_char_cursor#134 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [75] (byte*~) print_char_cursor#158 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#158 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#158 ] ) always clobbers reg byte a @@ -3089,9 +3057,8 @@ Statement [91] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sw Statement [95] (word) print_word::w#0 ← (word)(signed word) print_sword::w#7 [ print_char_cursor#25 print_word::w#0 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] main:2::testShort:9::print_sword:108 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] main:2::testShort:9::print_sword:112 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] ) always clobbers reg byte a Statement [100] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#10 [ print_char_cursor#25 print_sword::w#0 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] main:2::testShort:9::print_sword:108 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] main:2::testShort:9::print_sword:112 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] ) always clobbers reg byte a Statement [101] (byte*~) print_char_cursor#160 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#160 ] ( main:2::testShort:9 [ print_line_cursor#1 print_char_cursor#160 ] ) always clobbers reg byte a -Statement [141] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#25 print_sbyte::b#0 ] ( main:2::testChar:7::print_sbyte:123 [ print_char_cursor#25 print_sbyte::b#0 ] main:2::testChar:7::print_sbyte:127 [ print_char_cursor#25 print_sbyte::b#0 ] ) always clobbers reg byte a -Statement [144] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [146] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Statement [139] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [141] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a Statement [15] (byte*~) print_char_cursor#159 ← (byte*) print_line_cursor#1 [ print_char_cursor#159 print_line_cursor#1 ] ( main:2::testLong:13 [ print_char_cursor#159 print_line_cursor#1 ] ) always clobbers reg byte a Statement [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte) $28 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::testLong:13::print_ln:28 [ print_line_cursor#1 print_char_cursor#25 ] main:2::testInt:11::print_ln:88 [ print_line_cursor#1 print_char_cursor#25 ] main:2::testShort:9::print_ln:114 [ print_line_cursor#1 print_char_cursor#25 ] main:2::testChar:7::print_ln:129 [ print_line_cursor#1 print_char_cursor#25 ] ) always clobbers reg byte a Statement [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::testLong:13::print_ln:28 [ print_line_cursor#1 print_char_cursor#25 ] main:2::testInt:11::print_ln:88 [ print_line_cursor#1 print_char_cursor#25 ] main:2::testShort:9::print_ln:114 [ print_line_cursor#1 print_char_cursor#25 ] main:2::testChar:7::print_ln:129 [ print_line_cursor#1 print_char_cursor#25 ] ) always clobbers reg byte a @@ -3102,9 +3069,9 @@ Statement [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 [ print_dw Statement [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 [ print_char_cursor#25 print_word::w#2 ] ( main:2::testLong:13::print_dword:18 [ print_line_cursor#1 print_char_cursor#25 print_word::w#2 ] main:2::testLong:13::print_sdword:22::print_dword:42 [ print_line_cursor#1 print_char_cursor#25 print_word::w#2 ] main:2::testLong:13::print_sdword:26::print_dword:42 [ print_line_cursor#1 print_char_cursor#25 print_word::w#2 ] ) always clobbers reg byte a Statement [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#142 print_byte::b#1 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testInt:11::print_sword:82::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testInt:11::print_sword:86::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testShort:9::print_sword:108::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testShort:9::print_sword:112::print_word:96 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] main:2::testShort:9::print_word:104 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a Statement [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#25 print_byte::b#2 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testInt:11::print_sword:82::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testInt:11::print_sword:86::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testShort:9::print_sword:108::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testShort:9::print_sword:112::print_word:96 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] main:2::testShort:9::print_word:104 [ print_line_cursor#1 print_char_cursor#25 print_byte::b#2 ] ) always clobbers reg byte a -Statement [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte) 4 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_byte:119 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_sbyte:123::print_byte:137 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_sbyte:127::print_byte:137 [ print_byte::b#4 print_char_cursor#146 print_byte::$0 ] ) always clobbers reg byte a -Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte) $f [ print_char_cursor#25 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_byte:119 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_sbyte:123::print_byte:137 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_sbyte:127::print_byte:137 [ print_char_cursor#25 print_byte::$2 ] ) always clobbers reg byte a -Statement [65] *((byte*) print_char_cursor#92) ← (byte) print_char::ch#15 [ print_char_cursor#92 ] ( main:2::testLong:13::print_char:20 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_char:24 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:59 [ print_byte::b#4 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_byte:137::print_char:59 [ print_byte::b#4 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:137::print_char:59 [ print_byte::b#4 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_byte:137::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:137::print_char:62 [ print_char_cursor#92 ] main:2::testInt:11::print_char:80 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_char:84 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_char:106 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_char:110 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_char:121 [ print_char_cursor#92 ] main:2::testChar:7::print_char:125 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_char:134 [ print_sbyte::b#3 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_char:134 [ print_sbyte::b#3 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:123::print_char:140 [ print_sbyte::b#3 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_char:140 [ print_sbyte::b#3 print_char_cursor#92 ] ) always clobbers reg byte y +Statement [57] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_byte:119 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_byte:123 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] main:2::testChar:7::print_sbyte:127::print_byte:135 [ print_byte::b#5 print_char_cursor#146 print_byte::$0 ] ) always clobbers reg byte a +Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#25 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testShort:9::print_word:104::print_byte:54 [ print_line_cursor#1 print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_byte:119 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_byte:123 [ print_char_cursor#25 print_byte::$2 ] main:2::testChar:7::print_sbyte:127::print_byte:135 [ print_char_cursor#25 print_byte::$2 ] ) always clobbers reg byte a +Statement [65] *((byte*) print_char_cursor#92) ← (byte) print_char::ch#15 [ print_char_cursor#92 ] ( main:2::testLong:13::print_char:20 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_char:24 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:59 [ print_byte::b#5 print_char_cursor#92 ] main:2::testChar:7::print_byte:123::print_char:59 [ print_byte::b#5 print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:135::print_char:59 [ print_byte::b#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#92 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_word:96::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_word:104::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_byte:119::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_byte:123::print_char:62 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_byte:135::print_char:62 [ print_char_cursor#92 ] main:2::testInt:11::print_char:80 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_char:84 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:93 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:82::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testInt:11::print_sword:86::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:108::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_sword:112::print_char:99 [ print_line_cursor#1 print_sword::w#10 print_char_cursor#92 ] main:2::testShort:9::print_char:106 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testShort:9::print_char:110 [ print_line_cursor#1 print_char_cursor#92 ] main:2::testChar:7::print_char:121 [ print_char_cursor#92 ] main:2::testChar:7::print_char:125 [ print_char_cursor#92 ] main:2::testChar:7::print_sbyte:127::print_char:133 [ print_char_cursor#92 ] ) always clobbers reg byte y Statement [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#134 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testShort:9::print_str:102 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testChar:7::print_str:117 [ print_char_cursor#134 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [72] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#5) [ print_char_cursor#134 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testShort:9::print_str:102 [ print_line_cursor#1 print_char_cursor#134 print_str::str#5 ] main:2::testChar:7::print_str:117 [ print_char_cursor#134 print_str::str#5 ] ) always clobbers reg byte a reg byte y Statement [75] (byte*~) print_char_cursor#158 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#158 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#158 ] ) always clobbers reg byte a @@ -3112,63 +3079,61 @@ Statement [91] if((signed word) print_sword::w#10<(signed byte) 0) goto print_sw Statement [95] (word) print_word::w#0 ← (word)(signed word) print_sword::w#7 [ print_char_cursor#25 print_word::w#0 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] main:2::testShort:9::print_sword:108 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] main:2::testShort:9::print_sword:112 [ print_line_cursor#1 print_char_cursor#25 print_word::w#0 ] ) always clobbers reg byte a Statement [100] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#10 [ print_char_cursor#25 print_sword::w#0 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] main:2::testShort:9::print_sword:108 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] main:2::testShort:9::print_sword:112 [ print_line_cursor#1 print_char_cursor#25 print_sword::w#0 ] ) always clobbers reg byte a Statement [101] (byte*~) print_char_cursor#160 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#160 ] ( main:2::testShort:9 [ print_line_cursor#1 print_char_cursor#160 ] ) always clobbers reg byte a -Statement [141] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#25 print_sbyte::b#0 ] ( main:2::testChar:7::print_sbyte:123 [ print_char_cursor#25 print_sbyte::b#0 ] main:2::testChar:7::print_sbyte:127 [ print_char_cursor#25 print_sbyte::b#0 ] ) always clobbers reg byte a -Statement [144] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [146] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Statement [139] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [141] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] : zp ZP_WORD:2 , Potential registers zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] : zp ZP_DWORD:4 , Potential registers zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] : zp ZP_DWORD:8 , Potential registers zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] : zp ZP_WORD:12 , -Potential registers zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] : zp ZP_BYTE:14 , reg byte x , +Potential registers zp ZP_BYTE:14 [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] : zp ZP_BYTE:14 , reg byte x , Potential registers zp ZP_BYTE:15 [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] : zp ZP_WORD:16 , Potential registers zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] : zp ZP_WORD:18 , Potential registers zp ZP_WORD:20 [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] : zp ZP_WORD:20 , -Potential registers zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:23 , -Potential registers zp ZP_BYTE:25 [ print_byte::$0 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:26 [ print_byte::$2 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:22 , +Potential registers zp ZP_BYTE:24 [ print_byte::$0 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:25 [ print_byte::$2 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 64.48: zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] 32.83: zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +Uplift Scope [] 64.18: zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] 32.83: zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] Uplift Scope [print_str] 35.5: zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] -Uplift Scope [print_cls] 33: zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] -Uplift Scope [print_byte] 14.5: zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] 4: zp ZP_BYTE:25 [ print_byte::$0 ] 4: zp ZP_BYTE:26 [ print_byte::$2 ] +Uplift Scope [print_cls] 33: zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] +Uplift Scope [print_byte] 10: zp ZP_BYTE:14 [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] 4: zp ZP_BYTE:24 [ print_byte::$0 ] 4: zp ZP_BYTE:25 [ print_byte::$2 ] Uplift Scope [print_word] 15.33: zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] Uplift Scope [print_char] 14: zp ZP_BYTE:15 [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] Uplift Scope [print_sdword] 9.5: zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] Uplift Scope [print_sword] 9: zp ZP_WORD:20 [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -Uplift Scope [print_sbyte] 9: zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] Uplift Scope [print_dword] 6: zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] Uplift Scope [print_ln] +Uplift Scope [print_sbyte] Uplift Scope [main] Uplift Scope [testChar] Uplift Scope [testShort] Uplift Scope [testInt] Uplift Scope [testLong] -Uplifting [] best 2688 combination zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] -Uplifting [print_str] best 2688 combination zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] -Uplifting [print_cls] best 2688 combination zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] -Uplifting [print_byte] best 2668 combination reg byte x [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_word] best 2668 combination zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -Uplifting [print_char] best 2620 combination reg byte a [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] -Uplifting [print_sdword] best 2620 combination zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] -Uplifting [print_sword] best 2620 combination zp ZP_WORD:20 [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -Uplifting [print_sbyte] best 2608 combination reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] -Uplifting [print_dword] best 2608 combination zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] -Uplifting [print_ln] best 2608 combination -Uplifting [main] best 2608 combination -Uplifting [testChar] best 2608 combination -Uplifting [testShort] best 2608 combination -Uplifting [testInt] best 2608 combination -Uplifting [testLong] best 2608 combination +Uplifting [] best 2645 combination zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +Uplifting [print_str] best 2645 combination zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] +Uplifting [print_cls] best 2645 combination zp ZP_WORD:22 [ print_cls::sc#2 print_cls::sc#1 ] +Uplifting [print_byte] best 2622 combination reg byte x [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_word] best 2622 combination zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] +Uplifting [print_char] best 2577 combination reg byte a [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] +Uplifting [print_sdword] best 2577 combination zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] +Uplifting [print_sword] best 2577 combination zp ZP_WORD:20 [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] +Uplifting [print_dword] best 2577 combination zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] +Uplifting [print_ln] best 2577 combination +Uplifting [print_sbyte] best 2577 combination +Uplifting [main] best 2577 combination +Uplifting [testChar] best 2577 combination +Uplifting [testShort] best 2577 combination +Uplifting [testInt] best 2577 combination +Uplifting [testLong] best 2577 combination Coalescing zero page register with common assignment [ zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] ] with [ zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] ] with [ zp ZP_WORD:20 [ print_sword::w#7 print_sword::w#0 print_sword::w#10 ] ] - score: 1 Allocated (was zp ZP_WORD:12) zp ZP_WORD:8 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#7 print_sword::w#0 print_sword::w#10 ] Allocated (was zp ZP_WORD:16) zp ZP_WORD:10 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] Allocated (was zp ZP_WORD:18) zp ZP_WORD:12 [ print_str::str#5 print_str::str#7 print_str::str#0 ] -Allocated (was zp ZP_WORD:23) zp ZP_WORD:14 [ print_cls::sc#2 print_cls::sc#1 ] +Allocated (was zp ZP_WORD:22) zp ZP_WORD:14 [ print_cls::sc#2 print_cls::sc#1 ] ASSEMBLER BEFORE OPTIMIZATION //SEG0 File Comments @@ -3199,7 +3164,7 @@ bend: //SEG10 main main: { //SEG11 [5] call print_cls - //SEG12 [142] phi from main to print_cls [phi:main->print_cls] + //SEG12 [137] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] @@ -3496,7 +3461,7 @@ print_word: { //SEG114 [56] phi from print_word to print_byte [phi:print_word->print_byte] print_byte_from_print_word: //SEG115 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#142 [phi:print_word->print_byte#0] -- register_copy - //SEG116 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + //SEG116 [56] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy jsr print_byte jmp b1 //SEG117 print_word::@1 @@ -3508,7 +3473,7 @@ print_word: { //SEG120 [56] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] print_byte_from_b1: //SEG121 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_word::@1->print_byte#0] -- register_copy - //SEG122 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + //SEG122 [56] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy jsr print_byte jmp breturn //SEG123 print_word::@return @@ -3520,7 +3485,7 @@ print_word: { // Print a byte as HEX // print_byte(byte register(X) b) print_byte: { - //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr @@ -3538,7 +3503,7 @@ print_byte: { jmp b1 //SEG132 print_byte::@1 b1: - //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 + //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 //SEG134 [61] (byte) print_char::ch#6 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx @@ -3890,8 +3855,8 @@ testShort: { //SEG266 testChar testChar: { .const u = $e - .const n = -$e - .const s = -$e + .const n = $e + .label s = -$e //SEG267 [117] call print_str //SEG268 [68] phi from testChar to print_str [phi:testChar->print_str] print_str_from_testChar: @@ -3915,7 +3880,7 @@ testChar: { //SEG274 [56] phi from testChar::@1 to print_byte [phi:testChar::@1->print_byte] print_byte_from_b1: //SEG275 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#134 [phi:testChar::@1->print_byte#0] -- register_copy - //SEG276 [56] phi (byte) print_byte::b#4 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuxx=vbuc1 + //SEG276 [56] phi (byte) print_byte::b#5 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuxx=vbuc1 ldx #u jsr print_byte //SEG277 [120] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -3935,34 +3900,33 @@ testChar: { jmp b3 //SEG284 testChar::@3 b3: - //SEG285 [123] call print_sbyte - //SEG286 [131] phi from testChar::@3 to print_sbyte [phi:testChar::@3->print_sbyte] - print_sbyte_from_b3: - //SEG287 [131] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::n#0 [phi:testChar::@3->print_sbyte#0] -- vbsxx=vbsc1 + //SEG285 [123] call print_byte + //SEG286 [56] phi from testChar::@3 to print_byte [phi:testChar::@3->print_byte] + print_byte_from_b3: + //SEG287 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:testChar::@3->print_byte#0] -- register_copy + //SEG288 [56] phi (byte) print_byte::b#5 = (const byte) testChar::n#0 [phi:testChar::@3->print_byte#1] -- vbuxx=vbuc1 ldx #n - jsr print_sbyte - //SEG288 [124] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] + jsr print_byte + //SEG289 [124] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] b4_from_b3: jmp b4 - //SEG289 testChar::@4 + //SEG290 testChar::@4 b4: - //SEG290 [125] call print_char - //SEG291 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] + //SEG291 [125] call print_char + //SEG292 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] print_char_from_b4: - //SEG292 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - //SEG293 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + //SEG293 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy + //SEG294 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char - //SEG294 [126] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] + //SEG295 [126] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] b5_from_b4: jmp b5 - //SEG295 testChar::@5 + //SEG296 testChar::@5 b5: - //SEG296 [127] call print_sbyte - //SEG297 [131] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] + //SEG297 [127] call print_sbyte + //SEG298 [131] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] print_sbyte_from_b5: - //SEG298 [131] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::s#0 [phi:testChar::@5->print_sbyte#0] -- vbsxx=vbsc1 - ldx #s jsr print_sbyte //SEG299 [128] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] b6_from_b5: @@ -3987,93 +3951,66 @@ testChar: { } //SEG306 print_sbyte // Print a signed byte as HEX -// print_sbyte(signed byte register(X) b) print_sbyte: { - //SEG307 [132] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 - cpx #0 - bmi b1_from_print_sbyte - //SEG308 [133] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] - b3_from_print_sbyte: - jmp b3 - //SEG309 print_sbyte::@3 - b3: - //SEG310 [134] call print_char - //SEG311 [64] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] - print_char_from_b3: - //SEG312 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@3->print_char#0] -- register_copy - //SEG313 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - //SEG314 [135] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] - b2_from_b3: - b2_from_b4: - //SEG315 [135] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy - jmp b2 - //SEG316 print_sbyte::@2 - b2: - //SEG317 [136] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - //SEG318 [137] call print_byte - //SEG319 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] - print_byte_from_b2: - //SEG320 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_sbyte::@2->print_byte#0] -- register_copy - //SEG321 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - //SEG322 print_sbyte::@return - breturn: - //SEG323 [138] return - rts - //SEG324 [139] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + .const b = -testChar.s + //SEG307 [132] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] b1_from_print_sbyte: jmp b1 - //SEG325 print_sbyte::@1 + //SEG308 print_sbyte::@1 b1: - //SEG326 [140] call print_char - //SEG327 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + //SEG309 [133] call print_char + //SEG310 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] print_char_from_b1: - //SEG328 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@1->print_char#0] -- register_copy - //SEG329 [64] phi (byte) print_char::ch#15 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 + //SEG311 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@1->print_char#0] -- register_copy + //SEG312 [64] phi (byte) print_char::ch#15 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char - jmp b4 - //SEG330 print_sbyte::@4 - b4: - //SEG331 [141] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx - txa - eor #$ff - clc - adc #1 - tax - jmp b2_from_b4 + //SEG313 [134] phi from print_sbyte::@1 to print_sbyte::@2 [phi:print_sbyte::@1->print_sbyte::@2] + b2_from_b1: + jmp b2 + //SEG314 print_sbyte::@2 + b2: + //SEG315 [135] call print_byte + //SEG316 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + print_byte_from_b2: + //SEG317 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_sbyte::@2->print_byte#0] -- register_copy + //SEG318 [56] phi (byte) print_byte::b#5 = (byte)(const signed byte) print_sbyte::b#0 [phi:print_sbyte::@2->print_byte#1] -- vbuxx=vbuc1 + ldx #b + jsr print_byte + jmp breturn + //SEG319 print_sbyte::@return + breturn: + //SEG320 [136] return + rts } -//SEG332 print_cls +//SEG321 print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { .label sc = $e - //SEG333 [143] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + //SEG322 [138] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] b1_from_print_cls: - //SEG334 [143] phi (byte*) print_cls::sc#2 = (byte*) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + //SEG323 [138] phi (byte*) print_cls::sc#2 = (byte*) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 jmp b1 - //SEG335 [143] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + //SEG324 [138] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] b1_from_b1: - //SEG336 [143] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + //SEG325 [138] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy jmp b1 - //SEG337 print_cls::@1 + //SEG326 print_cls::@1 b1: - //SEG338 [144] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + //SEG327 [139] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - //SEG339 [145] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + //SEG328 [140] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 inc sc bne !+ inc sc+1 !: - //SEG340 [146] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 + //SEG329 [141] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 lda sc+1 cmp #>$400+$3e8 bne b1_from_b1 @@ -4081,12 +4018,12 @@ print_cls: { cmp #<$400+$3e8 bne b1_from_b1 jmp breturn - //SEG341 print_cls::@return + //SEG330 print_cls::@return breturn: - //SEG342 [147] return + //SEG331 [142] return rts } -//SEG343 File Data +//SEG332 File Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS @@ -4145,12 +4082,10 @@ Removing instruction jmp b4 Removing instruction jmp b5 Removing instruction jmp b6 Removing instruction jmp breturn -Removing instruction jmp b3 +Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn Removing instruction jmp b1 -Removing instruction jmp b4 -Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 @@ -4161,8 +4096,6 @@ Replacing label b1_from_print_sdword with b1 Replacing label b1_from_b2 with b1 Replacing label b1_from_print_sword with b1 Replacing label b2_from_b4 with b2 -Replacing label b1_from_print_sbyte with b1 -Replacing label b2_from_b4 with b2 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: @@ -4231,20 +4164,17 @@ Removing instruction print_byte_from_b1: Removing instruction b2_from_b1: Removing instruction print_char_from_b2: Removing instruction b3_from_b2: -Removing instruction print_sbyte_from_b3: +Removing instruction print_byte_from_b3: Removing instruction b4_from_b3: Removing instruction print_char_from_b4: Removing instruction b5_from_b4: Removing instruction print_sbyte_from_b5: Removing instruction b6_from_b5: Removing instruction print_ln_from_b6: -Removing instruction b3_from_print_sbyte: -Removing instruction print_char_from_b3: -Removing instruction b2_from_b3: -Removing instruction b2_from_b4: -Removing instruction print_byte_from_b2: Removing instruction b1_from_print_sbyte: Removing instruction print_char_from_b1: +Removing instruction b2_from_b1: +Removing instruction print_byte_from_b2: Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: @@ -4307,9 +4237,9 @@ Removing instruction b4: Removing instruction b5: Removing instruction b6: Removing instruction breturn: -Removing instruction b3: +Removing instruction b1: +Removing instruction b2: Removing instruction breturn: -Removing instruction b4: Removing instruction b1_from_print_cls: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -4337,10 +4267,9 @@ FINAL SYMBOL TABLE (label) print_byte::@1 (label) print_byte::@return (byte) print_byte::b -(byte) print_byte::b#0 reg byte x 4.0 (byte) print_byte::b#1 reg byte x 4.0 (byte) print_byte::b#2 reg byte x 4.0 -(byte) print_byte::b#4 reg byte x 2.5 +(byte) print_byte::b#5 reg byte x 2.0 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch @@ -4352,13 +4281,13 @@ FINAL SYMBOL TABLE (byte*) print_char_cursor#134 print_char_cursor zp ZP_WORD:10 3.583333333333333 (byte*) print_char_cursor#142 print_char_cursor zp ZP_WORD:10 6.0 (byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:10 3.0 -(byte*) print_char_cursor#146 print_char_cursor zp ZP_WORD:10 3.333333333333333 +(byte*) print_char_cursor#146 print_char_cursor zp ZP_WORD:10 3.9999999999999996 (byte*) print_char_cursor#153 print_char_cursor zp ZP_WORD:10 8.0 (byte*~) print_char_cursor#158 print_char_cursor zp ZP_WORD:10 4.0 (byte*~) print_char_cursor#159 print_char_cursor zp ZP_WORD:10 4.0 (byte*~) print_char_cursor#160 print_char_cursor zp ZP_WORD:10 4.0 -(byte*) print_char_cursor#25 print_char_cursor zp ZP_WORD:10 0.5666666666666664 -(byte*) print_char_cursor#92 print_char_cursor zp ZP_WORD:10 17.0 +(byte*) print_char_cursor#25 print_char_cursor zp ZP_WORD:10 0.6000000000000004 +(byte*) print_char_cursor#92 print_char_cursor zp ZP_WORD:10 16.0 (void()) print_cls() (label) print_cls::@1 (label) print_cls::@return @@ -4383,13 +4312,9 @@ FINAL SYMBOL TABLE (void()) print_sbyte((signed byte) print_sbyte::b) (label) print_sbyte::@1 (label) print_sbyte::@2 -(label) print_sbyte::@3 -(label) print_sbyte::@4 (label) print_sbyte::@return (signed byte) print_sbyte::b -(signed byte) print_sbyte::b#0 reg byte x 4.0 -(signed byte) print_sbyte::b#3 reg byte x 1.0 -(signed byte) print_sbyte::b#5 reg byte x 4.0 +(const signed byte) print_sbyte::b#0 b = -(const signed byte) testChar::s#0 (byte*) print_screen (void()) print_sdword((signed dword) print_sdword::dw) (label) print_sdword::@1 @@ -4434,8 +4359,8 @@ FINAL SYMBOL TABLE (label) testChar::@5 (label) testChar::@6 (label) testChar::@return -(signed byte) testChar::n -(const signed byte) testChar::n#0 n = (signed byte) -$e +(byte) testChar::n +(const byte) testChar::n#0 n = (byte) $e (signed byte) testChar::s (const signed byte) testChar::s#0 s = (signed byte) -$e (const string) testChar::str str = (string) "char: @" @@ -4490,18 +4415,17 @@ FINAL SYMBOL TABLE zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 print_dword::dw#2 print_dword::dw#0 ] zp ZP_WORD:8 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -reg byte x [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +reg byte x [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] zp ZP_WORD:10 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] zp ZP_WORD:12 [ print_str::str#5 print_str::str#7 print_str::str#0 ] -reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] zp ZP_WORD:14 [ print_cls::sc#2 print_cls::sc#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] FINAL ASSEMBLER -Score: 2168 +Score: 2143 //SEG0 File Comments // Tests the different standard C types @@ -4522,7 +4446,7 @@ Score: 2168 //SEG10 main main: { //SEG11 [5] call print_cls - //SEG12 [142] phi from main to print_cls [phi:main->print_cls] + //SEG12 [137] phi from main to print_cls [phi:main->print_cls] jsr print_cls //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] //SEG14 main::@1 @@ -4752,7 +4676,7 @@ print_word: { //SEG113 [52] call print_byte //SEG114 [56] phi from print_word to print_byte [phi:print_word->print_byte] //SEG115 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#142 [phi:print_word->print_byte#0] -- register_copy - //SEG116 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + //SEG116 [56] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy jsr print_byte //SEG117 print_word::@1 //SEG118 [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 -- vbuxx=_lo_vwuz1 @@ -4761,7 +4685,7 @@ print_word: { //SEG119 [54] call print_byte //SEG120 [56] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] //SEG121 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_word::@1->print_byte#0] -- register_copy - //SEG122 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + //SEG122 [56] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy jsr print_byte //SEG123 print_word::@return //SEG124 [55] return @@ -4771,7 +4695,7 @@ print_word: { // Print a byte as HEX // print_byte(byte register(X) b) print_byte: { - //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr @@ -4786,7 +4710,7 @@ print_byte: { //SEG131 [64] phi (byte) print_char::ch#15 = (byte) print_char::ch#5 [phi:print_byte->print_char#1] -- register_copy jsr print_char //SEG132 print_byte::@1 - //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 + //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 //SEG134 [61] (byte) print_char::ch#6 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx @@ -5058,8 +4982,8 @@ testShort: { //SEG266 testChar testChar: { .const u = $e - .const n = -$e - .const s = -$e + .const n = $e + .label s = -$e //SEG267 [117] call print_str //SEG268 [68] phi from testChar to print_str [phi:testChar->print_str] //SEG269 [68] phi (byte*) print_char_cursor#153 = (byte*) 1024 [phi:testChar->print_str#0] -- pbuz1=pbuc1 @@ -5078,7 +5002,7 @@ testChar: { //SEG273 [119] call print_byte //SEG274 [56] phi from testChar::@1 to print_byte [phi:testChar::@1->print_byte] //SEG275 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#134 [phi:testChar::@1->print_byte#0] -- register_copy - //SEG276 [56] phi (byte) print_byte::b#4 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuxx=vbuc1 + //SEG276 [56] phi (byte) print_byte::b#5 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuxx=vbuc1 ldx #u jsr print_byte //SEG277 [120] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -5091,25 +5015,24 @@ testChar: { jsr print_char //SEG283 [122] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] //SEG284 testChar::@3 - //SEG285 [123] call print_sbyte - //SEG286 [131] phi from testChar::@3 to print_sbyte [phi:testChar::@3->print_sbyte] - //SEG287 [131] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::n#0 [phi:testChar::@3->print_sbyte#0] -- vbsxx=vbsc1 + //SEG285 [123] call print_byte + //SEG286 [56] phi from testChar::@3 to print_byte [phi:testChar::@3->print_byte] + //SEG287 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:testChar::@3->print_byte#0] -- register_copy + //SEG288 [56] phi (byte) print_byte::b#5 = (const byte) testChar::n#0 [phi:testChar::@3->print_byte#1] -- vbuxx=vbuc1 ldx #n - jsr print_sbyte - //SEG288 [124] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] - //SEG289 testChar::@4 - //SEG290 [125] call print_char - //SEG291 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] - //SEG292 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - //SEG293 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + jsr print_byte + //SEG289 [124] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] + //SEG290 testChar::@4 + //SEG291 [125] call print_char + //SEG292 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] + //SEG293 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy + //SEG294 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char - //SEG294 [126] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] - //SEG295 testChar::@5 - //SEG296 [127] call print_sbyte - //SEG297 [131] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] - //SEG298 [131] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::s#0 [phi:testChar::@5->print_sbyte#0] -- vbsxx=vbsc1 - ldx #s + //SEG295 [126] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] + //SEG296 testChar::@5 + //SEG297 [127] call print_sbyte + //SEG298 [131] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] jsr print_sbyte //SEG299 [128] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] //SEG300 testChar::@6 @@ -5128,84 +5051,62 @@ testChar: { } //SEG306 print_sbyte // Print a signed byte as HEX -// print_sbyte(signed byte register(X) b) print_sbyte: { - //SEG307 [132] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 - cpx #0 - bmi b1 - //SEG308 [133] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] - //SEG309 print_sbyte::@3 - //SEG310 [134] call print_char - //SEG311 [64] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] - //SEG312 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@3->print_char#0] -- register_copy - //SEG313 [64] phi (byte) print_char::ch#15 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - //SEG314 [135] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] - //SEG315 [135] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy - //SEG316 print_sbyte::@2 - b2: - //SEG317 [136] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 - //SEG318 [137] call print_byte - //SEG319 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] - //SEG320 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_sbyte::@2->print_byte#0] -- register_copy - //SEG321 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy - jsr print_byte - //SEG322 print_sbyte::@return - //SEG323 [138] return - rts - //SEG324 [139] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] - //SEG325 print_sbyte::@1 - b1: - //SEG326 [140] call print_char - //SEG327 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] - //SEG328 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@1->print_char#0] -- register_copy - //SEG329 [64] phi (byte) print_char::ch#15 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 + .const b = -testChar.s + //SEG307 [132] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + //SEG308 print_sbyte::@1 + //SEG309 [133] call print_char + //SEG310 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + //SEG311 [64] phi (byte*) print_char_cursor#92 = (byte*) print_char_cursor#25 [phi:print_sbyte::@1->print_char#0] -- register_copy + //SEG312 [64] phi (byte) print_char::ch#15 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char - //SEG330 print_sbyte::@4 - //SEG331 [141] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx - txa - eor #$ff - clc - adc #1 - tax - jmp b2 + //SEG313 [134] phi from print_sbyte::@1 to print_sbyte::@2 [phi:print_sbyte::@1->print_sbyte::@2] + //SEG314 print_sbyte::@2 + //SEG315 [135] call print_byte + //SEG316 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + //SEG317 [56] phi (byte*) print_char_cursor#146 = (byte*) print_char_cursor#25 [phi:print_sbyte::@2->print_byte#0] -- register_copy + //SEG318 [56] phi (byte) print_byte::b#5 = (byte)(const signed byte) print_sbyte::b#0 [phi:print_sbyte::@2->print_byte#1] -- vbuxx=vbuc1 + ldx #b + jsr print_byte + //SEG319 print_sbyte::@return + //SEG320 [136] return + rts } -//SEG332 print_cls +//SEG321 print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { .label sc = $e - //SEG333 [143] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] - //SEG334 [143] phi (byte*) print_cls::sc#2 = (byte*) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + //SEG322 [138] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + //SEG323 [138] phi (byte*) print_cls::sc#2 = (byte*) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 lda #<$400 sta sc lda #>$400 sta sc+1 - //SEG335 [143] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] - //SEG336 [143] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy - //SEG337 print_cls::@1 + //SEG324 [138] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + //SEG325 [138] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + //SEG326 print_cls::@1 b1: - //SEG338 [144] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + //SEG327 [139] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - //SEG339 [145] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + //SEG328 [140] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 inc sc bne !+ inc sc+1 !: - //SEG340 [146] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 + //SEG329 [141] if((byte*) print_cls::sc#1!=(byte*) 1024+(word) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 lda sc+1 cmp #>$400+$3e8 bne b1 lda sc cmp #<$400+$3e8 bne b1 - //SEG341 print_cls::@return - //SEG342 [147] return + //SEG330 print_cls::@return + //SEG331 [142] return rts } -//SEG343 File Data +//SEG332 File Data print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/c-types.sym b/src/test/ref/c-types.sym index 0f8a79904..2e2d87238 100644 --- a/src/test/ref/c-types.sym +++ b/src/test/ref/c-types.sym @@ -13,10 +13,9 @@ (label) print_byte::@1 (label) print_byte::@return (byte) print_byte::b -(byte) print_byte::b#0 reg byte x 4.0 (byte) print_byte::b#1 reg byte x 4.0 (byte) print_byte::b#2 reg byte x 4.0 -(byte) print_byte::b#4 reg byte x 2.5 +(byte) print_byte::b#5 reg byte x 2.0 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch @@ -28,13 +27,13 @@ (byte*) print_char_cursor#134 print_char_cursor zp ZP_WORD:10 3.583333333333333 (byte*) print_char_cursor#142 print_char_cursor zp ZP_WORD:10 6.0 (byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:10 3.0 -(byte*) print_char_cursor#146 print_char_cursor zp ZP_WORD:10 3.333333333333333 +(byte*) print_char_cursor#146 print_char_cursor zp ZP_WORD:10 3.9999999999999996 (byte*) print_char_cursor#153 print_char_cursor zp ZP_WORD:10 8.0 (byte*~) print_char_cursor#158 print_char_cursor zp ZP_WORD:10 4.0 (byte*~) print_char_cursor#159 print_char_cursor zp ZP_WORD:10 4.0 (byte*~) print_char_cursor#160 print_char_cursor zp ZP_WORD:10 4.0 -(byte*) print_char_cursor#25 print_char_cursor zp ZP_WORD:10 0.5666666666666664 -(byte*) print_char_cursor#92 print_char_cursor zp ZP_WORD:10 17.0 +(byte*) print_char_cursor#25 print_char_cursor zp ZP_WORD:10 0.6000000000000004 +(byte*) print_char_cursor#92 print_char_cursor zp ZP_WORD:10 16.0 (void()) print_cls() (label) print_cls::@1 (label) print_cls::@return @@ -59,13 +58,9 @@ (void()) print_sbyte((signed byte) print_sbyte::b) (label) print_sbyte::@1 (label) print_sbyte::@2 -(label) print_sbyte::@3 -(label) print_sbyte::@4 (label) print_sbyte::@return (signed byte) print_sbyte::b -(signed byte) print_sbyte::b#0 reg byte x 4.0 -(signed byte) print_sbyte::b#3 reg byte x 1.0 -(signed byte) print_sbyte::b#5 reg byte x 4.0 +(const signed byte) print_sbyte::b#0 b = -(const signed byte) testChar::s#0 (byte*) print_screen (void()) print_sdword((signed dword) print_sdword::dw) (label) print_sdword::@1 @@ -110,8 +105,8 @@ (label) testChar::@5 (label) testChar::@6 (label) testChar::@return -(signed byte) testChar::n -(const signed byte) testChar::n#0 n = (signed byte) -$e +(byte) testChar::n +(const byte) testChar::n#0 n = (byte) $e (signed byte) testChar::s (const signed byte) testChar::s#0 s = (signed byte) -$e (const string) testChar::str str = (string) "char: @" @@ -166,11 +161,10 @@ zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 print_dword::dw#2 print_dword::dw#0 ] zp ZP_WORD:8 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#7 print_sword::w#0 print_sword::w#10 ] -reg byte x [ print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +reg byte x [ print_byte::b#5 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_char::ch#15 print_char::ch#5 print_char::ch#6 ] zp ZP_WORD:10 [ print_char_cursor#92 print_char_cursor#146 print_char_cursor#142 print_char_cursor#143 print_char_cursor#25 print_char_cursor#134 print_char_cursor#153 print_char_cursor#158 print_char_cursor#159 print_char_cursor#160 print_char_cursor#1 ] zp ZP_WORD:12 [ print_str::str#5 print_str::str#7 print_str::str#0 ] -reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] zp ZP_WORD:14 [ print_cls::sc#2 print_cls::sc#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] diff --git a/src/test/ref/typeid-simple.asm b/src/test/ref/typeid-simple.asm index 9623609f6..1402fec0c 100644 --- a/src/test/ref/typeid-simple.asm +++ b/src/test/ref/typeid-simple.asm @@ -59,5 +59,28 @@ main: { // Pointer to pointer lda #TYPEID_POINTER_POINTER_BYTE sta SCREEN+$10 + // Test C types + lda #TYPEID_BYTE + sta SCREEN+$28 + sta SCREEN+$29 + lda #TYPEID_SIGNED_BYTE + sta SCREEN+$2a + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2b + lda #TYPEID_WORD + sta SCREEN+$2c + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2d + sta SCREEN+$2e + lda #TYPEID_WORD + sta SCREEN+$2f + lda #TYPEID_SIGNED_WORD + sta SCREEN+$30 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$31 + lda #TYPEID_DWORD + sta SCREEN+$32 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$33 rts } diff --git a/src/test/ref/typeid-simple.cfg b/src/test/ref/typeid-simple.cfg index c402ecc61..656b5a59e 100644 --- a/src/test/ref/typeid-simple.cfg +++ b/src/test/ref/typeid-simple.cfg @@ -25,7 +25,19 @@ main: scope:[main] from @1 [18] *((const byte*) main::SCREEN#0+(byte) $e) ← (const byte) TYPEID_POINTER_BOOL [19] *((const byte*) main::SCREEN#0+(byte) $f) ← (const byte) TYPEID_POINTER_PROCEDURE [20] *((const byte*) main::SCREEN#0+(byte) $10) ← (const byte) TYPEID_POINTER_POINTER_BYTE + [21] *((const byte*) main::SCREEN#0+(byte) $28) ← (const byte) TYPEID_BYTE + [22] *((const byte*) main::SCREEN#0+(byte) $29) ← (const byte) TYPEID_BYTE + [23] *((const byte*) main::SCREEN#0+(byte) $2a) ← (const byte) TYPEID_SIGNED_BYTE + [24] *((const byte*) main::SCREEN#0+(byte) $2b) ← (const byte) TYPEID_SIGNED_WORD + [25] *((const byte*) main::SCREEN#0+(byte) $2c) ← (const byte) TYPEID_WORD + [26] *((const byte*) main::SCREEN#0+(byte) $2d) ← (const byte) TYPEID_SIGNED_WORD + [27] *((const byte*) main::SCREEN#0+(byte) $2e) ← (const byte) TYPEID_SIGNED_WORD + [28] *((const byte*) main::SCREEN#0+(byte) $2f) ← (const byte) TYPEID_WORD + [29] *((const byte*) main::SCREEN#0+(byte) $30) ← (const byte) TYPEID_SIGNED_WORD + [30] *((const byte*) main::SCREEN#0+(byte) $31) ← (const byte) TYPEID_SIGNED_DWORD + [31] *((const byte*) main::SCREEN#0+(byte) $32) ← (const byte) TYPEID_DWORD + [32] *((const byte*) main::SCREEN#0+(byte) $33) ← (const byte) TYPEID_SIGNED_DWORD to:main::@return main::@return: scope:[main] from main - [21] return + [33] return to:@return diff --git a/src/test/ref/typeid-simple.log b/src/test/ref/typeid-simple.log index 06a1caab5..649b12a85 100644 --- a/src/test/ref/typeid-simple.log +++ b/src/test/ref/typeid-simple.log @@ -39,6 +39,31 @@ main: scope:[main] from @1 (byte) main::idx#16 ← ++ (byte) main::idx#15 *((byte*) main::SCREEN#0 + (byte) main::idx#16) ← (const byte) TYPEID_POINTER_POINTER_BYTE (byte) main::idx#17 ← ++ (byte) main::idx#16 + (byte) main::idx#18 ← (number) $28 + *((byte*) main::SCREEN#0 + (byte) main::idx#18) ← (const byte) TYPEID_BYTE + (byte) main::idx#19 ← ++ (byte) main::idx#18 + *((byte*) main::SCREEN#0 + (byte) main::idx#19) ← (const byte) TYPEID_BYTE + (byte) main::idx#20 ← ++ (byte) main::idx#19 + *((byte*) main::SCREEN#0 + (byte) main::idx#20) ← (const byte) TYPEID_SIGNED_BYTE + (byte) main::idx#21 ← ++ (byte) main::idx#20 + *((byte*) main::SCREEN#0 + (byte) main::idx#21) ← (const byte) TYPEID_SIGNED_WORD + (byte) main::idx#22 ← ++ (byte) main::idx#21 + *((byte*) main::SCREEN#0 + (byte) main::idx#22) ← (const byte) TYPEID_WORD + (byte) main::idx#23 ← ++ (byte) main::idx#22 + *((byte*) main::SCREEN#0 + (byte) main::idx#23) ← (const byte) TYPEID_SIGNED_WORD + (byte) main::idx#24 ← ++ (byte) main::idx#23 + *((byte*) main::SCREEN#0 + (byte) main::idx#24) ← (const byte) TYPEID_SIGNED_WORD + (byte) main::idx#25 ← ++ (byte) main::idx#24 + *((byte*) main::SCREEN#0 + (byte) main::idx#25) ← (const byte) TYPEID_WORD + (byte) main::idx#26 ← ++ (byte) main::idx#25 + *((byte*) main::SCREEN#0 + (byte) main::idx#26) ← (const byte) TYPEID_SIGNED_WORD + (byte) main::idx#27 ← ++ (byte) main::idx#26 + *((byte*) main::SCREEN#0 + (byte) main::idx#27) ← (const byte) TYPEID_SIGNED_DWORD + (byte) main::idx#28 ← ++ (byte) main::idx#27 + *((byte*) main::SCREEN#0 + (byte) main::idx#28) ← (const byte) TYPEID_DWORD + (byte) main::idx#29 ← ++ (byte) main::idx#28 + *((byte*) main::SCREEN#0 + (byte) main::idx#29) ← (const byte) TYPEID_SIGNED_DWORD + (byte) main::idx#30 ← ++ (byte) main::idx#29 to:main::@return main::@return: scope:[main] from main return @@ -87,8 +112,21 @@ SYMBOL TABLE SSA (byte) main::idx#15 (byte) main::idx#16 (byte) main::idx#17 +(byte) main::idx#18 +(byte) main::idx#19 (byte) main::idx#2 +(byte) main::idx#20 +(byte) main::idx#21 +(byte) main::idx#22 +(byte) main::idx#23 +(byte) main::idx#24 +(byte) main::idx#25 +(byte) main::idx#26 +(byte) main::idx#27 +(byte) main::idx#28 +(byte) main::idx#29 (byte) main::idx#3 +(byte) main::idx#30 (byte) main::idx#4 (byte) main::idx#5 (byte) main::idx#6 @@ -97,65 +135,93 @@ SYMBOL TABLE SSA (byte) main::idx#9 Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 +Adding number conversion cast (unumber) $28 in (byte) main::idx#18 ← (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 +Inlining cast (byte) main::idx#18 ← (unumber)(number) $28 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 +Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant (const byte*) main::SCREEN#0 = (byte*) 1024 Constant (const byte) main::idx#0 = 0 +Constant (const byte) main::idx#18 = $28 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero main::SCREEN#0 in [2] *((const byte*) main::SCREEN#0 + (const byte) main::idx#0) ← (const byte) TYPEID_VOID Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte) main::idx#17 and assignment [33] (byte) main::idx#17 ← ++ (byte) main::idx#16 +Eliminating unused variable (byte) main::idx#30 and assignment [57] (byte) main::idx#30 ← ++ (byte) main::idx#29 Successful SSA optimization PassNEliminateUnusedVars Constant right-side identified [1] (byte) main::idx#1 ← ++ (const byte) main::idx#0 +Constant right-side identified [34] (byte) main::idx#19 ← ++ (const byte) main::idx#18 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#1 = ++main::idx#0 +Constant (const byte) main::idx#19 = ++main::idx#18 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [2] (byte) main::idx#2 ← ++ (const byte) main::idx#1 +Constant right-side identified [34] (byte) main::idx#20 ← ++ (const byte) main::idx#19 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#2 = ++main::idx#1 +Constant (const byte) main::idx#20 = ++main::idx#19 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [3] (byte) main::idx#3 ← ++ (const byte) main::idx#2 +Constant right-side identified [34] (byte) main::idx#21 ← ++ (const byte) main::idx#20 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#3 = ++main::idx#2 +Constant (const byte) main::idx#21 = ++main::idx#20 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [4] (byte) main::idx#4 ← ++ (const byte) main::idx#3 +Constant right-side identified [34] (byte) main::idx#22 ← ++ (const byte) main::idx#21 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#4 = ++main::idx#3 +Constant (const byte) main::idx#22 = ++main::idx#21 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [5] (byte) main::idx#5 ← ++ (const byte) main::idx#4 +Constant right-side identified [34] (byte) main::idx#23 ← ++ (const byte) main::idx#22 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#5 = ++main::idx#4 +Constant (const byte) main::idx#23 = ++main::idx#22 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [6] (byte) main::idx#6 ← ++ (const byte) main::idx#5 +Constant right-side identified [34] (byte) main::idx#24 ← ++ (const byte) main::idx#23 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#6 = ++main::idx#5 +Constant (const byte) main::idx#24 = ++main::idx#23 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [7] (byte) main::idx#7 ← ++ (const byte) main::idx#6 +Constant right-side identified [34] (byte) main::idx#25 ← ++ (const byte) main::idx#24 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#7 = ++main::idx#6 +Constant (const byte) main::idx#25 = ++main::idx#24 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [8] (byte) main::idx#8 ← ++ (const byte) main::idx#7 +Constant right-side identified [34] (byte) main::idx#26 ← ++ (const byte) main::idx#25 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#8 = ++main::idx#7 +Constant (const byte) main::idx#26 = ++main::idx#25 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [9] (byte) main::idx#9 ← ++ (const byte) main::idx#8 +Constant right-side identified [34] (byte) main::idx#27 ← ++ (const byte) main::idx#26 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#9 = ++main::idx#8 +Constant (const byte) main::idx#27 = ++main::idx#26 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [10] (byte) main::idx#10 ← ++ (const byte) main::idx#9 +Constant right-side identified [34] (byte) main::idx#28 ← ++ (const byte) main::idx#27 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#10 = ++main::idx#9 +Constant (const byte) main::idx#28 = ++main::idx#27 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [11] (byte) main::idx#11 ← ++ (const byte) main::idx#10 +Constant right-side identified [34] (byte) main::idx#29 ← ++ (const byte) main::idx#28 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#11 = ++main::idx#10 +Constant (const byte) main::idx#29 = ++main::idx#28 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [12] (byte) main::idx#12 ← ++ (const byte) main::idx#11 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -178,27 +244,51 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::idx#16 = ++main::idx#15 Successful SSA optimization Pass2ConstantIdentification Inlining constant with different constant siblings (const byte) main::idx#0 +Inlining constant with different constant siblings (const byte) main::idx#18 Inlining constant with different constant siblings (const byte) main::idx#1 +Inlining constant with different constant siblings (const byte) main::idx#19 Inlining constant with different constant siblings (const byte) main::idx#2 +Inlining constant with different constant siblings (const byte) main::idx#20 Inlining constant with different constant siblings (const byte) main::idx#3 +Inlining constant with different constant siblings (const byte) main::idx#21 Inlining constant with different constant siblings (const byte) main::idx#4 +Inlining constant with different constant siblings (const byte) main::idx#22 Inlining constant with different constant siblings (const byte) main::idx#5 +Inlining constant with different constant siblings (const byte) main::idx#23 Inlining constant with different constant siblings (const byte) main::idx#6 +Inlining constant with different constant siblings (const byte) main::idx#24 Inlining constant with different constant siblings (const byte) main::idx#7 +Inlining constant with different constant siblings (const byte) main::idx#25 Inlining constant with different constant siblings (const byte) main::idx#8 +Inlining constant with different constant siblings (const byte) main::idx#26 Inlining constant with different constant siblings (const byte) main::idx#9 +Inlining constant with different constant siblings (const byte) main::idx#27 Inlining constant with different constant siblings (const byte) main::idx#10 +Inlining constant with different constant siblings (const byte) main::idx#28 Inlining constant with different constant siblings (const byte) main::idx#11 +Inlining constant with different constant siblings (const byte) main::idx#29 Inlining constant with different constant siblings (const byte) main::idx#12 Inlining constant with different constant siblings (const byte) main::idx#13 Inlining constant with different constant siblings (const byte) main::idx#14 Inlining constant with different constant siblings (const byte) main::idx#15 Inlining constant with different constant siblings (const byte) main::idx#16 Constant inlined main::idx#16 = ++++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::idx#18 = (byte) $28 +Constant inlined main::idx#19 = ++(byte) $28 Constant inlined main::idx#12 = ++++++++++++++++++++++++(byte) 0 Constant inlined main::idx#13 = ++++++++++++++++++++++++++(byte) 0 Constant inlined main::idx#14 = ++++++++++++++++++++++++++++(byte) 0 Constant inlined main::idx#15 = ++++++++++++++++++++++++++++++(byte) 0 +Constant inlined main::idx#20 = ++++(byte) $28 +Constant inlined main::idx#21 = ++++++(byte) $28 +Constant inlined main::idx#22 = ++++++++(byte) $28 +Constant inlined main::idx#27 = ++++++++++++++++++(byte) $28 +Constant inlined main::idx#28 = ++++++++++++++++++++(byte) $28 +Constant inlined main::idx#29 = ++++++++++++++++++++++(byte) $28 +Constant inlined main::idx#23 = ++++++++++(byte) $28 +Constant inlined main::idx#24 = ++++++++++++(byte) $28 +Constant inlined main::idx#25 = ++++++++++++++(byte) $28 +Constant inlined main::idx#26 = ++++++++++++++++(byte) $28 Constant inlined main::idx#0 = (byte) 0 Constant inlined main::idx#1 = ++(byte) 0 Constant inlined main::idx#2 = ++++(byte) 0 @@ -228,6 +318,18 @@ Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++++++++++++ Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++++++++++++++0) Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++++++++++++++++0) Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++++++++++++++++++0) +Consolidated array index constant in *(main::SCREEN#0+$28) +Consolidated array index constant in *(main::SCREEN#0+++$28) +Consolidated array index constant in *(main::SCREEN#0+++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++++++$28) +Consolidated array index constant in *(main::SCREEN#0+++++++++++++++++++++++$28) Successful SSA optimization Pass2ConstantAdditionElimination Simplifying constant integer increment ++0 Simplifying constant integer increment ++0 @@ -245,6 +347,17 @@ Simplifying constant integer increment ++$b Simplifying constant integer increment ++$c Simplifying constant integer increment ++$d Simplifying constant integer increment ++$e +Simplifying constant integer increment ++$28 +Simplifying constant integer increment ++$28 +Simplifying constant integer increment ++$29 +Simplifying constant integer increment ++$2a +Simplifying constant integer increment ++$2b +Simplifying constant integer increment ++$2c +Simplifying constant integer increment ++$2d +Simplifying constant integer increment ++$2e +Simplifying constant integer increment ++$2f +Simplifying constant integer increment ++$30 +Simplifying constant integer increment ++$31 Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 @@ -261,6 +374,16 @@ Simplifying constant integer increment ++$c Simplifying constant integer increment ++$d Simplifying constant integer increment ++$e Simplifying constant integer increment ++$f +Simplifying constant integer increment ++$29 +Simplifying constant integer increment ++$2a +Simplifying constant integer increment ++$2b +Simplifying constant integer increment ++$2c +Simplifying constant integer increment ++$2d +Simplifying constant integer increment ++$2e +Simplifying constant integer increment ++$2f +Simplifying constant integer increment ++$30 +Simplifying constant integer increment ++$31 +Simplifying constant integer increment ++$32 Successful SSA optimization Pass2ConstantSimplification Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 @@ -304,9 +427,21 @@ main: scope:[main] from @1 [18] *((const byte*) main::SCREEN#0+(byte) $e) ← (const byte) TYPEID_POINTER_BOOL [19] *((const byte*) main::SCREEN#0+(byte) $f) ← (const byte) TYPEID_POINTER_PROCEDURE [20] *((const byte*) main::SCREEN#0+(byte) $10) ← (const byte) TYPEID_POINTER_POINTER_BYTE + [21] *((const byte*) main::SCREEN#0+(byte) $28) ← (const byte) TYPEID_BYTE + [22] *((const byte*) main::SCREEN#0+(byte) $29) ← (const byte) TYPEID_BYTE + [23] *((const byte*) main::SCREEN#0+(byte) $2a) ← (const byte) TYPEID_SIGNED_BYTE + [24] *((const byte*) main::SCREEN#0+(byte) $2b) ← (const byte) TYPEID_SIGNED_WORD + [25] *((const byte*) main::SCREEN#0+(byte) $2c) ← (const byte) TYPEID_WORD + [26] *((const byte*) main::SCREEN#0+(byte) $2d) ← (const byte) TYPEID_SIGNED_WORD + [27] *((const byte*) main::SCREEN#0+(byte) $2e) ← (const byte) TYPEID_SIGNED_WORD + [28] *((const byte*) main::SCREEN#0+(byte) $2f) ← (const byte) TYPEID_WORD + [29] *((const byte*) main::SCREEN#0+(byte) $30) ← (const byte) TYPEID_SIGNED_WORD + [30] *((const byte*) main::SCREEN#0+(byte) $31) ← (const byte) TYPEID_SIGNED_DWORD + [31] *((const byte*) main::SCREEN#0+(byte) $32) ← (const byte) TYPEID_DWORD + [32] *((const byte*) main::SCREEN#0+(byte) $33) ← (const byte) TYPEID_SIGNED_DWORD to:main::@return main::@return: scope:[main] from main - [21] return + [33] return to:@return @@ -415,13 +550,50 @@ main: { // Pointer to pointer lda #TYPEID_POINTER_POINTER_BYTE sta SCREEN+$10 + //SEG27 [21] *((const byte*) main::SCREEN#0+(byte) $28) ← (const byte) TYPEID_BYTE -- _deref_pbuc1=vbuc2 + // Test C types + lda #TYPEID_BYTE + sta SCREEN+$28 + //SEG28 [22] *((const byte*) main::SCREEN#0+(byte) $29) ← (const byte) TYPEID_BYTE -- _deref_pbuc1=vbuc2 + lda #TYPEID_BYTE + sta SCREEN+$29 + //SEG29 [23] *((const byte*) main::SCREEN#0+(byte) $2a) ← (const byte) TYPEID_SIGNED_BYTE -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_BYTE + sta SCREEN+$2a + //SEG30 [24] *((const byte*) main::SCREEN#0+(byte) $2b) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2b + //SEG31 [25] *((const byte*) main::SCREEN#0+(byte) $2c) ← (const byte) TYPEID_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_WORD + sta SCREEN+$2c + //SEG32 [26] *((const byte*) main::SCREEN#0+(byte) $2d) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2d + //SEG33 [27] *((const byte*) main::SCREEN#0+(byte) $2e) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2e + //SEG34 [28] *((const byte*) main::SCREEN#0+(byte) $2f) ← (const byte) TYPEID_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_WORD + sta SCREEN+$2f + //SEG35 [29] *((const byte*) main::SCREEN#0+(byte) $30) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$30 + //SEG36 [30] *((const byte*) main::SCREEN#0+(byte) $31) ← (const byte) TYPEID_SIGNED_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$31 + //SEG37 [31] *((const byte*) main::SCREEN#0+(byte) $32) ← (const byte) TYPEID_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_DWORD + sta SCREEN+$32 + //SEG38 [32] *((const byte*) main::SCREEN#0+(byte) $33) ← (const byte) TYPEID_SIGNED_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$33 jmp breturn - //SEG27 main::@return + //SEG39 main::@return breturn: - //SEG28 [21] return + //SEG40 [33] return rts } -//SEG29 File Data +//SEG41 File Data REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] *((const byte*) main::SCREEN#0) ← (const byte) TYPEID_VOID [ ] ( main:2 [ ] ) always clobbers reg byte a @@ -441,13 +613,25 @@ Statement [17] *((const byte*) main::SCREEN#0+(byte) $d) ← (const byte) TYPEID Statement [18] *((const byte*) main::SCREEN#0+(byte) $e) ← (const byte) TYPEID_POINTER_BOOL [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [19] *((const byte*) main::SCREEN#0+(byte) $f) ← (const byte) TYPEID_POINTER_PROCEDURE [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [20] *((const byte*) main::SCREEN#0+(byte) $10) ← (const byte) TYPEID_POINTER_POINTER_BYTE [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [21] *((const byte*) main::SCREEN#0+(byte) $28) ← (const byte) TYPEID_BYTE [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [22] *((const byte*) main::SCREEN#0+(byte) $29) ← (const byte) TYPEID_BYTE [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [23] *((const byte*) main::SCREEN#0+(byte) $2a) ← (const byte) TYPEID_SIGNED_BYTE [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [24] *((const byte*) main::SCREEN#0+(byte) $2b) ← (const byte) TYPEID_SIGNED_WORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [25] *((const byte*) main::SCREEN#0+(byte) $2c) ← (const byte) TYPEID_WORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [26] *((const byte*) main::SCREEN#0+(byte) $2d) ← (const byte) TYPEID_SIGNED_WORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [27] *((const byte*) main::SCREEN#0+(byte) $2e) ← (const byte) TYPEID_SIGNED_WORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [28] *((const byte*) main::SCREEN#0+(byte) $2f) ← (const byte) TYPEID_WORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [29] *((const byte*) main::SCREEN#0+(byte) $30) ← (const byte) TYPEID_SIGNED_WORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [30] *((const byte*) main::SCREEN#0+(byte) $31) ← (const byte) TYPEID_SIGNED_DWORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [31] *((const byte*) main::SCREEN#0+(byte) $32) ← (const byte) TYPEID_DWORD [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [32] *((const byte*) main::SCREEN#0+(byte) $33) ← (const byte) TYPEID_SIGNED_DWORD [ ] ( main:2 [ ] ) always clobbers reg byte a REGISTER UPLIFT SCOPES Uplift Scope [main] Uplift Scope [] -Uplifting [main] best 123 combination -Uplifting [] best 123 combination +Uplifting [main] best 195 combination +Uplifting [] best 195 combination ASSEMBLER BEFORE OPTIMIZATION //SEG0 File Comments @@ -546,19 +730,59 @@ main: { // Pointer to pointer lda #TYPEID_POINTER_POINTER_BYTE sta SCREEN+$10 + //SEG27 [21] *((const byte*) main::SCREEN#0+(byte) $28) ← (const byte) TYPEID_BYTE -- _deref_pbuc1=vbuc2 + // Test C types + lda #TYPEID_BYTE + sta SCREEN+$28 + //SEG28 [22] *((const byte*) main::SCREEN#0+(byte) $29) ← (const byte) TYPEID_BYTE -- _deref_pbuc1=vbuc2 + lda #TYPEID_BYTE + sta SCREEN+$29 + //SEG29 [23] *((const byte*) main::SCREEN#0+(byte) $2a) ← (const byte) TYPEID_SIGNED_BYTE -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_BYTE + sta SCREEN+$2a + //SEG30 [24] *((const byte*) main::SCREEN#0+(byte) $2b) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2b + //SEG31 [25] *((const byte*) main::SCREEN#0+(byte) $2c) ← (const byte) TYPEID_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_WORD + sta SCREEN+$2c + //SEG32 [26] *((const byte*) main::SCREEN#0+(byte) $2d) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2d + //SEG33 [27] *((const byte*) main::SCREEN#0+(byte) $2e) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2e + //SEG34 [28] *((const byte*) main::SCREEN#0+(byte) $2f) ← (const byte) TYPEID_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_WORD + sta SCREEN+$2f + //SEG35 [29] *((const byte*) main::SCREEN#0+(byte) $30) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$30 + //SEG36 [30] *((const byte*) main::SCREEN#0+(byte) $31) ← (const byte) TYPEID_SIGNED_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$31 + //SEG37 [31] *((const byte*) main::SCREEN#0+(byte) $32) ← (const byte) TYPEID_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_DWORD + sta SCREEN+$32 + //SEG38 [32] *((const byte*) main::SCREEN#0+(byte) $33) ← (const byte) TYPEID_SIGNED_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$33 jmp breturn - //SEG27 main::@return + //SEG39 main::@return breturn: - //SEG28 [21] return + //SEG40 [33] return rts } -//SEG29 File Data +//SEG41 File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #TYPEID_BYTE +Removing instruction lda #TYPEID_SIGNED_WORD +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction bend_from_b1: @@ -602,7 +826,7 @@ FINAL SYMBOL TABLE FINAL ASSEMBLER -Score: 108 +Score: 176 //SEG0 File Comments // Test typeid() of the different types @@ -692,9 +916,44 @@ main: { // Pointer to pointer lda #TYPEID_POINTER_POINTER_BYTE sta SCREEN+$10 - //SEG27 main::@return - //SEG28 [21] return + //SEG27 [21] *((const byte*) main::SCREEN#0+(byte) $28) ← (const byte) TYPEID_BYTE -- _deref_pbuc1=vbuc2 + // Test C types + lda #TYPEID_BYTE + sta SCREEN+$28 + //SEG28 [22] *((const byte*) main::SCREEN#0+(byte) $29) ← (const byte) TYPEID_BYTE -- _deref_pbuc1=vbuc2 + sta SCREEN+$29 + //SEG29 [23] *((const byte*) main::SCREEN#0+(byte) $2a) ← (const byte) TYPEID_SIGNED_BYTE -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_BYTE + sta SCREEN+$2a + //SEG30 [24] *((const byte*) main::SCREEN#0+(byte) $2b) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2b + //SEG31 [25] *((const byte*) main::SCREEN#0+(byte) $2c) ← (const byte) TYPEID_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_WORD + sta SCREEN+$2c + //SEG32 [26] *((const byte*) main::SCREEN#0+(byte) $2d) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$2d + //SEG33 [27] *((const byte*) main::SCREEN#0+(byte) $2e) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + sta SCREEN+$2e + //SEG34 [28] *((const byte*) main::SCREEN#0+(byte) $2f) ← (const byte) TYPEID_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_WORD + sta SCREEN+$2f + //SEG35 [29] *((const byte*) main::SCREEN#0+(byte) $30) ← (const byte) TYPEID_SIGNED_WORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_WORD + sta SCREEN+$30 + //SEG36 [30] *((const byte*) main::SCREEN#0+(byte) $31) ← (const byte) TYPEID_SIGNED_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$31 + //SEG37 [31] *((const byte*) main::SCREEN#0+(byte) $32) ← (const byte) TYPEID_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_DWORD + sta SCREEN+$32 + //SEG38 [32] *((const byte*) main::SCREEN#0+(byte) $33) ← (const byte) TYPEID_SIGNED_DWORD -- _deref_pbuc1=vbuc2 + lda #TYPEID_SIGNED_DWORD + sta SCREEN+$33 + //SEG39 main::@return + //SEG40 [33] return rts } -//SEG29 File Data +//SEG41 File Data