From 97bc9870f9849d1059eaa8d3e259aa51b6fcf366 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 25 Feb 2018 00:39:19 +0100 Subject: [PATCH] Syntax changes --- .../dk/camelot64/kickc/test/kc/division.kc | 16 +- .../dk/camelot64/kickc/test/kc/sinusgen.kc | 2 +- .../dk/camelot64/kickc/test/ref/linegen.cfg | 8 +- .../dk/camelot64/kickc/test/ref/linegen.log | 409 +++--- .../dk/camelot64/kickc/test/ref/linegen.sym | 2 +- .../dk/camelot64/kickc/test/ref/sinusgen.log | 60 +- .../kickc/test/ref/test-division.asm | 6 +- .../kickc/test/ref/test-division.cfg | 56 +- .../kickc/test/ref/test-division.log | 1149 +++++++++-------- .../kickc/test/ref/test-division.sym | 20 +- 10 files changed, 919 insertions(+), 809 deletions(-) diff --git a/src/test/java/dk/camelot64/kickc/test/kc/division.kc b/src/test/java/dk/camelot64/kickc/test/kc/division.kc index 40f35fde5..056e1e178 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/division.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/division.kc @@ -38,14 +38,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) { // Remainder after unsigned 16-bit division word rem16u = 0; -// Performs division on two 16 bit unsigned words -// Returns the quotient dividend/divisor. -// The remainder will be set into the global variable rem16u -// Implemented using simple binary division -word div16u(word dividend, word divisor) { - return divr16u(dividend, divisor, 0); -} - // Performs division on two 16 bit unsigned words and an initial remainder // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u @@ -68,6 +60,14 @@ word divr16u(word dividend, word divisor, word rem) { return quotient; } +// Performs division on two 16 bit unsigned words +// Returns the quotient dividend/divisor. +// The remainder will be set into the global variable rem16u +// Implemented using simple binary division +word div16u(word dividend, word divisor) { + return divr16u(dividend, divisor, 0); +} + // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division dword div32u16u(dword dividend, word divisor) { diff --git a/src/test/java/dk/camelot64/kickc/test/kc/sinusgen.kc b/src/test/java/dk/camelot64/kickc/test/kc/sinusgen.kc index 7baced71e..21bab6dd1 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/sinusgen.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/sinusgen.kc @@ -74,7 +74,7 @@ signed word sin16s(dword x) { word x4 = mul_u16_sel(x3, x1, 0); // u[3.13] x^4 word x5 = mul_u16_sel(x4, x1, 0); // u[4.12] x^5 word x5_128 = x5>>4; // // u[1.15] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3); - usinx = usinx + x5_128; // u[1.15] (always an initial zero) + usinx = usinx + x5_128; // u[1.15] (first bit is always zero) signed word sinx = (signed word)usinx; // s[0.15] if(isUpper!=0) { sinx = -(signed word)usinx; // s[0.15]; diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg b/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg index 073998669..88fc38fb2 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.cfg @@ -1,13 +1,13 @@ @begin: scope:[] from [0] phi() [ ] ( ) - to:@18 -@18: scope:[] from @begin + to:@19 +@19: scope:[] from @begin [1] phi() [ ] ( ) [2] call main param-assignment [ ] ( ) to:@end -@end: scope:[] from @18 +@end: scope:[] from @19 [3] phi() [ ] ( ) -main: scope:[main] from @18 +main: scope:[main] from @19 [4] phi() [ ] ( main:2 [ ] ) [5] call lin16u_gen param-assignment [ divr16u::rem#11 ] ( main:2 [ divr16u::rem#11 ] ) to:main::@3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log index 72825e2b8..dc154875e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log @@ -96,14 +96,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) { // Remainder after unsigned 16-bit division word rem16u = 0; -// Performs division on two 16 bit unsigned words -// Returns the quotient dividend/divisor. -// The remainder will be set into the global variable rem16u -// Implemented using simple binary division -word div16u(word dividend, word divisor) { - return divr16u(dividend, divisor, 0); -} - // Performs division on two 16 bit unsigned words and an initial remainder // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u @@ -126,6 +118,23 @@ word divr16u(word dividend, word divisor, word rem) { return quotient; } +// Performs division on two 16 bit unsigned words +// Returns the quotient dividend/divisor. +// The remainder will be set into the global variable rem16u +// Implemented using simple binary division +word div16u(word dividend, word divisor) { + return divr16u(dividend, divisor, 0); +} + +// Divide unsigned 32-bit dword dividend with a 16-bit word divisor +// The 16-bit word remainder can be found in rem16u after the division +dword div32u16u(dword dividend, word divisor) { + word quotient_hi = divr16u(>dividend, divisor, 0); + word quotient_lo = divr16u( (dword) div32u16u::dividend + (word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div32u16u::quotient_hi ← (word~) div32u16u::$1 + (word~) div32u16u::$2 ← < (dword) div32u16u::dividend + (word~) div32u16u::$3 ← call divr16u (word~) div32u16u::$2 (word) div32u16u::divisor (word) rem16u + (word) div32u16u::quotient_lo ← (word~) div32u16u::$3 + (dword) div32u16u::quotient ← { (word) div32u16u::quotient_hi, (word) div32u16u::quotient_lo } + (dword) div32u16u::return ← (dword) div32u16u::quotient + goto div32u16u::@return +div32u16u::@return: + (dword) div32u16u::return ← (dword) div32u16u::return + return (dword) div32u16u::return +endproc // div32u16u() (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 proc (signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor) (byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -707,6 +730,18 @@ SYMBOLS (word) div16u::dividend (word) div16u::divisor (word) div16u::return +(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) +(word~) div32u16u::$0 +(word~) div32u16u::$1 +(word~) div32u16u::$2 +(word~) div32u16u::$3 +(label) div32u16u::@return +(dword) div32u16u::dividend +(word) div32u16u::divisor +(dword) div32u16u::quotient +(word) div32u16u::quotient_hi +(word) div32u16u::quotient_lo +(dword) div32u16u::return (signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor) (boolean~) div8s::$0 (boolean~) div8s::$1 @@ -995,18 +1030,6 @@ divr8u::@7: scope:[divr8u] from @2: scope:[] from @1 (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@3 -div16u: scope:[div16u] from - (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) div16u::return ← (word~) div16u::$0 - to:div16u::@return -div16u::@return: scope:[div16u] from div16u div16u::@1 - (word) div16u::return ← (word) div16u::return - return (word) div16u::return - to:@return -div16u::@1: scope:[div16u] from - to:div16u::@return -@3: scope:[] from @2 - to:@4 divr16u: scope:[divr16u] from (word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1053,9 +1076,39 @@ divr16u::@return: scope:[divr16u] from divr16u::@6 divr16u::@7 to:@return divr16u::@7: scope:[divr16u] from to:divr16u::@return +@3: scope:[] from @2 + to:@4 +div16u: scope:[div16u] from + (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div16u::return ← (word~) div16u::$0 + to:div16u::@return +div16u::@return: scope:[div16u] from div16u div16u::@1 + (word) div16u::return ← (word) div16u::return + return (word) div16u::return + to:@return +div16u::@1: scope:[div16u] from + to:div16u::@return @4: scope:[] from @3 - (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@5 +div32u16u: scope:[div32u16u] from + (word~) div32u16u::$0 ← > (dword) div32u16u::dividend + (word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div32u16u::quotient_hi ← (word~) div32u16u::$1 + (word~) div32u16u::$2 ← < (dword) div32u16u::dividend + (word~) div32u16u::$3 ← call divr16u (word~) div32u16u::$2 (word) div32u16u::divisor (word) rem16u + (word) div32u16u::quotient_lo ← (word~) div32u16u::$3 + (dword) div32u16u::quotient ← { (word) div32u16u::quotient_hi, (word) div32u16u::quotient_lo } + (dword) div32u16u::return ← (dword) div32u16u::quotient + to:div32u16u::@return +div32u16u::@return: scope:[div32u16u] from div32u16u div32u16u::@1 + (dword) div32u16u::return ← (dword) div32u16u::return + return (dword) div32u16u::return + to:@return +div32u16u::@1: scope:[div32u16u] from + to:div32u16u::@return +@5: scope:[] from @4 + (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@6 div8s: scope:[div8s] from (byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) div8s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1127,9 +1180,9 @@ div8s::@13: scope:[div8s] from to:div8s::@5 div8s::@14: scope:[div8s] from to:div8s::@6 -@5: scope:[] from @4 +@6: scope:[] from @5 (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@6 + to:@7 div16s: scope:[div16s] from (byte) div16s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) div16s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1201,11 +1254,11 @@ div16s::@13: scope:[div16s] from to:div16s::@5 div16s::@14: scope:[div16s] from to:div16s::@6 -@6: scope:[] from @5 +@7: scope:[] from @6 (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) line_cursor ← (byte*) SCREEN (byte*) char_cursor ← (byte*) line_cursor - to:@7 + to:@8 print_str: scope:[print_str] from to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@2 @@ -1228,8 +1281,8 @@ print_str::@6: scope:[print_str] from print_str::@return: scope:[print_str] from print_str::@3 return to:@return -@7: scope:[] from @6 - to:@8 +@8: scope:[] from @7 + to:@9 print_ln: scope:[print_ln] from to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 @@ -1244,8 +1297,8 @@ print_ln::@2: scope:[print_ln] from print_ln::@1 print_ln::@return: scope:[print_ln] from print_ln::@2 return to:@return -@8: scope:[] from @7 - to:@9 +@9: scope:[] from @8 + to:@10 print_sword: scope:[print_sword] from (boolean~) print_sword::$0 ← (signed word) print_sword::w < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) print_sword::$1 ← ! (boolean~) print_sword::$0 @@ -1263,8 +1316,8 @@ print_sword::@2: scope:[print_sword] from print_sword print_sword::@return: scope:[print_sword] from print_sword::@1 return to:@return -@9: scope:[] from @8 - to:@10 +@10: scope:[] from @9 + to:@11 print_sbyte: scope:[print_sbyte] from (boolean~) print_sbyte::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) print_sbyte::$1 ← ! (boolean~) print_sbyte::$0 @@ -1282,8 +1335,8 @@ print_sbyte::@2: scope:[print_sbyte] from print_sbyte print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@1 return to:@return -@10: scope:[] from @9 - to:@11 +@11: scope:[] from @10 + to:@12 print_word: scope:[print_word] from (byte~) print_word::$0 ← > (word) print_word::w (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 @@ -1293,8 +1346,8 @@ print_word: scope:[print_word] from print_word::@return: scope:[print_word] from print_word return to:@return -@11: scope:[] from @10 - to:@12 +@12: scope:[] from @11 + to:@13 print_dword: scope:[print_dword] from (word~) print_dword::$0 ← > (dword) print_dword::dw (void~) print_dword::$1 ← call print_word (word~) print_dword::$0 @@ -1304,8 +1357,8 @@ print_dword: scope:[print_dword] from print_dword::@return: scope:[print_dword] from print_dword return to:@return -@12: scope:[] from @11 - to:@13 +@13: scope:[] from @12 + to:@14 print_sdword: scope:[print_sdword] from (boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0 (boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0 @@ -1323,8 +1376,8 @@ print_sdword::@2: scope:[print_sdword] from print_sdword print_sdword::@return: scope:[print_sdword] from print_sdword::@1 return to:@return -@13: scope:[] from @12 - to:@14 +@14: scope:[] from @13 + to:@15 print_byte: scope:[print_byte] from (byte[]) print_byte::hextab ← (string) "0123456789abcdef" (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4 @@ -1335,8 +1388,8 @@ print_byte: scope:[print_byte] from print_byte::@return: scope:[print_byte] from print_byte return to:@return -@14: scope:[] from @13 - to:@15 +@15: scope:[] from @14 + to:@16 print_char: scope:[print_char] from *((byte*) char_cursor) ← (byte) print_char::ch (byte*) char_cursor ← ++ (byte*) char_cursor @@ -1344,8 +1397,8 @@ print_char: scope:[print_char] from print_char::@return: scope:[print_char] from print_char return to:@return -@15: scope:[] from @14 - to:@16 +@16: scope:[] from @15 + to:@17 print_cls: scope:[print_cls] from (byte*) print_cls::sc ← (byte*) SCREEN to:print_cls::@1 @@ -1363,8 +1416,8 @@ print_cls::@2: scope:[print_cls] from print_cls::@1 print_cls::@return: scope:[print_cls] from print_cls::@2 return to:@return -@16: scope:[] from @15 - to:@17 +@17: scope:[] from @16 + to:@18 main: scope:[main] from (word[20]) main::lintab1 ← { fill( 20, 0) } (void~) main::$0 ← call lin16u_gen (word/signed word/dword/signed dword) 557 (word/signed word/dword/signed dword) 29793 (word[20]) main::lintab1 (byte/signed byte/word/signed word/dword/signed dword) 20 @@ -1409,8 +1462,8 @@ main::@2: scope:[main] from main::@1 main::@return: scope:[main] from main::@2 return to:@return -@17: scope:[] from @16 - to:@18 +@18: scope:[] from @17 + to:@19 lin16u_gen: scope:[lin16u_gen] from (word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min (word) lin16u_gen::ampl ← (word~) lin16u_gen::$0 @@ -1440,11 +1493,12 @@ lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1 lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@2 return to:@return -@18: scope:[] from @17 +@19: scope:[] from @18 call main to:@end -@end: scope:[] from @18 +@end: scope:[] from @19 +Removing unused procedure div32u16u Removing unused procedure div8s Removing unused procedure div16s Removing unused procedure print_sword @@ -1498,15 +1552,15 @@ Creating constant string variable for inline (const string) main::str6 " @" Creating constant string variable for inline (const string) main::str7 " @" Creating constant string variable for inline (const string) main::str8 " @" Removing empty block @1 -Removing empty block @3 Removing empty block divr16u::@7 +Removing empty block @3 Removing empty block @4 Removing empty block @5 +Removing empty block @6 Removing empty block print_str::@4 Removing empty block print_str::@3 Removing empty block print_str::@5 Removing empty block print_str::@6 -Removing empty block @7 Removing empty block @8 Removing empty block @9 Removing empty block @10 @@ -1517,6 +1571,7 @@ Removing empty block @14 Removing empty block @15 Removing empty block @16 Removing empty block @17 +Removing empty block @18 Removing empty block lin16u_gen::@2 PROCEDURE MODIFY VARIABLE ANALYSIS divr16u modifies rem16u @@ -1565,7 +1620,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN to:@2 @2: scope:[] from @begin (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@6 + to:@7 divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 (word) divr16u::divisor#6 ← phi( lin16u_gen/(word) divr16u::divisor#0 lin16u_gen::@3/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( lin16u_gen/(word) divr16u::dividend#1 lin16u_gen::@3/(word) divr16u::dividend#2 ) @@ -1643,12 +1698,12 @@ divr16u::@return: scope:[divr16u] from divr16u::@6 (word) rem16u#2 ← (word) rem16u#11 return to:@return -@6: scope:[] from @2 +@7: scope:[] from @2 (word) rem16u#26 ← phi( @2/(word) rem16u#0 ) (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) line_cursor#0 ← (byte*) SCREEN#0 (byte*) char_cursor#0 ← (byte*) line_cursor#0 - to:@18 + to:@19 print_str: scope:[print_str] from main::@10 main::@14 main::@16 main::@18 main::@2 main::@23 main::@25 main::@6 main::@8 (byte*) char_cursor#86 ← phi( main::@10/(byte*) char_cursor#19 main::@14/(byte*) char_cursor#23 main::@16/(byte*) char_cursor#25 main::@18/(byte*) char_cursor#27 main::@2/(byte*) char_cursor#84 main::@23/(byte*) char_cursor#32 main::@25/(byte*) char_cursor#34 main::@6/(byte*) char_cursor#15 main::@8/(byte*) char_cursor#17 ) (byte*) print_str::str#12 ← phi( main::@10/(byte*) print_str::str#3 main::@14/(byte*) print_str::str#4 main::@16/(byte*) print_str::str#5 main::@18/(byte*) print_str::str#6 main::@2/(byte*) print_str::str#7 main::@23/(byte*) print_str::str#8 main::@25/(byte*) print_str::str#9 main::@6/(byte*) print_str::str#1 main::@8/(byte*) print_str::str#2 ) @@ -1776,10 +1831,10 @@ print_cls::@return: scope:[print_cls] from print_cls::@2 (byte*) char_cursor#14 ← (byte*) char_cursor#52 return to:@return -main: scope:[main] from @18 - (byte*) char_cursor#89 ← phi( @18/(byte*) char_cursor#85 ) - (byte*) line_cursor#35 ← phi( @18/(byte*) line_cursor#26 ) - (word) rem16u#20 ← phi( @18/(word) rem16u#24 ) +main: scope:[main] from @19 + (byte*) char_cursor#89 ← phi( @19/(byte*) char_cursor#85 ) + (byte*) line_cursor#35 ← phi( @19/(byte*) line_cursor#26 ) + (word) rem16u#20 ← phi( @19/(word) rem16u#24 ) (word[20]) main::lintab1#0 ← { fill( 20, 0) } (word) lin16u_gen::min#0 ← (word/signed word/dword/signed dword) 557 (word) lin16u_gen::max#0 ← (word/signed word/dword/signed dword) 29793 @@ -2102,27 +2157,27 @@ lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 (word) rem16u#9 ← (word) rem16u#18 return to:@return -@18: scope:[] from @6 - (byte*) char_cursor#85 ← phi( @6/(byte*) char_cursor#0 ) - (byte*) line_cursor#26 ← phi( @6/(byte*) line_cursor#0 ) - (word) rem16u#24 ← phi( @6/(word) rem16u#26 ) +@19: scope:[] from @7 + (byte*) char_cursor#85 ← phi( @7/(byte*) char_cursor#0 ) + (byte*) line_cursor#26 ← phi( @7/(byte*) line_cursor#0 ) + (word) rem16u#24 ← phi( @7/(word) rem16u#26 ) call main param-assignment - to:@19 -@19: scope:[] from @18 - (byte*) char_cursor#77 ← phi( @18/(byte*) char_cursor#38 ) - (byte*) line_cursor#20 ← phi( @18/(byte*) line_cursor#9 ) - (word) rem16u#19 ← phi( @18/(word) rem16u#6 ) + to:@20 +@20: scope:[] from @19 + (byte*) char_cursor#77 ← phi( @19/(byte*) char_cursor#38 ) + (byte*) line_cursor#20 ← phi( @19/(byte*) line_cursor#9 ) + (word) rem16u#19 ← phi( @19/(word) rem16u#6 ) (word) rem16u#10 ← (word) rem16u#19 (byte*) line_cursor#10 ← (byte*) line_cursor#20 (byte*) char_cursor#39 ← (byte*) char_cursor#77 to:@end -@end: scope:[] from @19 +@end: scope:[] from @20 SYMBOL TABLE SSA -(label) @18 (label) @19 (label) @2 -(label) @6 +(label) @20 +(label) @7 (label) @begin (label) @end (byte*) SCREEN @@ -3038,14 +3093,14 @@ Fixing inline constructor with lin16u_gen::$9 ← lin16u_gen::stepi#0 dw= lin16u Fixing inline constructor with lin16u_gen::$10 ← lin16u_gen::min#3 dw= 0 Succesful SSA optimization Pass2FixInlineConstructors Culled Empty Block (label) @2 -Culled Empty Block (label) @6 +Culled Empty Block (label) @7 Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@28 -Culled Empty Block (label) @19 +Culled Empty Block (label) @20 Succesful SSA optimization Pass2CullEmptyBlocks Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#6 divr16u::divisor#0 @@ -3283,7 +3338,7 @@ Constant inlined print_str::str#6 = (const string) main::str5 Constant inlined lin16u_gen::lintab#0 = (const word[20]) main::lintab1#0 Constant inlined print_str::str#5 = (const string) main::str4 Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @18 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return +Block Sequence Planned @begin @19 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return Added new block during phi lifting main::@29(between main::@21 and main::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) @@ -3291,9 +3346,9 @@ Added new block during phi lifting lin16u_gen::@5(between lin16u_gen::@1 and lin Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1) Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) -Block Sequence Planned @begin @18 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return main::@29 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return lin16u_gen::@5 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 +Block Sequence Planned @begin @19 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return main::@29 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return lin16u_gen::@5 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 Adding NOP phi() at start of @begin -Adding NOP phi() at start of @18 +Adding NOP phi() at start of @19 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@5 @@ -3398,9 +3453,9 @@ Culled Empty Block (label) divr16u::@6 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 -Block Sequence Planned @begin @18 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return +Block Sequence Planned @begin @19 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return Adding NOP phi() at start of @begin -Adding NOP phi() at start of @18 +Adding NOP phi() at start of @19 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@3 @@ -3444,14 +3499,14 @@ Propagating live ranges... FINAL CONTROL FLOW GRAPH @begin: scope:[] from [0] phi() [ ] ( ) - to:@18 -@18: scope:[] from @begin + to:@19 +@19: scope:[] from @begin [1] phi() [ ] ( ) [2] call main param-assignment [ ] ( ) to:@end -@end: scope:[] from @18 +@end: scope:[] from @19 [3] phi() [ ] ( ) -main: scope:[main] from @18 +main: scope:[main] from @19 [4] phi() [ ] ( main:2 [ ] ) [5] call lin16u_gen param-assignment [ divr16u::rem#11 ] ( main:2 [ divr16u::rem#11 ] ) to:main::@3 @@ -3718,66 +3773,66 @@ divr16u::@return: scope:[divr16u] from divr16u::@3 DOMINATORS @begin dominated by @begin -@18 dominated by @begin @18 -@end dominated by @end @begin @18 -main dominated by main @begin @18 -main::@3 dominated by main main::@3 @begin @18 -main::@4 dominated by main main::@3 main::@4 @begin @18 -main::@5 dominated by main main::@5 main::@3 main::@4 @begin @18 -main::@6 dominated by main main::@5 main::@6 main::@3 main::@4 @begin @18 -main::@7 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin @18 -main::@8 dominated by main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @18 -main::@9 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @18 -main::@10 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@10 @18 -main::@11 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 -main::@12 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12 -main::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12 -main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12 main::@14 -main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12 main::@15 main::@14 -main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@16 main::@12 main::@15 main::@14 -main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@17 main::@16 main::@12 main::@15 main::@14 -main::@18 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@17 main::@16 main::@18 main::@12 main::@15 main::@14 -main::@19 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@20 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@21 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@2 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@22 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@23 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@23 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@24 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@25 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@26 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@27 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@return main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 -print_ln dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @18 main::@12 -print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @18 main::@12 -print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @18 main::@12 -print_word dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin @18 -print_word::@1 dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@1 @18 -print_word::@return dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@return print_word::@1 @18 -print_byte dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte @18 -print_byte::@1 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@1 print_byte @18 -print_byte::@return dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@return print_byte::@1 print_byte @18 -print_char dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 @begin print_byte @18 -print_char::@return dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 print_char::@return @begin print_byte @18 -print_str dominated by main main::@5 main::@6 main::@3 main::@4 @begin @18 print_str -print_str::@1 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 @18 print_str -print_str::@return dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@return print_str::@1 @18 print_str -print_str::@2 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 print_str::@2 @18 print_str -print_cls dominated by main main::@5 main::@3 main::@4 @begin @18 print_cls -print_cls::@1 dominated by main main::@5 main::@3 main::@4 @begin @18 print_cls::@1 print_cls -print_cls::@return dominated by main main::@5 main::@3 main::@4 @begin print_cls::@return @18 print_cls::@1 print_cls -lin16u_gen dominated by main @begin @18 lin16u_gen -lin16u_gen::@3 dominated by main @begin lin16u_gen::@3 @18 lin16u_gen -lin16u_gen::@4 dominated by main @begin lin16u_gen::@3 lin16u_gen::@4 @18 lin16u_gen -lin16u_gen::@1 dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @18 lin16u_gen -lin16u_gen::@return dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @18 lin16u_gen::@return lin16u_gen -divr16u dominated by divr16u main @begin @18 lin16u_gen -divr16u::@1 dominated by divr16u divr16u::@1 main @begin @18 lin16u_gen -divr16u::@4 dominated by divr16u divr16u::@1 main divr16u::@4 @begin @18 lin16u_gen -divr16u::@2 dominated by divr16u divr16u::@2 divr16u::@1 main @begin @18 lin16u_gen -divr16u::@5 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@5 @begin @18 lin16u_gen -divr16u::@3 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @18 lin16u_gen -divr16u::@return dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @18 lin16u_gen divr16u::@return +@19 dominated by @begin @19 +@end dominated by @end @begin @19 +main dominated by main @begin @19 +main::@3 dominated by main main::@3 @begin @19 +main::@4 dominated by main main::@3 main::@4 @begin @19 +main::@5 dominated by main main::@5 main::@3 main::@4 @begin @19 +main::@6 dominated by main main::@5 main::@6 main::@3 main::@4 @begin @19 +main::@7 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin @19 +main::@8 dominated by main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @19 +main::@9 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @19 +main::@10 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@10 @19 +main::@11 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 +main::@12 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12 +main::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12 +main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12 main::@14 +main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12 main::@15 main::@14 +main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@16 main::@12 main::@15 main::@14 +main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@17 main::@16 main::@12 main::@15 main::@14 +main::@18 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@17 main::@16 main::@18 main::@12 main::@15 main::@14 +main::@19 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@20 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@21 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@2 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@22 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@23 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@23 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@24 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@25 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@26 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@27 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@return main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14 +print_ln dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @19 main::@12 +print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @19 main::@12 +print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @19 main::@12 +print_word dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin @19 +print_word::@1 dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@1 @19 +print_word::@return dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@return print_word::@1 @19 +print_byte dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte @19 +print_byte::@1 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@1 print_byte @19 +print_byte::@return dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@return print_byte::@1 print_byte @19 +print_char dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 @begin print_byte @19 +print_char::@return dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 print_char::@return @begin print_byte @19 +print_str dominated by main main::@5 main::@6 main::@3 main::@4 @begin @19 print_str +print_str::@1 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 @19 print_str +print_str::@return dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@return print_str::@1 @19 print_str +print_str::@2 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 print_str::@2 @19 print_str +print_cls dominated by main main::@5 main::@3 main::@4 @begin @19 print_cls +print_cls::@1 dominated by main main::@5 main::@3 main::@4 @begin @19 print_cls::@1 print_cls +print_cls::@return dominated by main main::@5 main::@3 main::@4 @begin print_cls::@return @19 print_cls::@1 print_cls +lin16u_gen dominated by main @begin @19 lin16u_gen +lin16u_gen::@3 dominated by main @begin lin16u_gen::@3 @19 lin16u_gen +lin16u_gen::@4 dominated by main @begin lin16u_gen::@3 lin16u_gen::@4 @19 lin16u_gen +lin16u_gen::@1 dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @19 lin16u_gen +lin16u_gen::@return dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @19 lin16u_gen::@return lin16u_gen +divr16u dominated by divr16u main @begin @19 lin16u_gen +divr16u::@1 dominated by divr16u divr16u::@1 main @begin @19 lin16u_gen +divr16u::@4 dominated by divr16u divr16u::@1 main divr16u::@4 @begin @19 lin16u_gen +divr16u::@2 dominated by divr16u divr16u::@2 divr16u::@1 main @begin @19 lin16u_gen +divr16u::@5 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@5 @begin @19 lin16u_gen +divr16u::@3 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @19 lin16u_gen +divr16u::@return dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @19 lin16u_gen divr16u::@return NATURAL LOOPS Found back edge: Loop head: main::@1 tails: main::@21 blocks: null @@ -4043,17 +4098,17 @@ INITIAL ASM .label rem16u = $1f //SEG2 @begin bbegin: -//SEG3 [1] phi from @begin to @18 [phi:@begin->@18] -b18_from_bbegin: - jmp b18 -//SEG4 @18 -b18: +//SEG3 [1] phi from @begin to @19 [phi:@begin->@19] +b19_from_bbegin: + jmp b19 +//SEG4 @19 +b19: //SEG5 [2] call main param-assignment [ ] ( ) -//SEG6 [4] phi from @18 to main [phi:@18->main] -main_from_b18: +//SEG6 [4] phi from @19 to main [phi:@19->main] +main_from_b19: jsr main -//SEG7 [3] phi from @18 to @end [phi:@18->@end] -bend_from_b18: +//SEG7 [3] phi from @19 to @end [phi:@19->@end] +bend_from_b19: jmp bend //SEG8 @end bend: @@ -5184,17 +5239,17 @@ ASSEMBLER BEFORE OPTIMIZATION .label rem16u = 3 //SEG2 @begin bbegin: -//SEG3 [1] phi from @begin to @18 [phi:@begin->@18] -b18_from_bbegin: - jmp b18 -//SEG4 @18 -b18: +//SEG3 [1] phi from @begin to @19 [phi:@begin->@19] +b19_from_bbegin: + jmp b19 +//SEG4 @19 +b19: //SEG5 [2] call main param-assignment [ ] ( ) -//SEG6 [4] phi from @18 to main [phi:@18->main] -main_from_b18: +//SEG6 [4] phi from @19 to main [phi:@19->main] +main_from_b19: jsr main -//SEG7 [3] phi from @18 to @end [phi:@18->@end] -bend_from_b18: +//SEG7 [3] phi from @19 to @end [phi:@19->@end] +bend_from_b19: jmp bend //SEG8 @end bend: @@ -6129,7 +6184,7 @@ divr16u: { } ASSEMBLER OPTIMIZATIONS -Removing instruction jmp b18 +Removing instruction jmp b19 Removing instruction jmp bend Removing instruction jmp b3 Removing instruction jmp b4 @@ -6205,9 +6260,9 @@ Replacing label b3_from_b2 with b3 Replacing label b3_from_b2 with b3 Replacing label b1_from_b3 with b1 Removing instruction bbegin: -Removing instruction b18_from_bbegin: -Removing instruction main_from_b18: -Removing instruction bend_from_b18: +Removing instruction b19_from_bbegin: +Removing instruction main_from_b19: +Removing instruction bend_from_b19: Removing instruction b3_from_main: Removing instruction lin16u_gen_from_b3: Removing instruction b4_from_b3: @@ -6261,7 +6316,7 @@ Removing instruction b2_from_b4: Removing instruction b3_from_b2: Removing instruction b3_from_b5: Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction b18: +Removing instruction b19: Removing instruction bend: Removing instruction lin16u_gen_from_main: Removing instruction b3: @@ -6327,7 +6382,7 @@ Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination FINAL SYMBOL TABLE -(label) @18 +(label) @19 (label) @begin (label) @end (byte*) SCREEN @@ -6539,12 +6594,12 @@ Score: 13624 .label line_cursor = 3 .label rem16u = 3 //SEG2 @begin -//SEG3 [1] phi from @begin to @18 [phi:@begin->@18] -//SEG4 @18 +//SEG3 [1] phi from @begin to @19 [phi:@begin->@19] +//SEG4 @19 //SEG5 [2] call main param-assignment [ ] ( ) -//SEG6 [4] phi from @18 to main [phi:@18->main] +//SEG6 [4] phi from @19 to main [phi:@19->main] jsr main -//SEG7 [3] phi from @18 to @end [phi:@18->@end] +//SEG7 [3] phi from @19 to @end [phi:@19->@end] //SEG8 @end //SEG9 main main: { diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym b/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym index 528f5c5d9..a3e9817eb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.sym @@ -1,4 +1,4 @@ -(label) @18 +(label) @19 (label) @begin (label) @end (byte*) SCREEN diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.log index 78f304ae5..6a1c78394 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.log @@ -75,7 +75,7 @@ signed word sin16s(dword x) { word x4 = mul_u16_sel(x3, x1, 0); // u[3.13] x^4 word x5 = mul_u16_sel(x4, x1, 0); // u[4.12] x^5 word x5_128 = x5>>4; // // u[1.15] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3); - usinx = usinx + x5_128; // u[1.15] (always an initial zero) + usinx = usinx + x5_128; // u[1.15] (first bit is always zero) signed word sinx = (signed word)usinx; // s[0.15] if(isUpper!=0) { sinx = -(signed word)usinx; // s[0.15]; @@ -172,14 +172,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) { // Remainder after unsigned 16-bit division word rem16u = 0; -// Performs division on two 16 bit unsigned words -// Returns the quotient dividend/divisor. -// The remainder will be set into the global variable rem16u -// Implemented using simple binary division -word div16u(word dividend, word divisor) { - return divr16u(dividend, divisor, 0); -} - // Performs division on two 16 bit unsigned words and an initial remainder // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u @@ -202,6 +194,14 @@ word divr16u(word dividend, word divisor, word rem) { return quotient; } +// Performs division on two 16 bit unsigned words +// Returns the quotient dividend/divisor. +// The remainder will be set into the global variable rem16u +// Implemented using simple binary division +word div16u(word dividend, word divisor) { + return divr16u(dividend, divisor, 0); +} + // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division dword div32u16u(dword dividend, word divisor) { @@ -479,14 +479,6 @@ divr8u::@return: return (byte) divr8u::return endproc // divr8u() (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 -proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor) - (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) div16u::return ← (word~) div16u::$0 - goto div16u::@return -div16u::@return: - (word) div16u::return ← (word) div16u::return - return (word) div16u::return -endproc // div16u() proc (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -522,6 +514,14 @@ divr16u::@return: (word) divr16u::return ← (word) divr16u::return return (word) divr16u::return endproc // divr16u() +proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor) + (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div16u::return ← (word~) div16u::$0 + goto div16u::@return +div16u::@return: + (word) div16u::return ← (word) div16u::return + return (word) div16u::return +endproc // div16u() proc (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (word~) div32u16u::$0 ← > (dword) div32u16u::dividend (word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1550,18 +1550,6 @@ divr8u::@7: scope:[divr8u] from @2: scope:[] from @1 (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@3 -div16u: scope:[div16u] from - (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) div16u::return ← (word~) div16u::$0 - to:div16u::@return -div16u::@return: scope:[div16u] from div16u div16u::@1 - (word) div16u::return ← (word) div16u::return - return (word) div16u::return - to:@return -div16u::@1: scope:[div16u] from - to:div16u::@return -@3: scope:[] from @2 - to:@4 divr16u: scope:[divr16u] from (word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1608,6 +1596,18 @@ divr16u::@return: scope:[divr16u] from divr16u::@6 divr16u::@7 to:@return divr16u::@7: scope:[divr16u] from to:divr16u::@return +@3: scope:[] from @2 + to:@4 +div16u: scope:[div16u] from + (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div16u::return ← (word~) div16u::$0 + to:div16u::@return +div16u::@return: scope:[div16u] from div16u div16u::@1 + (word) div16u::return ← (word) div16u::return + return (word) div16u::return + to:@return +div16u::@1: scope:[div16u] from + to:div16u::@return @4: scope:[] from @3 to:@5 div32u16u: scope:[div32u16u] from @@ -2360,8 +2360,8 @@ Creating constant string variable for inline (const string) print_byte::$4 "0123 Creating constant string variable for inline (const string) main::str " @" Creating constant string variable for inline (const string) main::str1 " @" Removing empty block @1 -Removing empty block @3 Removing empty block divr16u::@7 +Removing empty block @3 Removing empty block @4 Removing empty block div32u16u::@1 Removing empty block @5 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-division.asm b/src/test/java/dk/camelot64/kickc/test/ref/test-division.asm index c41b7d9e9..8e88a7088 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-division.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.asm @@ -270,11 +270,11 @@ div16u: { rts } divr16u: { - .label dividend = 3 - .label divisor = $c - .label return = $e .label rem = $10 + .label dividend = 3 .label quotient = $e + .label return = $e + .label divisor = $c ldx #0 txa sta quotient diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-division.cfg b/src/test/java/dk/camelot64/kickc/test/ref/test-division.cfg index f60fa5e91..ca11162ce 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-division.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.cfg @@ -1,13 +1,13 @@ @begin: scope:[] from [0] phi() [ ] ( ) - to:@21 -@21: scope:[] from @begin + to:@22 +@22: scope:[] from @begin [1] phi() [ ] ( ) [2] call main param-assignment [ ] ( ) to:@end -@end: scope:[] from @21 +@end: scope:[] from @22 [3] phi() [ ] ( ) -main: scope:[main] from @21 +main: scope:[main] from @22 [4] phi() [ ] ( main:2 [ ] ) [5] call print_cls param-assignment [ ] ( main:2 [ ] ) to:main::@1 @@ -221,51 +221,51 @@ div16u: scope:[div16u] from div16s::@4 test_16u::@1 [106] (word) rem16u#31 ← phi( div16s::@4/(word) divr16u::rem#10 test_16u::@1/(word) rem16u#35 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] ) [106] (word) div16u::divisor#2 ← phi( div16s::@4/(word) div16u::divisor#0 test_16u::@1/(word) div16u::divisor#1 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] ) [106] (word) div16u::dividend#2 ← phi( div16s::@4/(word) div16u::dividend#0 test_16u::@1/(word) div16u::dividend#1 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] ) - [107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] ) - [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) - [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) - [110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) + [107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] ) + [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) + [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) + [110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] ) to:div16u::@2 div16u::@2: scope:[div16u] from div16u - [111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) + [111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) to:div16u::@return div16u::@return: scope:[div16u] from div16u::@2 [112] return [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) to:@return divr16u: scope:[divr16u] from div16u - [113] phi() [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) + [113] phi() [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [114] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [114] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [114] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#0 divr16u::@3/(word) divr16u::dividend#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [114] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [114] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [114] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [115] (word) divr16u::rem#1 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) - [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) - [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) - [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) + [115] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) + [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) + [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) + [119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [120] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#1 divr16u::@4/(word) divr16u::rem#2 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) - [121] (word) divr16u::dividend#1 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ) - [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) - [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) + [120] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) + [121] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) + [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) + [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ) - [125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) + [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) + [125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [126] (word) divr16u::return#1 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ) - [126] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#3 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ) - [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) - [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) + [126] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) + [126] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) + [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) + [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 - [129] return [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + [129] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) to:@return test_8s: scope:[test_8s] from main::@3 [130] phi() [ line_cursor#1 divr8u::rem#10 ] ( main:2::test_8s:11 [ divr16u::rem#10 line_cursor#1 divr8u::rem#10 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-division.log b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log index 41161cc5e..878ca14f8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-division.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log @@ -216,14 +216,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) { // Remainder after unsigned 16-bit division word rem16u = 0; -// Performs division on two 16 bit unsigned words -// Returns the quotient dividend/divisor. -// The remainder will be set into the global variable rem16u -// Implemented using simple binary division -word div16u(word dividend, word divisor) { - return divr16u(dividend, divisor, 0); -} - // Performs division on two 16 bit unsigned words and an initial remainder // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u @@ -246,6 +238,23 @@ word divr16u(word dividend, word divisor, word rem) { return quotient; } +// Performs division on two 16 bit unsigned words +// Returns the quotient dividend/divisor. +// The remainder will be set into the global variable rem16u +// Implemented using simple binary division +word div16u(word dividend, word divisor) { + return divr16u(dividend, divisor, 0); +} + +// Divide unsigned 32-bit dword dividend with a 16-bit word divisor +// The 16-bit word remainder can be found in rem16u after the division +dword div32u16u(dword dividend, word divisor) { + word quotient_hi = divr16u(>dividend, divisor, 0); + word quotient_lo = divr16u( (dword) div32u16u::dividend + (word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div32u16u::quotient_hi ← (word~) div32u16u::$1 + (word~) div32u16u::$2 ← < (dword) div32u16u::dividend + (word~) div32u16u::$3 ← call divr16u (word~) div32u16u::$2 (word) div32u16u::divisor (word) rem16u + (word) div32u16u::quotient_lo ← (word~) div32u16u::$3 + (dword) div32u16u::quotient ← { (word) div32u16u::quotient_hi, (word) div32u16u::quotient_lo } + (dword) div32u16u::return ← (dword) div32u16u::quotient + goto div32u16u::@return +div32u16u::@return: + (dword) div32u16u::return ← (dword) div32u16u::return + return (dword) div32u16u::return +endproc // div32u16u() (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 proc (signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor) (byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -785,6 +808,18 @@ SYMBOLS (word) div16u::dividend (word) div16u::divisor (word) div16u::return +(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) +(word~) div32u16u::$0 +(word~) div32u16u::$1 +(word~) div32u16u::$2 +(word~) div32u16u::$3 +(label) div32u16u::@return +(dword) div32u16u::dividend +(word) div32u16u::divisor +(dword) div32u16u::quotient +(word) div32u16u::quotient_hi +(word) div32u16u::quotient_lo +(dword) div32u16u::return (signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor) (boolean~) div8s::$0 (boolean~) div8s::$1 @@ -1273,18 +1308,6 @@ divr8u::@7: scope:[divr8u] from @12: scope:[] from @11 (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@13 -div16u: scope:[div16u] from - (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) div16u::return ← (word~) div16u::$0 - to:div16u::@return -div16u::@return: scope:[div16u] from div16u div16u::@1 - (word) div16u::return ← (word) div16u::return - return (word) div16u::return - to:@return -div16u::@1: scope:[div16u] from - to:div16u::@return -@13: scope:[] from @12 - to:@14 divr16u: scope:[divr16u] from (word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1331,9 +1354,39 @@ divr16u::@return: scope:[divr16u] from divr16u::@6 divr16u::@7 to:@return divr16u::@7: scope:[divr16u] from to:divr16u::@return +@13: scope:[] from @12 + to:@14 +div16u: scope:[div16u] from + (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div16u::return ← (word~) div16u::$0 + to:div16u::@return +div16u::@return: scope:[div16u] from div16u div16u::@1 + (word) div16u::return ← (word) div16u::return + return (word) div16u::return + to:@return +div16u::@1: scope:[div16u] from + to:div16u::@return @14: scope:[] from @13 - (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@15 +div32u16u: scope:[div32u16u] from + (word~) div32u16u::$0 ← > (dword) div32u16u::dividend + (word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div32u16u::quotient_hi ← (word~) div32u16u::$1 + (word~) div32u16u::$2 ← < (dword) div32u16u::dividend + (word~) div32u16u::$3 ← call divr16u (word~) div32u16u::$2 (word) div32u16u::divisor (word) rem16u + (word) div32u16u::quotient_lo ← (word~) div32u16u::$3 + (dword) div32u16u::quotient ← { (word) div32u16u::quotient_hi, (word) div32u16u::quotient_lo } + (dword) div32u16u::return ← (dword) div32u16u::quotient + to:div32u16u::@return +div32u16u::@return: scope:[div32u16u] from div32u16u div32u16u::@1 + (dword) div32u16u::return ← (dword) div32u16u::return + return (dword) div32u16u::return + to:@return +div32u16u::@1: scope:[div32u16u] from + to:div32u16u::@return +@15: scope:[] from @14 + (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@16 div8s: scope:[div8s] from (byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) div8s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1405,9 +1458,9 @@ div8s::@13: scope:[div8s] from to:div8s::@5 div8s::@14: scope:[div8s] from to:div8s::@6 -@15: scope:[] from @14 +@16: scope:[] from @15 (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@16 + to:@17 div16s: scope:[div16s] from (byte) div16s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) div16s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1479,8 +1532,8 @@ div16s::@13: scope:[div16s] from to:div16s::@5 div16s::@14: scope:[div16s] from to:div16s::@6 -@16: scope:[] from @15 - to:@17 +@17: scope:[] from @16 + to:@18 main: scope:[main] from (void~) main::$0 ← call print_cls (void~) main::$1 ← call test_8u @@ -1491,8 +1544,8 @@ main: scope:[main] from main::@return: scope:[main] from main return to:@return -@17: scope:[] from @16 - to:@18 +@18: scope:[] from @17 + to:@19 test_8u: scope:[test_8u] from (byte[]) test_8u::dividends ← { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 } (byte[]) test_8u::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 } @@ -1521,8 +1574,8 @@ test_8u::@2: scope:[test_8u] from test_8u::@1 test_8u::@return: scope:[test_8u] from test_8u::@2 return to:@return -@18: scope:[] from @17 - to:@19 +@19: scope:[] from @18 + to:@20 test_16u: scope:[test_16u] from (word[]) test_16u::dividends ← { (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535 } (word[]) test_16u::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 } @@ -1551,8 +1604,8 @@ test_16u::@2: scope:[test_16u] from test_16u::@1 test_16u::@return: scope:[test_16u] from test_16u::@2 return to:@return -@19: scope:[] from @18 - to:@20 +@20: scope:[] from @19 + to:@21 test_8s: scope:[test_8s] from (signed byte/signed word/signed dword~) test_8s::$0 ← - (byte/signed byte/word/signed word/dword/signed dword) 127 (signed byte/signed word/signed dword~) test_8s::$1 ← - (byte/signed byte/word/signed word/dword/signed dword) 127 @@ -1584,8 +1637,8 @@ test_8s::@2: scope:[test_8s] from test_8s::@1 test_8s::@return: scope:[test_8s] from test_8s::@2 return to:@return -@20: scope:[] from @19 - to:@21 +@21: scope:[] from @20 + to:@22 test_16s: scope:[test_16s] from (signed word/signed dword~) test_16s::$0 ← - (word/signed word/dword/signed dword) 32767 (signed word/signed dword~) test_16s::$1 ← - (word/signed word/dword/signed dword) 32767 @@ -1620,12 +1673,13 @@ test_16s::@2: scope:[test_16s] from test_16s::@1 test_16s::@return: scope:[test_16s] from test_16s::@2 return to:@return -@21: scope:[] from @20 +@22: scope:[] from @21 call main to:@end -@end: scope:[] from @21 +@end: scope:[] from @22 Removing unused procedure print_sdword +Removing unused procedure div32u16u Removing unused procedure print_dword Eliminating unused variable - keeping the call (void~) print_sword::$5 Eliminating unused variable - keeping the call (void~) print_sword::$2 @@ -1702,9 +1756,10 @@ Removing empty block @9 Removing empty block div8u::@1 Removing empty block @11 Removing empty block divr8u::@7 -Removing empty block div16u::@1 -Removing empty block @13 Removing empty block divr16u::@7 +Removing empty block @13 +Removing empty block div16u::@1 +Removing empty block @14 Removing empty block div8s::@8 Removing empty block div8s::@10 Removing empty block div8s::@12 @@ -1717,14 +1772,14 @@ Removing empty block div16s::@12 Removing empty block div16s::@6 Removing empty block div16s::@13 Removing empty block div16s::@14 -Removing empty block @16 Removing empty block @17 -Removing empty block test_8u::@2 Removing empty block @18 -Removing empty block test_16u::@2 +Removing empty block test_8u::@2 Removing empty block @19 -Removing empty block test_8s::@2 +Removing empty block test_16u::@2 Removing empty block @20 +Removing empty block test_8s::@2 +Removing empty block @21 Removing empty block test_16s::@2 PROCEDURE MODIFY VARIABLE ANALYSIS print_str modifies char_cursor @@ -1739,8 +1794,8 @@ print_cls modifies line_cursor print_cls modifies char_cursor div8u modifies rem8u divr8u modifies rem8u -div16u modifies rem16u divr16u modifies rem16u +div16u modifies rem16u div8s modifies rem8u div8s modifies rem8s div16s modifies rem16u @@ -2093,35 +2148,11 @@ divr8u::@return: scope:[divr8u] from divr8u::@6 (byte*) char_cursor#153 ← phi( @10/(byte*) char_cursor#154 ) (byte*) line_cursor#56 ← phi( @10/(byte*) line_cursor#61 ) (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@14 -div16u: scope:[div16u] from div16s::@4 test_16u::@1 - (word) rem16u#31 ← phi( div16s::@4/(word) rem16u#32 test_16u::@1/(word) rem16u#35 ) - (word) div16u::divisor#2 ← phi( div16s::@4/(word) div16u::divisor#0 test_16u::@1/(word) div16u::divisor#1 ) - (word) div16u::dividend#2 ← phi( div16s::@4/(word) div16u::dividend#0 test_16u::@1/(word) div16u::dividend#1 ) - (word) divr16u::dividend#0 ← (word) div16u::dividend#2 - (word) divr16u::divisor#0 ← (word) div16u::divisor#2 - (word) divr16u::rem#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - call divr16u param-assignment - (word) divr16u::return#0 ← (word) divr16u::return#2 - to:div16u::@2 -div16u::@2: scope:[div16u] from div16u - (word) rem16u#15 ← phi( div16u/(word) rem16u#4 ) - (word) divr16u::return#3 ← phi( div16u/(word) divr16u::return#0 ) - (word~) div16u::$0 ← (word) divr16u::return#3 - (word) rem16u#1 ← (word) rem16u#15 - (word) div16u::return#0 ← (word~) div16u::$0 - to:div16u::@return -div16u::@return: scope:[div16u] from div16u::@2 - (word) rem16u#16 ← phi( div16u::@2/(word) rem16u#1 ) - (word) div16u::return#4 ← phi( div16u::@2/(word) div16u::return#0 ) - (word) div16u::return#1 ← (word) div16u::return#4 - (word) rem16u#2 ← (word) rem16u#16 - return - to:@return + to:@15 divr16u: scope:[divr16u] from div16u (word) divr16u::divisor#5 ← phi( div16u/(word) divr16u::divisor#0 ) - (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#0 ) - (word) divr16u::rem#9 ← phi( div16u/(word) divr16u::rem#0 ) + (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) + (word) divr16u::rem#9 ← phi( div16u/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:divr16u::@1 @@ -2132,7 +2163,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#4 divr16u::@3/(word) divr16u::dividend#5 ) (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#9 divr16u::@3/(word) divr16u::rem#10 ) (word~) divr16u::$0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#1 ← (word~) divr16u::$0 + (word) divr16u::rem#0 ← (word~) divr16u::$0 (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 (boolean~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -2142,11 +2173,11 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 (byte) divr16u::i#3 ← phi( divr16u::@1/(byte) divr16u::i#5 divr16u::@4/(byte) divr16u::i#6 ) (word) divr16u::divisor#1 ← phi( divr16u::@1/(word) divr16u::divisor#3 divr16u::@4/(word) divr16u::divisor#4 ) - (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#1 divr16u::@4/(word) divr16u::rem#2 ) + (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) (word) divr16u::quotient#3 ← phi( divr16u::@1/(word) divr16u::quotient#6 divr16u::@4/(word) divr16u::quotient#7 ) (word) divr16u::dividend#3 ← phi( divr16u::@1/(word) divr16u::dividend#2 divr16u::@4/(word) divr16u::dividend#6 ) (word~) divr16u::$6 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::dividend#1 ← (word~) divr16u::$6 + (word) divr16u::dividend#0 ← (word~) divr16u::$6 (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::quotient#1 ← (word~) divr16u::$7 (boolean~) divr16u::$8 ← (word) divr16u::rem#5 >= (word) divr16u::divisor#1 @@ -2158,50 +2189,74 @@ divr16u::@4: scope:[divr16u] from divr16u::@1 (word) divr16u::divisor#4 ← phi( divr16u::@1/(word) divr16u::divisor#3 ) (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#6 ← phi( divr16u::@1/(word) divr16u::dividend#2 ) - (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#1 ) + (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 ) (word~) divr16u::$5 ← (word) divr16u::rem#6 | (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) divr16u::rem#2 ← (word~) divr16u::$5 + (word) divr16u::rem#1 ← (word~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#6 ← phi( divr16u::@2/(word) divr16u::divisor#1 divr16u::@5/(word) divr16u::divisor#2 ) (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - (word) divr16u::dividend#5 ← phi( divr16u::@2/(word) divr16u::dividend#1 divr16u::@5/(word) divr16u::dividend#7 ) - (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#3 ) + (word) divr16u::dividend#5 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#7 ) + (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 ) (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 (boolean~) divr16u::$11 ← (byte) divr16u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 16 if((boolean~) divr16u::$11) goto divr16u::@1 to:divr16u::@6 divr16u::@5: scope:[divr16u] from divr16u::@2 - (word) divr16u::dividend#7 ← phi( divr16u::@2/(word) divr16u::dividend#1 ) + (word) divr16u::dividend#7 ← phi( divr16u::@2/(word) divr16u::dividend#0 ) (byte) divr16u::i#4 ← phi( divr16u::@2/(byte) divr16u::i#3 ) (word) divr16u::divisor#2 ← phi( divr16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::rem#7 ← phi( divr16u::@2/(word) divr16u::rem#5 ) (word) divr16u::quotient#4 ← phi( divr16u::@2/(word) divr16u::quotient#1 ) (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#4 (word~) divr16u::$10 ← (word) divr16u::rem#7 - (word) divr16u::divisor#2 - (word) divr16u::rem#3 ← (word~) divr16u::$10 + (word) divr16u::rem#2 ← (word~) divr16u::$10 to:divr16u::@3 divr16u::@6: scope:[divr16u] from divr16u::@3 (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 ) (word) divr16u::rem#8 ← phi( divr16u::@3/(word) divr16u::rem#10 ) - (word) rem16u#3 ← (word) divr16u::rem#8 - (word) divr16u::return#1 ← (word) divr16u::quotient#5 + (word) rem16u#1 ← (word) divr16u::rem#8 + (word) divr16u::return#0 ← (word) divr16u::quotient#5 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - (word) rem16u#17 ← phi( divr16u::@6/(word) rem16u#3 ) - (word) divr16u::return#4 ← phi( divr16u::@6/(word) divr16u::return#1 ) - (word) divr16u::return#2 ← (word) divr16u::return#4 + (word) rem16u#15 ← phi( divr16u::@6/(word) rem16u#1 ) + (word) divr16u::return#3 ← phi( divr16u::@6/(word) divr16u::return#0 ) + (word) divr16u::return#1 ← (word) divr16u::return#3 + (word) rem16u#2 ← (word) rem16u#15 + return + to:@return +div16u: scope:[div16u] from div16s::@4 test_16u::@1 + (word) rem16u#31 ← phi( div16s::@4/(word) rem16u#32 test_16u::@1/(word) rem16u#35 ) + (word) div16u::divisor#2 ← phi( div16s::@4/(word) div16u::divisor#0 test_16u::@1/(word) div16u::divisor#1 ) + (word) div16u::dividend#2 ← phi( div16s::@4/(word) div16u::dividend#0 test_16u::@1/(word) div16u::dividend#1 ) + (word) divr16u::dividend#1 ← (word) div16u::dividend#2 + (word) divr16u::divisor#0 ← (word) div16u::divisor#2 + (word) divr16u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + call divr16u param-assignment + (word) divr16u::return#2 ← (word) divr16u::return#1 + to:div16u::@2 +div16u::@2: scope:[div16u] from div16u + (word) rem16u#16 ← phi( div16u/(word) rem16u#2 ) + (word) divr16u::return#4 ← phi( div16u/(word) divr16u::return#2 ) + (word~) div16u::$0 ← (word) divr16u::return#4 + (word) rem16u#3 ← (word) rem16u#16 + (word) div16u::return#0 ← (word~) div16u::$0 + to:div16u::@return +div16u::@return: scope:[div16u] from div16u::@2 + (word) rem16u#17 ← phi( div16u::@2/(word) rem16u#3 ) + (word) div16u::return#4 ← phi( div16u::@2/(word) div16u::return#0 ) + (word) div16u::return#1 ← (word) div16u::return#4 (word) rem16u#4 ← (word) rem16u#17 return to:@return -@14: scope:[] from @12 +@15: scope:[] from @12 (word) rem16u#50 ← phi( @12/(word) rem16u#0 ) (byte) rem8u#52 ← phi( @12/(byte) rem8u#55 ) (byte*) char_cursor#148 ← phi( @12/(byte*) char_cursor#153 ) (byte*) line_cursor#51 ← phi( @12/(byte*) line_cursor#56 ) (signed byte) rem8s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@15 + to:@16 div8s: scope:[div8s] from test_8s::@1 (byte) rem8u#60 ← phi( test_8s::@1/(byte) rem8u#39 ) (signed byte) div8s::divisor#6 ← phi( test_8s::@1/(signed byte) div8s::divisor#0 ) @@ -2306,14 +2361,14 @@ div8s::@return: scope:[div8s] from div8s::@11 div8s::@5 (signed byte) rem8s#3 ← (signed byte) rem8s#9 return to:@return -@15: scope:[] from @14 - (signed byte) rem8s#26 ← phi( @14/(signed byte) rem8s#0 ) - (word) rem16u#49 ← phi( @14/(word) rem16u#50 ) - (byte) rem8u#50 ← phi( @14/(byte) rem8u#52 ) - (byte*) char_cursor#147 ← phi( @14/(byte*) char_cursor#148 ) - (byte*) line_cursor#50 ← phi( @14/(byte*) line_cursor#51 ) +@16: scope:[] from @15 + (signed byte) rem8s#26 ← phi( @15/(signed byte) rem8s#0 ) + (word) rem16u#49 ← phi( @15/(word) rem16u#50 ) + (byte) rem8u#50 ← phi( @15/(byte) rem8u#52 ) + (byte*) char_cursor#147 ← phi( @15/(byte*) char_cursor#148 ) + (byte*) line_cursor#50 ← phi( @15/(byte*) line_cursor#51 ) (signed word) rem16s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@21 + to:@22 div16s: scope:[div16s] from test_16s::@1 (word) rem16u#59 ← phi( test_16s::@1/(word) rem16u#38 ) (signed word) div16s::divisor#6 ← phi( test_16s::@1/(signed word) div16s::divisor#0 ) @@ -2382,7 +2437,7 @@ div16s::@4: scope:[div16s] from div16s::@3 div16s::@9 to:div16s::@15 div16s::@15: scope:[div16s] from div16s::@4 (byte) div16s::neg#4 ← phi( div16s::@4/(byte) div16s::neg#6 ) - (word) rem16u#18 ← phi( div16s::@4/(word) rem16u#2 ) + (word) rem16u#18 ← phi( div16s::@4/(word) rem16u#4 ) (word) div16u::return#5 ← phi( div16s::@4/(word) div16u::return#2 ) (word~) div16s::$11 ← (word) div16u::return#5 (word) rem16u#5 ← (word) rem16u#18 @@ -2418,13 +2473,13 @@ div16s::@return: scope:[div16s] from div16s::@11 div16s::@5 (signed word) rem16s#3 ← (signed word) rem16s#9 return to:@return -main: scope:[main] from @21 - (signed word) rem16s#29 ← phi( @21/(signed word) rem16s#20 ) - (signed byte) rem8s#29 ← phi( @21/(signed byte) rem8s#21 ) - (word) rem16u#52 ← phi( @21/(word) rem16u#40 ) - (byte) rem8u#44 ← phi( @21/(byte) rem8u#41 ) - (byte*) char_cursor#134 ← phi( @21/(byte*) char_cursor#139 ) - (byte*) line_cursor#40 ← phi( @21/(byte*) line_cursor#45 ) +main: scope:[main] from @22 + (signed word) rem16s#29 ← phi( @22/(signed word) rem16s#20 ) + (signed byte) rem8s#29 ← phi( @22/(signed byte) rem8s#21 ) + (word) rem16u#52 ← phi( @22/(word) rem16u#40 ) + (byte) rem8u#44 ← phi( @22/(byte) rem8u#41 ) + (byte*) char_cursor#134 ← phi( @22/(byte*) char_cursor#139 ) + (byte*) line_cursor#40 ← phi( @22/(byte*) line_cursor#45 ) call print_cls param-assignment to:main::@1 main::@1: scope:[main] from main @@ -2650,7 +2705,7 @@ test_16u::@3: scope:[test_16u] from test_16u::@1 (word) test_16u::divisor#3 ← phi( test_16u::@1/(word) test_16u::divisor#0 ) (byte*) char_cursor#136 ← phi( test_16u::@1/(byte*) char_cursor#144 ) (word) test_16u::dividend#1 ← phi( test_16u::@1/(word) test_16u::dividend#0 ) - (word) rem16u#25 ← phi( test_16u::@1/(word) rem16u#2 ) + (word) rem16u#25 ← phi( test_16u::@1/(word) rem16u#4 ) (word) div16u::return#6 ← phi( test_16u::@1/(word) div16u::return#3 ) (word~) test_16u::$0 ← (word) div16u::return#6 (word) rem16u#10 ← (word) rem16u#25 @@ -3030,22 +3085,22 @@ test_16s::@return: scope:[test_16s] from test_16s::@11 (byte*) line_cursor#18 ← (byte*) line_cursor#37 return to:@return -@21: scope:[] from @15 - (signed word) rem16s#20 ← phi( @15/(signed word) rem16s#0 ) - (signed byte) rem8s#21 ← phi( @15/(signed byte) rem8s#26 ) - (word) rem16u#40 ← phi( @15/(word) rem16u#49 ) - (byte) rem8u#41 ← phi( @15/(byte) rem8u#50 ) - (byte*) char_cursor#139 ← phi( @15/(byte*) char_cursor#147 ) - (byte*) line_cursor#45 ← phi( @15/(byte*) line_cursor#50 ) +@22: scope:[] from @16 + (signed word) rem16s#20 ← phi( @16/(signed word) rem16s#0 ) + (signed byte) rem8s#21 ← phi( @16/(signed byte) rem8s#26 ) + (word) rem16u#40 ← phi( @16/(word) rem16u#49 ) + (byte) rem8u#41 ← phi( @16/(byte) rem8u#50 ) + (byte*) char_cursor#139 ← phi( @16/(byte*) char_cursor#147 ) + (byte*) line_cursor#45 ← phi( @16/(byte*) line_cursor#50 ) call main param-assignment - to:@22 -@22: scope:[] from @21 - (signed word) rem16s#15 ← phi( @21/(signed word) rem16s#5 ) - (signed byte) rem8s#15 ← phi( @21/(signed byte) rem8s#5 ) - (word) rem16u#30 ← phi( @21/(word) rem16u#9 ) - (byte) rem8u#30 ← phi( @21/(byte) rem8u#9 ) - (byte*) char_cursor#125 ← phi( @21/(byte*) char_cursor#26 ) - (byte*) line_cursor#38 ← phi( @21/(byte*) line_cursor#10 ) + to:@23 +@23: scope:[] from @22 + (signed word) rem16s#15 ← phi( @22/(signed word) rem16s#5 ) + (signed byte) rem8s#15 ← phi( @22/(signed byte) rem8s#5 ) + (word) rem16u#30 ← phi( @22/(word) rem16u#9 ) + (byte) rem8u#30 ← phi( @22/(byte) rem8u#9 ) + (byte*) char_cursor#125 ← phi( @22/(byte*) char_cursor#26 ) + (byte*) line_cursor#38 ← phi( @22/(byte*) line_cursor#10 ) (byte*) line_cursor#19 ← (byte*) line_cursor#38 (byte*) char_cursor#63 ← (byte*) char_cursor#125 (byte) rem8u#14 ← (byte) rem8u#30 @@ -3053,15 +3108,15 @@ test_16s::@return: scope:[test_16s] from test_16s::@11 (signed byte) rem8s#8 ← (signed byte) rem8s#15 (signed word) rem16s#8 ← (signed word) rem16s#15 to:@end -@end: scope:[] from @22 +@end: scope:[] from @23 SYMBOL TABLE SSA (label) @10 (label) @12 -(label) @14 (label) @15 -(label) @21 +(label) @16 (label) @22 +(label) @23 (label) @begin (label) @end (byte*) SCREEN @@ -4229,18 +4284,18 @@ Not aliassing across scopes: divr8u::rem#9 divr8u::rem#0 Not aliassing across scopes: divr8u::dividend#4 divr8u::dividend#0 Not aliassing across scopes: divr8u::divisor#5 divr8u::divisor#0 Not aliassing across scopes: rem8u#3 divr8u::rem#8 +Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 +Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 +Not aliassing across scopes: rem16u#1 divr16u::rem#8 Not aliassing across scopes: div16u::dividend#2 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#2 div16u::divisor#0 Not aliassing across scopes: rem16u#31 rem16u#32 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#2 +Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#2 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#2 -Not aliassing across scopes: divr16u::return#0 divr16u::return#2 -Not aliassing across scopes: rem16u#15 rem16u#4 -Not aliassing across scopes: div16u::$0 divr16u::return#3 -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#0 -Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#0 -Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#3 divr16u::rem#8 +Not aliassing across scopes: divr16u::return#2 divr16u::return#1 +Not aliassing across scopes: rem16u#16 rem16u#2 +Not aliassing across scopes: div16u::$0 divr16u::return#4 Not aliassing across scopes: div8s::dividend#1 div8s::dividend#0 Not aliassing across scopes: div8s::divisor#6 div8s::divisor#0 Not aliassing across scopes: rem8u#60 rem8u#39 @@ -4255,7 +4310,7 @@ Not aliassing across scopes: rem16u#59 rem16u#38 Not aliassing across scopes: div16u::dividend#0 div16s::dividendu#3 Not aliassing across scopes: div16u::divisor#0 div16s::divisoru#3 Not aliassing across scopes: div16u::return#2 div16u::return#1 -Not aliassing across scopes: rem16u#18 rem16u#2 +Not aliassing across scopes: rem16u#18 rem16u#4 Not aliassing across scopes: div16s::$11 div16u::return#5 Not aliassing across scopes: line_cursor#40 line_cursor#45 Not aliassing across scopes: char_cursor#134 char_cursor#139 @@ -4306,7 +4361,7 @@ Not aliassing across scopes: line_cursor#83 line_cursor#6 Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 test_16u::divisor#0 Not aliassing across scopes: div16u::return#3 div16u::return#1 -Not aliassing across scopes: rem16u#25 rem16u#2 +Not aliassing across scopes: rem16u#25 rem16u#4 Not aliassing across scopes: test_16u::$0 div16u::return#6 Not aliassing across scopes: print_word::w#1 test_16u::dividend#1 Not aliassing across scopes: char_cursor#98 char_cursor#13 @@ -4418,24 +4473,24 @@ Alias (byte) divr8u::rem#10 = (byte) divr8u::rem#8 Alias (byte) divr8u::return#1 = (byte) divr8u::quotient#5 (byte) divr8u::quotient#8 (byte) divr8u::return#4 (byte) divr8u::return#2 Alias (byte) rem8u#17 = (byte) rem8u#3 (byte) rem8u#4 Alias (byte) rem8u#0 = (byte) rem8u#55 (byte) rem8u#52 (byte) rem8u#50 (byte) rem8u#41 -Alias (word) divr16u::return#0 = (word) divr16u::return#3 -Alias (word) rem16u#1 = (word) rem16u#15 (word) rem16u#16 (word) rem16u#2 -Alias (word) div16u::return#0 = (word~) div16u::$0 (word) div16u::return#4 (word) div16u::return#1 -Alias (word) divr16u::rem#1 = (word~) divr16u::$0 (word) divr16u::rem#6 -Alias (word) divr16u::dividend#1 = (word~) divr16u::$6 (word) divr16u::dividend#7 +Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#6 +Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#7 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#6 Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 Alias (word) divr16u::divisor#3 = (word) divr16u::divisor#4 Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 -Alias (word) divr16u::rem#2 = (word~) divr16u::$5 +Alias (word) divr16u::rem#1 = (word~) divr16u::$5 Alias (word) divr16u::rem#5 = (word) divr16u::rem#7 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#2 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 -Alias (word) divr16u::rem#3 = (word~) divr16u::$10 +Alias (word) divr16u::rem#2 = (word~) divr16u::$10 Alias (word) divr16u::rem#10 = (word) divr16u::rem#8 -Alias (word) divr16u::return#1 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#4 (word) divr16u::return#2 -Alias (word) rem16u#17 = (word) rem16u#3 (word) rem16u#4 +Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#3 (word) divr16u::return#1 +Alias (word) rem16u#1 = (word) rem16u#15 (word) rem16u#2 +Alias (word) divr16u::return#2 = (word) divr16u::return#4 +Alias (word) rem16u#16 = (word) rem16u#3 (word) rem16u#17 (word) rem16u#4 +Alias (word) div16u::return#0 = (word~) div16u::$0 (word) div16u::return#4 (word) div16u::return#1 Alias (word) rem16u#0 = (word) rem16u#50 (word) rem16u#49 (word) rem16u#40 Alias (signed byte) div8s::dividend#1 = (signed byte) div8s::dividend#2 (signed byte) div8s::dividend#3 Alias (signed byte) div8s::divisor#4 = (signed byte) div8s::divisor#6 (signed byte) div8s::divisor#5 @@ -4622,18 +4677,18 @@ Not aliassing across scopes: divr8u::rem#9 divr8u::rem#0 Not aliassing across scopes: divr8u::dividend#4 divr8u::dividend#0 Not aliassing across scopes: divr8u::divisor#5 divr8u::divisor#0 Not aliassing across scopes: rem8u#17 divr8u::rem#10 +Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 +Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 +Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#2 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#2 div16u::divisor#0 Not aliassing across scopes: rem16u#31 rem16u#32 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#2 +Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#2 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#2 -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: rem16u#1 rem16u#17 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#0 -Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#0 -Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#17 divr16u::rem#10 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: rem16u#16 rem16u#1 +Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: div8s::dividend#1 div8s::dividend#0 Not aliassing across scopes: div8s::divisor#4 div8s::divisor#0 Not aliassing across scopes: rem8u#56 rem8u#39 @@ -4648,7 +4703,7 @@ Not aliassing across scopes: rem16u#55 rem16u#38 Not aliassing across scopes: div16u::dividend#0 div16s::dividendu#3 Not aliassing across scopes: div16u::divisor#0 div16s::divisoru#3 Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#18 rem16u#1 +Not aliassing across scopes: rem16u#18 rem16u#16 Not aliassing across scopes: div16s::resultu#0 div16u::return#2 Not aliassing across scopes: line_cursor#40 SCREEN#0 Not aliassing across scopes: char_cursor#134 SCREEN#0 @@ -4699,7 +4754,7 @@ Not aliassing across scopes: line_cursor#83 line_cursor#25 Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 test_16u::divisor#0 Not aliassing across scopes: div16u::return#3 div16u::return#0 -Not aliassing across scopes: rem16u#10 rem16u#1 +Not aliassing across scopes: rem16u#10 rem16u#16 Not aliassing across scopes: test_16u::res#0 div16u::return#3 Not aliassing across scopes: print_word::w#1 test_16u::dividend#0 Not aliassing across scopes: char_cursor#36 char_cursor#12 @@ -4775,7 +4830,7 @@ Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#3 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#3 (word) divr16u::divisor#6 Alias (byte) divr16u::i#2 = (byte) divr16u::i#3 (byte) divr16u::i#5 -Alias (word) divr16u::dividend#1 = (word) divr16u::dividend#5 +Alias (word) divr16u::dividend#0 = (word) divr16u::dividend#5 Alias (signed byte) div8s::divisor#1 = (signed byte) div8s::divisor#4 Alias (byte) rem8u#32 = (byte) rem8u#42 (byte) rem8u#56 Alias (byte) div8s::dividendu#3 = (byte) div8s::dividendu#4 @@ -4821,18 +4876,18 @@ Not aliassing across scopes: divr8u::rem#9 divr8u::rem#0 Not aliassing across scopes: divr8u::dividend#4 divr8u::dividend#0 Not aliassing across scopes: divr8u::divisor#5 divr8u::divisor#0 Not aliassing across scopes: rem8u#17 divr8u::rem#10 +Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 +Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 +Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#2 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#2 div16u::divisor#0 Not aliassing across scopes: rem16u#31 rem16u#32 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#2 +Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#2 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#2 -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: rem16u#1 rem16u#17 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#0 -Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#0 -Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#17 divr16u::rem#10 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: rem16u#16 rem16u#1 +Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: div8s::dividend#1 div8s::dividend#0 Not aliassing across scopes: div8s::divisor#1 div8s::divisor#0 Not aliassing across scopes: rem8u#32 rem8u#39 @@ -4847,7 +4902,7 @@ Not aliassing across scopes: rem16u#32 rem16u#38 Not aliassing across scopes: div16u::dividend#0 div16s::dividendu#3 Not aliassing across scopes: div16u::divisor#0 div16s::divisoru#3 Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#18 rem16u#1 +Not aliassing across scopes: rem16u#18 rem16u#16 Not aliassing across scopes: div16s::resultu#0 div16u::return#2 Not aliassing across scopes: line_cursor#40 SCREEN#0 Not aliassing across scopes: char_cursor#134 SCREEN#0 @@ -4898,7 +4953,7 @@ Not aliassing across scopes: line_cursor#83 line_cursor#25 Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 test_16u::divisor#0 Not aliassing across scopes: div16u::return#3 div16u::return#0 -Not aliassing across scopes: rem16u#10 rem16u#1 +Not aliassing across scopes: rem16u#10 rem16u#16 Not aliassing across scopes: test_16u::res#0 div16u::return#3 Not aliassing across scopes: print_word::w#1 test_16u::dividend#0 Not aliassing across scopes: char_cursor#36 char_cursor#12 @@ -4983,11 +5038,11 @@ Redundant Phi (byte) divr8u::rem#9 (byte) divr8u::rem#0 Redundant Phi (byte) divr8u::dividend#4 (byte) divr8u::dividend#0 Redundant Phi (byte) divr8u::divisor#5 (byte) divr8u::divisor#0 Redundant Phi (byte) divr8u::divisor#1 (byte) divr8u::divisor#5 -Redundant Phi (word) rem16u#1 (word) rem16u#17 -Redundant Phi (word) divr16u::rem#9 (word) divr16u::rem#0 -Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#0 +Redundant Phi (word) divr16u::rem#9 (word) divr16u::rem#3 +Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#1 Redundant Phi (word) divr16u::divisor#5 (word) divr16u::divisor#0 Redundant Phi (word) divr16u::divisor#1 (word) divr16u::divisor#5 +Redundant Phi (word) rem16u#16 (word) rem16u#1 Redundant Phi (signed byte) div8s::dividend#1 (signed byte) div8s::dividend#0 Redundant Phi (signed byte) div8s::divisor#1 (signed byte) div8s::divisor#0 Redundant Phi (byte) rem8u#32 (byte) rem8u#39 @@ -4995,7 +5050,7 @@ Redundant Phi (byte) rem8u#18 (byte) rem8u#1 Redundant Phi (signed word) div16s::dividend#1 (signed word) div16s::dividend#0 Redundant Phi (signed word) div16s::divisor#1 (signed word) div16s::divisor#0 Redundant Phi (word) rem16u#32 (word) rem16u#38 -Redundant Phi (word) rem16u#18 (word) rem16u#1 +Redundant Phi (word) rem16u#18 (word) rem16u#16 Redundant Phi (byte*) line_cursor#40 (byte*) SCREEN#0 Redundant Phi (byte*) char_cursor#134 (byte*) SCREEN#0 Redundant Phi (byte) rem8u#33 (byte) rem8u#0 @@ -5034,7 +5089,7 @@ Redundant Phi (byte*) char_cursor#34 (byte*) line_cursor#1 Redundant Phi (word) rem16u#44 (word) rem16u#33 Redundant Phi (byte*) char_cursor#150 (byte*) char_cursor#22 Redundant Phi (byte*) line_cursor#83 (byte*) line_cursor#25 -Redundant Phi (word) rem16u#10 (word) rem16u#1 +Redundant Phi (word) rem16u#10 (word) rem16u#16 Redundant Phi (byte*) char_cursor#36 (byte*) char_cursor#12 Redundant Phi (byte*) char_cursor#37 (byte*) char_cursor#126 Redundant Phi (byte*) char_cursor#100 (byte*) char_cursor#12 @@ -5088,7 +5143,7 @@ Redundant Phi (byte*) line_cursor#42 (byte*) line_cursor#1 Redundant Phi (byte) rem8u#39 (byte) rem8u#17 Redundant Phi (byte*) char_cursor#137 (byte*) line_cursor#1 Redundant Phi (byte*) line_cursor#43 (byte*) line_cursor#1 -Redundant Phi (word) rem16u#38 (word) rem16u#17 +Redundant Phi (word) rem16u#38 (word) rem16u#1 Redundant Phi (byte*) char_cursor#138 (byte*) line_cursor#1 Redundant Phi (byte*) line_cursor#44 (byte*) line_cursor#1 Succesful SSA optimization Pass2RedundantPhiElimination @@ -5123,9 +5178,9 @@ Constant (const byte) divr8u::rem#0 = 0 Constant (const byte) divr8u::quotient#0 = 0 Constant (const byte) divr8u::i#0 = 0 Constant (const word) rem16u#0 = 0 -Constant (const word) divr16u::rem#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 +Constant (const word) divr16u::rem#3 = 0 Constant (const signed byte) rem8s#0 = 0 Constant (const byte) div8s::neg#0 = 0 Constant (const byte) div8s::dividendu#0 = 0 @@ -5194,9 +5249,9 @@ Eliminating Noop Cast (word) div16s::dividendu#1 ← ((word)) (signed word) div1 Eliminating Noop Cast (word) div16s::dividendu#2 ← ((word)) (signed word~) div16s::$2 Eliminating Noop Cast (word) div16s::divisoru#1 ← ((word)) (signed word) div16s::divisor#0 Eliminating Noop Cast (word) div16s::divisoru#2 ← ((word)) (signed word~) div16s::$7 -Eliminating Noop Cast (signed word~) div16s::$16 ← ((signed word)) (word) rem16u#17 +Eliminating Noop Cast (signed word~) div16s::$16 ← ((signed word)) (word) rem16u#1 Eliminating Noop Cast (signed word~) div16s::$18 ← ((signed word)) (word) div16s::resultu#0 -Eliminating Noop Cast (signed word) rem16s#2 ← ((signed word)) (word) rem16u#17 +Eliminating Noop Cast (signed word) rem16s#2 ← ((signed word)) (word) rem16u#1 Eliminating Noop Cast (signed word) div16s::return#1 ← ((signed word)) (word) div16s::resultu#0 Succesful SSA optimization Pass2NopCastElimination Culled Empty Block (label) print_ln::@2 @@ -5207,16 +5262,16 @@ Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) @10 Culled Empty Block (label) @12 -Culled Empty Block (label) @14 +Culled Empty Block (label) @15 Culled Empty Block (label) div8s::@1 Culled Empty Block (label) div8s::@3 Culled Empty Block (label) div8s::@11 -Culled Empty Block (label) @15 +Culled Empty Block (label) @16 Culled Empty Block (label) div16s::@1 Culled Empty Block (label) div16s::@3 Culled Empty Block (label) div16s::@11 Culled Empty Block (label) main::@5 -Culled Empty Block (label) @22 +Culled Empty Block (label) @23 Succesful SSA optimization Pass2CullEmptyBlocks Not aliassing across scopes: char_cursor#126 char_cursor#17 Not aliassing across scopes: print_sword::w#5 print_sword::w#1 @@ -5236,15 +5291,15 @@ Not aliassing across scopes: divr8u::return#0 divr8u::return#1 Not aliassing across scopes: div8u::return#0 divr8u::return#0 Not aliassing across scopes: divr8u::dividend#2 divr8u::dividend#0 Not aliassing across scopes: rem8u#17 divr8u::rem#10 +Not aliassing across scopes: divr16u::dividend#2 divr16u::dividend#1 +Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#2 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#2 div16u::divisor#0 -Not aliassing across scopes: rem16u#31 rem16u#17 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#2 +Not aliassing across scopes: rem16u#31 rem16u#1 +Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#2 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#2 -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: divr16u::dividend#2 divr16u::dividend#0 -Not aliassing across scopes: rem16u#17 divr16u::rem#10 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: div8u::dividend#0 div8s::dividendu#3 Not aliassing across scopes: div8u::divisor#0 div8s::divisoru#3 Not aliassing across scopes: div8u::return#2 div8u::return#0 @@ -5268,7 +5323,7 @@ Not aliassing across scopes: test_16u::res#0 div16u::return#3 Not aliassing across scopes: print_word::w#1 test_16u::dividend#0 Not aliassing across scopes: print_word::w#2 test_16u::divisor#0 Not aliassing across scopes: print_word::w#3 test_16u::res#0 -Not aliassing across scopes: print_word::w#4 rem16u#17 +Not aliassing across scopes: print_word::w#4 rem16u#1 Not aliassing across scopes: div8s::dividend#0 test_8s::dividend#0 Not aliassing across scopes: div8s::divisor#0 test_8s::divisor#0 Not aliassing across scopes: div8s::return#3 div8s::return#2 @@ -5303,15 +5358,15 @@ Not aliassing across scopes: divr8u::return#0 divr8u::return#1 Not aliassing across scopes: div8u::return#0 divr8u::return#0 Not aliassing across scopes: divr8u::dividend#2 divr8u::dividend#0 Not aliassing across scopes: rem8u#17 divr8u::rem#10 +Not aliassing across scopes: divr16u::dividend#2 divr16u::dividend#1 +Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#2 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#2 div16u::divisor#0 -Not aliassing across scopes: rem16u#31 rem16u#17 -Not aliassing across scopes: divr16u::dividend#0 div16u::dividend#2 +Not aliassing across scopes: rem16u#31 rem16u#1 +Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#2 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#2 -Not aliassing across scopes: divr16u::return#0 divr16u::return#1 -Not aliassing across scopes: div16u::return#0 divr16u::return#0 -Not aliassing across scopes: divr16u::dividend#2 divr16u::dividend#0 -Not aliassing across scopes: rem16u#17 divr16u::rem#10 +Not aliassing across scopes: divr16u::return#2 divr16u::return#0 +Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: div8u::dividend#0 div8s::dividendu#3 Not aliassing across scopes: div8u::divisor#0 div8s::divisoru#3 Not aliassing across scopes: div8u::return#2 div8u::return#0 @@ -5335,7 +5390,7 @@ Not aliassing across scopes: test_16u::res#0 div16u::return#3 Not aliassing across scopes: print_word::w#1 test_16u::dividend#0 Not aliassing across scopes: print_word::w#2 test_16u::divisor#0 Not aliassing across scopes: print_word::w#3 test_16u::res#0 -Not aliassing across scopes: print_word::w#4 rem16u#17 +Not aliassing across scopes: print_word::w#4 rem16u#1 Not aliassing across scopes: div8s::dividend#0 test_8s::dividend#0 Not aliassing across scopes: div8s::divisor#0 test_8s::divisor#0 Not aliassing across scopes: div8s::return#3 div8s::return#2 @@ -5410,17 +5465,17 @@ Inlining constant with var siblings (const byte) divr8u::quotient#0 Inlining constant with var siblings (const byte) divr8u::quotient#0 Inlining constant with var siblings (const byte) divr8u::i#0 Inlining constant with var siblings (const byte) divr8u::i#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 -Inlining constant with var siblings (const word) divr16u::rem#0 Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 Inlining constant with var siblings (const byte) divr16u::i#0 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 +Inlining constant with var siblings (const word) divr16u::rem#3 Inlining constant with var siblings (const byte) div8s::neg#0 Inlining constant with var siblings (const byte) div8s::neg#0 Inlining constant with var siblings (const byte) div8s::neg#0 @@ -5461,7 +5516,7 @@ Inlining constant with var siblings (const byte*) line_cursor#23 Inlining constant with var siblings (const byte*) line_cursor#23 Inlining constant with var siblings (const byte*) line_cursor#23 Inlining constant with var siblings (const byte*) line_cursor#23 -Constant inlined divr16u::rem#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined divr16u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined print_cls::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000 Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined print_str::str#12 = (const string) test_16s::str2 @@ -5508,7 +5563,7 @@ Constant inlined test_16s::$2 = -(word/signed word/dword/signed dword) 32767 Constant inlined print_str::str#5 = (const string) test_16u::str1 Constant inlined rem8u#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @21 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@return div16s::@5 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@return div8s::@5 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@6 divr8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return print_cls print_cls::@1 print_cls::@return +Block Sequence Planned @begin @22 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@return div16s::@5 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@return div8s::@5 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@6 divr8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return print_cls print_cls::@1 print_cls::@return Added new block during phi lifting test_16s::@12(between test_16s::@11 and test_16s::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1) @@ -5531,9 +5586,9 @@ Added new block during phi lifting divr8u::@10(between divr8u::@2 and divr8u::@3 Added new block during phi lifting test_16u::@12(between test_16u::@11 and test_16u::@1) Added new block during phi lifting test_8u::@12(between test_8u::@11 and test_8u::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @21 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return test_16s::@12 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return test_8s::@12 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@6 divr8u::@return divr8u::@8 divr8u::@10 divr8u::@9 test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_16u::@12 test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return print_cls::@3 +Block Sequence Planned @begin @22 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return test_16s::@12 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return test_8s::@12 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@6 divr8u::@return divr8u::@8 divr8u::@10 divr8u::@9 test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_16u::@12 test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin -Adding NOP phi() at start of @21 +Adding NOP phi() at start of @22 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 @@ -5657,22 +5712,22 @@ Coalesced [110] char_cursor#178 ← char_cursor#1 Coalesced [119] div16s::neg#10 ← div16s::neg#2 Coalesced [123] div16u::dividend#3 ← div16u::dividend#0 Coalesced [124] div16u::divisor#3 ← div16u::divisor#0 -Coalesced [125] rem16u#65 ← rem16u#17 +Coalesced [125] rem16u#65 ← rem16u#1 Coalesced [136] div16s::return#7 ← div16s::return#0 Coalesced [137] rem16s#33 ← rem16s#1 Coalesced [139] div16s::neg#9 ← div16s::neg#3 -Coalesced [148] divr16u::dividend#8 ← divr16u::dividend#0 -Coalesced [155] divr16u::rem#13 ← divr16u::rem#2 -Coalesced [162] divr16u::rem#15 ← divr16u::rem#3 +Coalesced [148] divr16u::dividend#8 ← divr16u::dividend#1 +Coalesced [155] divr16u::rem#13 ← divr16u::rem#1 +Coalesced [162] divr16u::rem#15 ← divr16u::rem#2 Coalesced [163] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [167] rem16u#17 ← divr16u::rem#10 +Coalesced [167] rem16u#1 ← divr16u::rem#10 Coalesced [169] divr16u::rem#11 ← divr16u::rem#10 -Coalesced [170] divr16u::dividend#9 ← divr16u::dividend#1 -Coalesced [171] divr16u::quotient#9 ← divr16u::return#1 +Coalesced [170] divr16u::dividend#9 ← divr16u::dividend#0 +Coalesced [171] divr16u::quotient#9 ← divr16u::return#0 Coalesced [172] divr16u::i#7 ← divr16u::i#1 Coalesced [173] divr16u::rem#14 ← divr16u::rem#5 Coalesced [174] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [175] divr16u::rem#12 ← divr16u::rem#1 +Coalesced [175] divr16u::rem#12 ← divr16u::rem#0 Coalesced [186] print_sbyte::b#9 ← print_sbyte::b#1 Not coalescing [187] char_cursor#179 ← line_cursor#1 Coalesced [192] print_sbyte::b#10 ← print_sbyte::b#2 @@ -5722,7 +5777,7 @@ Coalesced [323] print_word::w#11 ← print_word::w#4 Coalesced (already) [324] char_cursor#165 ← char_cursor#126 Coalesced (already) [326] line_cursor#87 ← line_cursor#1 Coalesced [331] test_16u::i#12 ← test_16u::i#1 -Coalesced (already) [332] rem16u#67 ← rem16u#17 +Coalesced (already) [332] rem16u#67 ← rem16u#1 Coalesced [339] div8u::dividend#4 ← div8u::dividend#1 Coalesced [340] div8u::divisor#4 ← div8u::divisor#1 Coalesced [341] rem8u#67 ← rem8u#36 @@ -5756,9 +5811,9 @@ Culled Empty Block (label) divr8u::@10 Culled Empty Block (label) divr8u::@9 Culled Empty Block (label) test_16u::@12 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @21 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return +Block Sequence Planned @begin @22 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin -Adding NOP phi() at start of @21 +Adding NOP phi() at start of @22 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 @@ -5829,14 +5884,14 @@ Propagating live ranges... FINAL CONTROL FLOW GRAPH @begin: scope:[] from [0] phi() [ ] ( ) - to:@21 -@21: scope:[] from @begin + to:@22 +@22: scope:[] from @begin [1] phi() [ ] ( ) [2] call main param-assignment [ ] ( ) to:@end -@end: scope:[] from @21 +@end: scope:[] from @22 [3] phi() [ ] ( ) -main: scope:[main] from @21 +main: scope:[main] from @22 [4] phi() [ ] ( main:2 [ ] ) [5] call print_cls param-assignment [ ] ( main:2 [ ] ) to:main::@1 @@ -6050,51 +6105,51 @@ div16u: scope:[div16u] from div16s::@4 test_16u::@1 [106] (word) rem16u#31 ← phi( div16s::@4/(word) divr16u::rem#10 test_16u::@1/(word) rem16u#35 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] ) [106] (word) div16u::divisor#2 ← phi( div16s::@4/(word) div16u::divisor#0 test_16u::@1/(word) div16u::divisor#1 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] ) [106] (word) div16u::dividend#2 ← phi( div16s::@4/(word) div16u::dividend#0 test_16u::@1/(word) div16u::dividend#1 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] ) - [107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] ) - [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) - [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) - [110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) + [107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] ) + [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) + [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) + [110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] ) to:div16u::@2 div16u::@2: scope:[div16u] from div16u - [111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) + [111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) to:div16u::@return div16u::@return: scope:[div16u] from div16u::@2 [112] return [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) to:@return divr16u: scope:[divr16u] from div16u - [113] phi() [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) + [113] phi() [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [114] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [114] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [114] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#0 divr16u::@3/(word) divr16u::dividend#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [114] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [114] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [114] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [115] (word) divr16u::rem#1 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) - [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) - [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) - [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) + [115] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) + [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) + [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) + [119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [120] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#1 divr16u::@4/(word) divr16u::rem#2 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) - [121] (word) divr16u::dividend#1 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ) - [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) - [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) + [120] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) + [121] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) + [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) + [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ) - [125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) + [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) + [125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [126] (word) divr16u::return#1 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ) - [126] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#3 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ) - [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) - [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) + [126] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) + [126] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) + [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) + [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 - [129] return [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + [129] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) to:@return test_8s: scope:[test_8s] from main::@3 [130] phi() [ line_cursor#1 divr8u::rem#10 ] ( main:2::test_8s:11 [ divr16u::rem#10 line_cursor#1 divr8u::rem#10 ] ) @@ -6395,133 +6450,133 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 DOMINATORS @begin dominated by @begin -@21 dominated by @21 @begin -@end dominated by @21 @end @begin -main dominated by @21 main @begin -main::@1 dominated by main::@1 @21 main @begin -main::@2 dominated by main::@1 main::@2 @21 main @begin -main::@3 dominated by main::@1 main::@2 main::@3 @21 main @begin -main::@4 dominated by main::@1 main::@2 main::@3 main::@4 @21 main @begin -main::@return dominated by main::@1 main::@2 main::@3 main::@4 main::@return @21 main @begin -test_16s dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 main @begin -test_16s::@1 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 main @begin -test_16s::@3 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 main @begin -test_16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 main @begin -test_16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 main @begin -test_16s::@6 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 main @begin -test_16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 main @begin -test_16s::@8 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main @begin -test_16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin -test_16s::@10 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@10 -test_16s::@11 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10 -test_16s::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s::@return test_16s @21 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10 -print_ln dominated by main::@1 print_ln @21 main @begin -print_ln::@1 dominated by main::@1 print_ln @21 print_ln::@1 main @begin -print_ln::@return dominated by print_ln::@return main::@1 print_ln @21 print_ln::@1 main @begin -print_sword dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @21 test_16s::@1 test_16s::@3 main @begin -print_sword::@2 dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @21 test_16s::@1 test_16s::@3 print_sword::@2 main @begin -print_sword::@4 dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @21 test_16s::@1 test_16s::@3 print_sword::@2 print_sword::@4 main @begin -print_sword::@1 dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @21 test_16s::@1 test_16s::@3 print_sword::@1 main @begin -print_sword::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @21 test_16s::@1 test_16s::@3 print_sword::@1 main @begin print_sword::@return -print_word dominated by print_word main::@1 main::@2 @21 main @begin -print_word::@1 dominated by print_word main::@1 main::@2 print_word::@1 @21 main @begin -print_word::@return dominated by print_word main::@1 main::@2 print_word::@return print_word::@1 @21 main @begin -print_byte dominated by main::@1 print_byte @21 main @begin -print_byte::@1 dominated by main::@1 print_byte::@1 print_byte @21 main @begin -print_byte::@return dominated by main::@1 print_byte::@1 print_byte @21 main @begin print_byte::@return -print_char dominated by main::@1 @21 main print_char @begin -print_char::@return dominated by main::@1 @21 main print_char print_char::@return @begin -print_str dominated by main::@1 print_str @21 main @begin -print_str::@1 dominated by main::@1 print_str::@1 print_str @21 main @begin -print_str::@return dominated by main::@1 print_str::@return print_str::@1 print_str @21 main @begin -print_str::@2 dominated by main::@1 print_str::@1 print_str::@2 print_str @21 main @begin -div16s dominated by main::@1 main::@2 main::@3 main::@4 div16s test_16s @21 test_16s::@1 main @begin -div16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@7 test_16s @21 test_16s::@1 main @begin -div16s::@2 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 test_16s @21 test_16s::@1 main @begin -div16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@9 div16s::@2 test_16s @21 test_16s::@1 main @begin -div16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @21 test_16s::@1 main @begin -div16s::@15 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @21 test_16s::@1 main @begin div16s::@15 -div16s::@18 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @21 test_16s::@1 main @begin div16s::@15 div16s::@18 -div16s::@return dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @21 test_16s::@1 main @begin div16s::@return div16s::@15 -div16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@5 div16s::@4 div16s::@2 test_16s @21 test_16s::@1 main @begin div16s::@15 -div16s::@17 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 test_16s @21 test_16s::@1 main @begin div16s::@17 -div16s::@16 dominated by main::@1 main::@2 main::@3 main::@4 div16s test_16s @21 test_16s::@1 main @begin div16s::@16 -div16u dominated by main::@1 main::@2 div16u @21 main @begin -div16u::@2 dominated by main::@1 main::@2 div16u div16u::@2 @21 main @begin -div16u::@return dominated by div16u::@return main::@1 main::@2 div16u div16u::@2 @21 main @begin -divr16u dominated by main::@1 main::@2 div16u @21 divr16u main @begin -divr16u::@1 dominated by divr16u::@1 main::@1 main::@2 div16u @21 divr16u main @begin -divr16u::@4 dominated by divr16u::@1 divr16u::@4 main::@1 main::@2 div16u @21 divr16u main @begin -divr16u::@2 dominated by divr16u::@2 divr16u::@1 main::@1 main::@2 div16u @21 divr16u main @begin -divr16u::@5 dominated by divr16u::@2 divr16u::@1 divr16u::@5 main::@1 main::@2 div16u @21 divr16u main @begin -divr16u::@3 dominated by divr16u::@2 divr16u::@1 divr16u::@3 main::@1 main::@2 div16u @21 divr16u main @begin -divr16u::@return dominated by divr16u::@2 divr16u::@1 divr16u::@3 main::@1 main::@2 div16u @21 divr16u::@return divr16u main @begin -test_8s dominated by main::@1 main::@2 main::@3 test_8s @21 main @begin -test_8s::@1 dominated by main::@1 main::@2 main::@3 test_8s @21 main @begin test_8s::@1 -test_8s::@3 dominated by main::@1 main::@2 main::@3 test_8s @21 main @begin test_8s::@1 test_8s::@3 -test_8s::@4 dominated by main::@1 main::@2 main::@3 test_8s @21 main @begin test_8s::@1 test_8s::@3 test_8s::@4 -test_8s::@5 dominated by main::@1 main::@2 main::@3 test_8s @21 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 -test_8s::@6 dominated by main::@1 main::@2 main::@3 test_8s @21 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 -test_8s::@7 dominated by main::@1 main::@2 main::@3 test_8s @21 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 -test_8s::@8 dominated by main::@1 main::@2 main::@3 test_8s @21 main test_8s::@8 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 -test_8s::@9 dominated by main::@1 main::@2 main::@3 test_8s @21 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 -test_8s::@10 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s @21 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 -test_8s::@11 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @21 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 -test_8s::@return dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @21 main test_8s::@8 test_8s::@9 @begin test_8s::@return test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 -print_sbyte dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @21 main @begin test_8s::@1 test_8s::@3 -print_sbyte::@2 dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @21 main print_sbyte::@2 @begin test_8s::@1 test_8s::@3 -print_sbyte::@4 dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @21 main print_sbyte::@4 print_sbyte::@2 @begin test_8s::@1 test_8s::@3 -print_sbyte::@1 dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @21 main print_sbyte::@1 @begin test_8s::@1 test_8s::@3 -print_sbyte::@return dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @21 main print_sbyte::@1 @begin print_sbyte::@return test_8s::@1 test_8s::@3 -div8s dominated by main::@1 main::@2 main::@3 div8s test_8s @21 main @begin test_8s::@1 -div8s::@7 dominated by main::@1 main::@2 main::@3 div8s test_8s @21 main @begin test_8s::@1 div8s::@7 -div8s::@2 dominated by main::@1 main::@2 main::@3 div8s test_8s @21 main div8s::@2 @begin test_8s::@1 -div8s::@9 dominated by main::@1 main::@2 main::@3 div8s test_8s @21 main div8s::@2 @begin test_8s::@1 div8s::@9 -div8s::@4 dominated by main::@1 main::@2 main::@3 div8s test_8s @21 main div8s::@2 @begin test_8s::@1 div8s::@4 -div8s::@15 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@15 @21 main div8s::@2 @begin test_8s::@1 div8s::@4 -div8s::@18 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@18 div8s::@15 @21 main div8s::@2 @begin test_8s::@1 div8s::@4 -div8s::@return dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@15 @21 main div8s::@2 div8s::@return @begin test_8s::@1 div8s::@4 -div8s::@5 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@15 @21 main div8s::@2 @begin test_8s::@1 div8s::@5 div8s::@4 -div8s::@17 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@17 @21 main div8s::@2 @begin test_8s::@1 -div8s::@16 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@16 @21 main @begin test_8s::@1 -div8u dominated by main::@1 div8u @21 main @begin -div8u::@2 dominated by main::@1 div8u @21 main div8u::@2 @begin -div8u::@return dominated by main::@1 div8u div8u::@return @21 main div8u::@2 @begin -divr8u dominated by main::@1 div8u divr8u @21 main @begin -divr8u::@1 dominated by divr8u::@1 main::@1 div8u divr8u @21 main @begin -divr8u::@4 dominated by divr8u::@1 main::@1 divr8u::@4 div8u divr8u @21 main @begin -divr8u::@2 dominated by divr8u::@1 main::@1 divr8u::@2 div8u divr8u @21 main @begin -divr8u::@5 dominated by divr8u::@1 main::@1 divr8u::@5 divr8u::@2 div8u divr8u @21 main @begin -divr8u::@3 dominated by divr8u::@1 main::@1 divr8u::@2 divr8u::@3 div8u divr8u @21 main @begin -divr8u::@return dominated by divr8u::@1 main::@1 divr8u::@2 divr8u::@3 div8u divr8u @21 main @begin divr8u::@return -test_16u dominated by main::@1 main::@2 test_16u @21 main @begin -test_16u::@1 dominated by main::@1 main::@2 test_16u test_16u::@1 @21 main @begin -test_16u::@3 dominated by main::@1 main::@2 test_16u test_16u::@1 test_16u::@3 @21 main @begin -test_16u::@4 dominated by main::@1 main::@2 test_16u test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@5 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@6 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@6 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@7 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@8 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@9 dominated by main::@1 main::@2 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@10 dominated by main::@1 main::@2 test_16u::@10 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@11 dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin -test_16u::@return dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @21 main @begin test_16u::@return -test_8u dominated by main::@1 test_8u @21 main @begin -test_8u::@1 dominated by main::@1 test_8u @21 main @begin test_8u::@1 -test_8u::@3 dominated by main::@1 test_8u @21 main @begin test_8u::@3 test_8u::@1 -test_8u::@4 dominated by main::@1 test_8u @21 main @begin test_8u::@3 test_8u::@4 test_8u::@1 -test_8u::@5 dominated by main::@1 test_8u @21 main @begin test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -test_8u::@6 dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -test_8u::@7 dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@7 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -test_8u::@8 dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -test_8u::@9 dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -test_8u::@10 dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -test_8u::@11 dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -test_8u::@return dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 test_8u::@return -test_8u::@12 dominated by main::@1 test_8u @21 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@12 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 -print_cls dominated by print_cls @21 main @begin -print_cls::@1 dominated by print_cls @21 main @begin print_cls::@1 -print_cls::@return dominated by print_cls @21 main @begin print_cls::@return print_cls::@1 +@22 dominated by @22 @begin +@end dominated by @22 @end @begin +main dominated by @22 main @begin +main::@1 dominated by main::@1 @22 main @begin +main::@2 dominated by main::@1 main::@2 @22 main @begin +main::@3 dominated by main::@1 main::@2 main::@3 @22 main @begin +main::@4 dominated by main::@1 main::@2 main::@3 main::@4 @22 main @begin +main::@return dominated by main::@1 main::@2 main::@3 main::@4 main::@return @22 main @begin +test_16s dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 main @begin +test_16s::@1 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 main @begin +test_16s::@3 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 main @begin +test_16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 main @begin +test_16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 main @begin +test_16s::@6 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 main @begin +test_16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 main @begin +test_16s::@8 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main @begin +test_16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin +test_16s::@10 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@10 +test_16s::@11 dominated by main::@1 main::@2 main::@3 main::@4 test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10 +test_16s::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s::@return test_16s @22 test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10 +print_ln dominated by main::@1 print_ln @22 main @begin +print_ln::@1 dominated by main::@1 print_ln @22 print_ln::@1 main @begin +print_ln::@return dominated by print_ln::@return main::@1 print_ln @22 print_ln::@1 main @begin +print_sword dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @22 test_16s::@1 test_16s::@3 main @begin +print_sword::@2 dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @22 test_16s::@1 test_16s::@3 print_sword::@2 main @begin +print_sword::@4 dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @22 test_16s::@1 test_16s::@3 print_sword::@2 print_sword::@4 main @begin +print_sword::@1 dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @22 test_16s::@1 test_16s::@3 print_sword::@1 main @begin +print_sword::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s print_sword @22 test_16s::@1 test_16s::@3 print_sword::@1 main @begin print_sword::@return +print_word dominated by print_word main::@1 main::@2 @22 main @begin +print_word::@1 dominated by print_word main::@1 main::@2 print_word::@1 @22 main @begin +print_word::@return dominated by print_word main::@1 main::@2 print_word::@return print_word::@1 @22 main @begin +print_byte dominated by main::@1 print_byte @22 main @begin +print_byte::@1 dominated by main::@1 print_byte::@1 print_byte @22 main @begin +print_byte::@return dominated by main::@1 print_byte::@1 print_byte @22 main @begin print_byte::@return +print_char dominated by main::@1 @22 main print_char @begin +print_char::@return dominated by main::@1 @22 main print_char print_char::@return @begin +print_str dominated by main::@1 print_str @22 main @begin +print_str::@1 dominated by main::@1 print_str::@1 print_str @22 main @begin +print_str::@return dominated by main::@1 print_str::@return print_str::@1 print_str @22 main @begin +print_str::@2 dominated by main::@1 print_str::@1 print_str::@2 print_str @22 main @begin +div16s dominated by main::@1 main::@2 main::@3 main::@4 div16s test_16s @22 test_16s::@1 main @begin +div16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@7 test_16s @22 test_16s::@1 main @begin +div16s::@2 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 test_16s @22 test_16s::@1 main @begin +div16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@9 div16s::@2 test_16s @22 test_16s::@1 main @begin +div16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @22 test_16s::@1 main @begin +div16s::@15 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @22 test_16s::@1 main @begin div16s::@15 +div16s::@18 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @22 test_16s::@1 main @begin div16s::@15 div16s::@18 +div16s::@return dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 test_16s @22 test_16s::@1 main @begin div16s::@return div16s::@15 +div16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@5 div16s::@4 div16s::@2 test_16s @22 test_16s::@1 main @begin div16s::@15 +div16s::@17 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 test_16s @22 test_16s::@1 main @begin div16s::@17 +div16s::@16 dominated by main::@1 main::@2 main::@3 main::@4 div16s test_16s @22 test_16s::@1 main @begin div16s::@16 +div16u dominated by main::@1 main::@2 div16u @22 main @begin +div16u::@2 dominated by main::@1 main::@2 div16u div16u::@2 @22 main @begin +div16u::@return dominated by div16u::@return main::@1 main::@2 div16u div16u::@2 @22 main @begin +divr16u dominated by main::@1 main::@2 div16u @22 divr16u main @begin +divr16u::@1 dominated by divr16u::@1 main::@1 main::@2 div16u @22 divr16u main @begin +divr16u::@4 dominated by divr16u::@1 divr16u::@4 main::@1 main::@2 div16u @22 divr16u main @begin +divr16u::@2 dominated by divr16u::@2 divr16u::@1 main::@1 main::@2 div16u @22 divr16u main @begin +divr16u::@5 dominated by divr16u::@2 divr16u::@1 divr16u::@5 main::@1 main::@2 div16u @22 divr16u main @begin +divr16u::@3 dominated by divr16u::@2 divr16u::@1 divr16u::@3 main::@1 main::@2 div16u @22 divr16u main @begin +divr16u::@return dominated by divr16u::@2 divr16u::@1 divr16u::@3 main::@1 main::@2 div16u divr16u::@return @22 divr16u main @begin +test_8s dominated by main::@1 main::@2 main::@3 test_8s @22 main @begin +test_8s::@1 dominated by main::@1 main::@2 main::@3 test_8s @22 main @begin test_8s::@1 +test_8s::@3 dominated by main::@1 main::@2 main::@3 test_8s @22 main @begin test_8s::@1 test_8s::@3 +test_8s::@4 dominated by main::@1 main::@2 main::@3 test_8s @22 main @begin test_8s::@1 test_8s::@3 test_8s::@4 +test_8s::@5 dominated by main::@1 main::@2 main::@3 test_8s @22 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 +test_8s::@6 dominated by main::@1 main::@2 main::@3 test_8s @22 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 +test_8s::@7 dominated by main::@1 main::@2 main::@3 test_8s @22 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 +test_8s::@8 dominated by main::@1 main::@2 main::@3 test_8s @22 main test_8s::@8 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 +test_8s::@9 dominated by main::@1 main::@2 main::@3 test_8s @22 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 +test_8s::@10 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s @22 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 +test_8s::@11 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @22 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 +test_8s::@return dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @22 main test_8s::@8 test_8s::@9 @begin test_8s::@return test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 +print_sbyte dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @22 main @begin test_8s::@1 test_8s::@3 +print_sbyte::@2 dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @22 main print_sbyte::@2 @begin test_8s::@1 test_8s::@3 +print_sbyte::@4 dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @22 main print_sbyte::@4 print_sbyte::@2 @begin test_8s::@1 test_8s::@3 +print_sbyte::@1 dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @22 main print_sbyte::@1 @begin test_8s::@1 test_8s::@3 +print_sbyte::@return dominated by main::@1 main::@2 main::@3 test_8s print_sbyte @22 main print_sbyte::@1 @begin print_sbyte::@return test_8s::@1 test_8s::@3 +div8s dominated by main::@1 main::@2 main::@3 div8s test_8s @22 main @begin test_8s::@1 +div8s::@7 dominated by main::@1 main::@2 main::@3 div8s test_8s @22 main @begin test_8s::@1 div8s::@7 +div8s::@2 dominated by main::@1 main::@2 main::@3 div8s test_8s @22 main div8s::@2 @begin test_8s::@1 +div8s::@9 dominated by main::@1 main::@2 main::@3 div8s test_8s @22 main div8s::@2 @begin test_8s::@1 div8s::@9 +div8s::@4 dominated by main::@1 main::@2 main::@3 div8s test_8s @22 main div8s::@2 @begin test_8s::@1 div8s::@4 +div8s::@15 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@15 @22 main div8s::@2 @begin test_8s::@1 div8s::@4 +div8s::@18 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@18 div8s::@15 @22 main div8s::@2 @begin test_8s::@1 div8s::@4 +div8s::@return dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@15 @22 main div8s::@2 div8s::@return @begin test_8s::@1 div8s::@4 +div8s::@5 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@15 @22 main div8s::@2 @begin test_8s::@1 div8s::@5 div8s::@4 +div8s::@17 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@17 @22 main div8s::@2 @begin test_8s::@1 +div8s::@16 dominated by main::@1 main::@2 main::@3 div8s test_8s div8s::@16 @22 main @begin test_8s::@1 +div8u dominated by main::@1 div8u @22 main @begin +div8u::@2 dominated by main::@1 div8u @22 main div8u::@2 @begin +div8u::@return dominated by main::@1 div8u div8u::@return @22 main div8u::@2 @begin +divr8u dominated by main::@1 div8u divr8u @22 main @begin +divr8u::@1 dominated by divr8u::@1 main::@1 div8u divr8u @22 main @begin +divr8u::@4 dominated by divr8u::@1 main::@1 divr8u::@4 div8u divr8u @22 main @begin +divr8u::@2 dominated by divr8u::@1 main::@1 divr8u::@2 div8u divr8u @22 main @begin +divr8u::@5 dominated by divr8u::@1 main::@1 divr8u::@5 divr8u::@2 div8u divr8u @22 main @begin +divr8u::@3 dominated by divr8u::@1 main::@1 divr8u::@2 divr8u::@3 div8u divr8u @22 main @begin +divr8u::@return dominated by divr8u::@1 main::@1 divr8u::@2 divr8u::@3 div8u divr8u @22 main @begin divr8u::@return +test_16u dominated by main::@1 main::@2 test_16u @22 main @begin +test_16u::@1 dominated by main::@1 main::@2 test_16u test_16u::@1 @22 main @begin +test_16u::@3 dominated by main::@1 main::@2 test_16u test_16u::@1 test_16u::@3 @22 main @begin +test_16u::@4 dominated by main::@1 main::@2 test_16u test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@5 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@6 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@6 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@7 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@8 dominated by main::@1 main::@2 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@9 dominated by main::@1 main::@2 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@10 dominated by main::@1 main::@2 test_16u::@10 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@11 dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin +test_16u::@return dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 @22 main @begin test_16u::@return +test_8u dominated by main::@1 test_8u @22 main @begin +test_8u::@1 dominated by main::@1 test_8u @22 main @begin test_8u::@1 +test_8u::@3 dominated by main::@1 test_8u @22 main @begin test_8u::@3 test_8u::@1 +test_8u::@4 dominated by main::@1 test_8u @22 main @begin test_8u::@3 test_8u::@4 test_8u::@1 +test_8u::@5 dominated by main::@1 test_8u @22 main @begin test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +test_8u::@6 dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +test_8u::@7 dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@7 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +test_8u::@8 dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +test_8u::@9 dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +test_8u::@10 dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +test_8u::@11 dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +test_8u::@return dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 test_8u::@return +test_8u::@12 dominated by main::@1 test_8u @22 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@12 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 +print_cls dominated by print_cls @22 main @begin +print_cls::@1 dominated by print_cls @22 main @begin print_cls::@1 +print_cls::@return dominated by print_cls @22 main @begin print_cls::@return print_cls::@1 NATURAL LOOPS Found back edge: Loop head: test_16s::@1 tails: test_16s::@11 blocks: null @@ -6693,8 +6748,8 @@ VARIABLE REGISTER WEIGHTS (byte~) divr16u::$1 202.0 (byte~) divr16u::$2 202.0 (word) divr16u::dividend -(word) divr16u::dividend#0 1.3333333333333333 -(word) divr16u::dividend#1 25.25 +(word) divr16u::dividend#0 25.25 +(word) divr16u::dividend#1 1.3333333333333333 (word) divr16u::dividend#2 43.57142857142858 (word) divr16u::divisor (word) divr16u::divisor#0 12.0 @@ -6706,15 +6761,15 @@ VARIABLE REGISTER WEIGHTS (word) divr16u::quotient#2 101.0 (word) divr16u::quotient#3 25.25 (word) divr16u::rem -(word) divr16u::rem#1 75.75 +(word) divr16u::rem#0 75.75 +(word) divr16u::rem#1 202.0 (word) divr16u::rem#10 3.8023255813953494 (word) divr16u::rem#2 202.0 -(word) divr16u::rem#3 202.0 (word) divr16u::rem#4 202.0 (word) divr16u::rem#5 101.0 (word) divr16u::return -(word) divr16u::return#0 4.0 -(word) divr16u::return#1 61.0 +(word) divr16u::return#0 61.0 +(word) divr16u::return#2 4.0 (byte()) divr8u((byte) divr8u::dividend , (byte) divr8u::divisor , (byte) divr8u::rem) (byte~) divr8u::$1 202.0 (byte) divr8u::dividend @@ -6881,9 +6936,9 @@ Initial phi equivalence classes [ div16s::return#2 div16s::return#6 div16s::return#0 ] [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] [ div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 ] -[ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] -[ divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] -[ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] +[ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] +[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] [ test_8s::i#10 test_8s::i#1 ] [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] @@ -6914,7 +6969,7 @@ Added variable div16s::$7 to zero page equivalence class [ div16s::$7 ] Added variable div16u::return#2 to zero page equivalence class [ div16u::return#2 ] Added variable div16s::resultu#0 to zero page equivalence class [ div16s::resultu#0 ] Added variable divr16u::divisor#0 to zero page equivalence class [ divr16u::divisor#0 ] -Added variable divr16u::return#0 to zero page equivalence class [ divr16u::return#0 ] +Added variable divr16u::return#2 to zero page equivalence class [ divr16u::return#2 ] Added variable div16u::return#0 to zero page equivalence class [ div16u::return#0 ] Added variable divr16u::$1 to zero page equivalence class [ divr16u::$1 ] Added variable divr16u::$2 to zero page equivalence class [ divr16u::$2 ] @@ -6956,9 +7011,9 @@ Complete equivalence classes [ div16s::return#2 div16s::return#6 div16s::return#0 ] [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] [ div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 ] -[ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] -[ divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] -[ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] +[ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] +[ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] [ test_8s::i#10 test_8s::i#1 ] [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] @@ -6989,7 +7044,7 @@ Complete equivalence classes [ div16u::return#2 ] [ div16s::resultu#0 ] [ divr16u::divisor#0 ] -[ divr16u::return#0 ] +[ divr16u::return#2 ] [ div16u::return#0 ] [ divr16u::$1 ] [ divr16u::$2 ] @@ -7030,9 +7085,9 @@ Allocated zp ZP_BYTE:21 [ div16s::neg#4 div16s::neg#3 div16s::neg#2 ] Allocated zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 ] Allocated zp ZP_WORD:24 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] Allocated zp ZP_WORD:26 [ div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 ] -Allocated zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] -Allocated zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] -Allocated zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] +Allocated zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp ZP_BYTE:34 [ divr16u::i#2 divr16u::i#1 ] Allocated zp ZP_BYTE:35 [ test_8s::i#10 test_8s::i#1 ] Allocated zp ZP_BYTE:36 [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] @@ -7063,7 +7118,7 @@ Allocated zp ZP_WORD:68 [ div16s::$7 ] Allocated zp ZP_WORD:70 [ div16u::return#2 ] Allocated zp ZP_WORD:72 [ div16s::resultu#0 ] Allocated zp ZP_WORD:74 [ divr16u::divisor#0 ] -Allocated zp ZP_WORD:76 [ divr16u::return#0 ] +Allocated zp ZP_WORD:76 [ divr16u::return#2 ] Allocated zp ZP_WORD:78 [ div16u::return#0 ] Allocated zp ZP_BYTE:80 [ divr16u::$1 ] Allocated zp ZP_BYTE:81 [ divr16u::$2 ] @@ -7105,17 +7160,17 @@ INITIAL ASM .label rem16u = $1c //SEG2 @begin bbegin: -//SEG3 [1] phi from @begin to @21 [phi:@begin->@21] -b21_from_bbegin: - jmp b21 -//SEG4 @21 -b21: +//SEG3 [1] phi from @begin to @22 [phi:@begin->@22] +b22_from_bbegin: + jmp b22 +//SEG4 @22 +b22: //SEG5 [2] call main param-assignment [ ] ( ) -//SEG6 [4] phi from @21 to main [phi:@21->main] -main_from_b21: +//SEG6 [4] phi from @22 to main [phi:@22->main] +main_from_b22: jsr main -//SEG7 [3] phi from @21 to @end [phi:@21->@end] -bend_from_b21: +//SEG7 [3] phi from @22 to @end [phi:@22->@end] +bend_from_b22: jmp bend //SEG8 @end bend: @@ -7768,32 +7823,32 @@ div16u: { .label divisor = $1a .label return_2 = $46 .label return_3 = $64 - //SEG219 [107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] ) -- vwuz1=vwuz2 + //SEG219 [107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] ) -- vwuz1=vwuz2 lda dividend sta divr16u.dividend lda dividend+1 sta divr16u.dividend+1 - //SEG220 [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) -- vwuz1=vwuz2 + //SEG220 [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) -- vwuz1=vwuz2 lda divisor sta divr16u.divisor lda divisor+1 sta divr16u.divisor+1 - //SEG221 [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + //SEG221 [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) //SEG222 [113] phi from div16u to divr16u [phi:div16u->divr16u] divr16u_from_div16u: jsr divr16u - //SEG223 [110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) -- vwuz1=vwuz2 - lda divr16u.return_1 - sta divr16u.return - lda divr16u.return_1+1 - sta divr16u.return+1 + //SEG223 [110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] ) -- vwuz1=vwuz2 + lda divr16u.return + sta divr16u.return_2 + lda divr16u.return+1 + sta divr16u.return_2+1 jmp b2 //SEG224 div16u::@2 b2: - //SEG225 [111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) -- vwuz1=vwuz2 - lda divr16u.return + //SEG225 [111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) -- vwuz1=vwuz2 + lda divr16u.return_2 sta return - lda divr16u.return+1 + lda divr16u.return_2+1 sta return+1 jmp breturn //SEG226 div16u::@return @@ -7805,13 +7860,13 @@ div16u: { divr16u: { .label _1 = $50 .label _2 = $51 - .label dividend = $1e - .label divisor = $4a - .label return = $4c .label rem = $1c + .label dividend = $1e .label quotient = $20 .label i = $22 - .label return_1 = $20 + .label return = $20 + .label divisor = $4a + .label return_2 = $4c //SEG229 [114] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: //SEG230 [114] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 @@ -7822,7 +7877,7 @@ divr16u: { sta quotient lda #>0 sta quotient+1 - //SEG232 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG232 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy //SEG233 [114] phi (word) divr16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 lda #<0 sta rem @@ -7832,46 +7887,46 @@ divr16u: { //SEG234 [114] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: //SEG235 [114] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG236 [114] phi (word) divr16u::quotient#3 = (word) divr16u::return#1 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG237 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG236 [114] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG237 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy //SEG238 [114] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 //SEG239 divr16u::@1 b1: - //SEG240 [115] (word) divr16u::rem#1 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG240 [115] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG241 [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) -- vbuz1=_hi_vwuz2 + //SEG241 [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuz1=_hi_vwuz2 lda dividend+1 sta _1 - //SEG242 [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + //SEG242 [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 lda #$80 and _1 sta _2 - //SEG243 [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vbuz1_eq_0_then_la1 + //SEG243 [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuz1_eq_0_then_la1 lda _2 beq b2_from_b1 jmp b4 //SEG244 divr16u::@4 b4: - //SEG245 [119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG245 [119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem //SEG246 [120] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - //SEG247 [120] phi (word) divr16u::rem#5 = (word) divr16u::rem#1 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG247 [120] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 //SEG248 divr16u::@2 b2: - //SEG249 [121] (word) divr16u::dividend#1 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG249 [121] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG250 [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG250 [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG251 [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG251 [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -7883,12 +7938,12 @@ divr16u: { jmp b5 //SEG252 divr16u::@5 b5: - //SEG253 [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG253 [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG254 [125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG254 [125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -7899,21 +7954,21 @@ divr16u: { //SEG255 [126] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - //SEG256 [126] phi (word) divr16u::return#1 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG256 [126] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy //SEG257 [126] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 //SEG258 divr16u::@3 b3: - //SEG259 [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG259 [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG260 [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG260 [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #$10 bne b1_from_b3 jmp breturn //SEG261 divr16u::@return breturn: - //SEG262 [129] return [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + //SEG262 [129] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) rts } //SEG263 test_8s @@ -8896,16 +8951,16 @@ Statement [102] (signed word) rem16s#1 ← - (signed word)(word) divr16u::rem#10 Statement [103] (signed word) div16s::return#0 ← - (signed word)(word) div16s::resultu#0 [ divr16u::rem#10 div16s::return#0 rem16s#1 ] ( main:2::test_16s:13::div16s:21 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 divr16u::rem#10 div16s::return#0 rem16s#1 ] ) always clobbers reg byte a Statement [104] (word~) div16s::divisoru#4 ← (word)(signed word) div16s::divisor#0 [ div16s::neg#3 div16s::dividendu#3 div16s::divisoru#4 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#3 div16s::dividendu#3 div16s::divisoru#4 divr16u::rem#10 ] ) always clobbers reg byte a Statement [105] (word~) div16s::dividendu#7 ← (word)(signed word) div16s::dividend#0 [ div16s::divisor#0 div16s::dividendu#7 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::divisor#0 div16s::dividendu#7 divr16u::rem#10 ] ) always clobbers reg byte a -Statement [107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] ) always clobbers reg byte a -Statement [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) always clobbers reg byte a -Statement [110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) always clobbers reg byte a -Statement [111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) always clobbers reg byte a -Statement [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) always clobbers reg byte a +Statement [107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a +Statement [110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] ) always clobbers reg byte a +Statement [111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) always clobbers reg byte a +Statement [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ divr16u::i#2 divr16u::i#1 ] -Statement [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) always clobbers reg byte a -Statement [119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) always clobbers reg byte a +Statement [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a +Statement [119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a Statement [133] (signed byte) test_8s::divisor#0 ← *((const signed byte[]) test_8s::divisors#0 + (byte) test_8s::i#10) [ line_cursor#1 test_8s::i#10 test_8s::dividend#0 test_8s::divisor#0 divr8u::rem#10 ] ( main:2::test_8s:11 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 test_8s::dividend#0 test_8s::divisor#0 divr8u::rem#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:82 [ test_8s::dividend#0 ] Statement [140] (byte*~) char_cursor#179 ← (byte*) line_cursor#1 [ line_cursor#1 test_8s::i#10 rem8s#3 test_8s::divisor#0 test_8s::res#0 print_sbyte::b#1 char_cursor#179 divr8u::rem#10 ] ( main:2::test_8s:11 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 rem8s#3 test_8s::divisor#0 test_8s::res#0 print_sbyte::b#1 char_cursor#179 divr8u::rem#10 ] ) always clobbers reg byte a @@ -8985,15 +9040,15 @@ Statement [102] (signed word) rem16s#1 ← - (signed word)(word) divr16u::rem#10 Statement [103] (signed word) div16s::return#0 ← - (signed word)(word) div16s::resultu#0 [ divr16u::rem#10 div16s::return#0 rem16s#1 ] ( main:2::test_16s:13::div16s:21 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 divr16u::rem#10 div16s::return#0 rem16s#1 ] ) always clobbers reg byte a Statement [104] (word~) div16s::divisoru#4 ← (word)(signed word) div16s::divisor#0 [ div16s::neg#3 div16s::dividendu#3 div16s::divisoru#4 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#3 div16s::dividendu#3 div16s::divisoru#4 divr16u::rem#10 ] ) always clobbers reg byte a Statement [105] (word~) div16s::dividendu#7 ← (word)(signed word) div16s::dividend#0 [ div16s::divisor#0 div16s::dividendu#7 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::divisor#0 div16s::dividendu#7 divr16u::rem#10 ] ) always clobbers reg byte a -Statement [107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] ) always clobbers reg byte a -Statement [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) always clobbers reg byte a -Statement [110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) always clobbers reg byte a -Statement [111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) always clobbers reg byte a -Statement [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) always clobbers reg byte a -Statement [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) always clobbers reg byte a -Statement [119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) always clobbers reg byte a +Statement [107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a +Statement [110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] ) always clobbers reg byte a +Statement [111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) always clobbers reg byte a +Statement [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a +Statement [119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a Statement [133] (signed byte) test_8s::divisor#0 ← *((const signed byte[]) test_8s::divisors#0 + (byte) test_8s::i#10) [ line_cursor#1 test_8s::i#10 test_8s::dividend#0 test_8s::divisor#0 divr8u::rem#10 ] ( main:2::test_8s:11 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 test_8s::dividend#0 test_8s::divisor#0 divr8u::rem#10 ] ) always clobbers reg byte a Statement [140] (byte*~) char_cursor#179 ← (byte*) line_cursor#1 [ line_cursor#1 test_8s::i#10 rem8s#3 test_8s::divisor#0 test_8s::res#0 print_sbyte::b#1 char_cursor#179 divr8u::rem#10 ] ( main:2::test_8s:11 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 rem8s#3 test_8s::divisor#0 test_8s::res#0 print_sbyte::b#1 char_cursor#179 divr8u::rem#10 ] ) always clobbers reg byte a Statement [163] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#5 [ char_cursor#17 print_sbyte::b#0 ] ( main:2::test_8s:11::print_sbyte:141 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 rem8s#3 test_8s::divisor#0 test_8s::res#0 divr8u::rem#10 char_cursor#17 print_sbyte::b#0 ] main:2::test_8s:11::print_sbyte:145 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 rem8s#3 test_8s::res#0 divr8u::rem#10 char_cursor#17 print_sbyte::b#0 ] main:2::test_8s:11::print_sbyte:149 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 rem8s#3 divr8u::rem#10 char_cursor#17 print_sbyte::b#0 ] main:2::test_8s:11::print_sbyte:153 [ divr16u::rem#10 line_cursor#1 test_8s::i#10 rem8s#3 divr8u::rem#10 char_cursor#17 print_sbyte::b#0 ] ) always clobbers reg byte a @@ -9036,9 +9091,9 @@ Potential registers zp ZP_BYTE:21 [ div16s::neg#4 div16s::neg#3 div16s::neg#2 ] Potential registers zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 ] : zp ZP_WORD:22 , Potential registers zp ZP_WORD:24 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] : zp ZP_WORD:24 , Potential registers zp ZP_WORD:26 [ div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 ] : zp ZP_WORD:26 , -Potential registers zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] : zp ZP_WORD:28 , -Potential registers zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] : zp ZP_WORD:30 , -Potential registers zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:32 , +Potential registers zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:28 , +Potential registers zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] : zp ZP_WORD:30 , +Potential registers zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:32 , Potential registers zp ZP_BYTE:34 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:34 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:35 [ test_8s::i#10 test_8s::i#1 ] : zp ZP_BYTE:35 , reg byte x , Potential registers zp ZP_BYTE:36 [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] : zp ZP_BYTE:36 , reg byte x , @@ -9069,7 +9124,7 @@ Potential registers zp ZP_WORD:68 [ div16s::$7 ] : zp ZP_WORD:68 , Potential registers zp ZP_WORD:70 [ div16u::return#2 ] : zp ZP_WORD:70 , Potential registers zp ZP_WORD:72 [ div16s::resultu#0 ] : zp ZP_WORD:72 , Potential registers zp ZP_WORD:74 [ divr16u::divisor#0 ] : zp ZP_WORD:74 , -Potential registers zp ZP_WORD:76 [ divr16u::return#0 ] : zp ZP_WORD:76 , +Potential registers zp ZP_WORD:76 [ divr16u::return#2 ] : zp ZP_WORD:76 , Potential registers zp ZP_WORD:78 [ div16u::return#0 ] : zp ZP_WORD:78 , Potential registers zp ZP_BYTE:80 [ divr16u::$1 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:81 [ divr16u::$2 ] : zp ZP_BYTE:81 , reg byte a , reg byte x , reg byte y , @@ -9097,7 +9152,7 @@ Potential registers zp ZP_BYTE:106 [ div8u::return#3 ] : zp ZP_BYTE:106 , reg by Potential registers zp ZP_BYTE:107 [ test_8u::res#0 ] : zp ZP_BYTE:107 , reg byte x , REGISTER UPLIFT SCOPES -Uplift Scope [divr16u] 920.95: zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] 338.75: zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] 202: zp ZP_BYTE:80 [ divr16u::$1 ] 202: zp ZP_BYTE:81 [ divr16u::$2 ] 167.04: zp ZP_BYTE:34 [ divr16u::i#2 divr16u::i#1 ] 70.15: zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] 12: zp ZP_WORD:74 [ divr16u::divisor#0 ] 4: zp ZP_WORD:76 [ divr16u::return#0 ] +Uplift Scope [divr16u] 920.95: zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 338.75: zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 202: zp ZP_BYTE:80 [ divr16u::$1 ] 202: zp ZP_BYTE:81 [ divr16u::$2 ] 167.04: zp ZP_BYTE:34 [ divr16u::i#2 divr16u::i#1 ] 70.15: zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] 12: zp ZP_WORD:74 [ divr16u::divisor#0 ] 4: zp ZP_WORD:76 [ divr16u::return#2 ] Uplift Scope [divr8u] 946.2: zp ZP_BYTE:44 [ divr8u::rem#4 rem8u#31 divr8u::rem#10 rem8u#36 divr8u::rem#5 divr8u::rem#1 divr8u::rem#2 divr8u::rem#3 ] 342.36: zp ZP_BYTE:46 [ divr8u::quotient#3 divr8u::return#1 divr8u::quotient#1 divr8u::quotient#2 ] 202: zp ZP_BYTE:95 [ divr8u::$1 ] 168.33: zp ZP_BYTE:47 [ divr8u::i#2 divr8u::i#1 ] 77.42: zp ZP_BYTE:45 [ divr8u::dividend#2 divr8u::dividend#0 divr8u::dividend#1 ] 12.75: zp ZP_BYTE:92 [ divr8u::divisor#0 ] 4: zp ZP_BYTE:93 [ divr8u::return#0 ] Uplift Scope [] 294.4: zp ZP_WORD:13 [ char_cursor#80 char_cursor#133 char_cursor#130 char_cursor#132 char_cursor#128 char_cursor#129 char_cursor#155 char_cursor#126 char_cursor#17 char_cursor#162 char_cursor#135 char_cursor#131 char_cursor#1 char_cursor#179 char_cursor#185 ] 254.87: zp ZP_WORD:5 [ line_cursor#20 line_cursor#39 line_cursor#1 line_cursor#41 ] 117.08: zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 ] 117.08: zp ZP_BYTE:36 [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] Uplift Scope [print_str] 305.5: zp ZP_WORD:15 [ print_str::str#13 print_str::str#15 print_str::str#0 ] @@ -9118,7 +9173,7 @@ Uplift Scope [print_char] 14: zp ZP_BYTE:12 [ print_char::ch#4 print_char::ch#2 Uplift Scope [print_ln] Uplift Scope [main] -Uplifting [divr16u] best 45080 combination zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] zp ZP_WORD:74 [ divr16u::divisor#0 ] zp ZP_WORD:76 [ divr16u::return#0 ] +Uplifting [divr16u] best 45080 combination zp ZP_WORD:28 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:74 [ divr16u::divisor#0 ] zp ZP_WORD:76 [ divr16u::return#2 ] Uplifting [divr8u] best 43271 combination zp ZP_BYTE:44 [ divr8u::rem#4 rem8u#31 divr8u::rem#10 rem8u#36 divr8u::rem#5 divr8u::rem#1 divr8u::rem#2 divr8u::rem#3 ] reg byte x [ divr8u::quotient#3 divr8u::return#1 divr8u::quotient#1 divr8u::quotient#2 ] reg byte a [ divr8u::$1 ] reg byte y [ divr8u::i#2 divr8u::i#1 ] zp ZP_BYTE:45 [ divr8u::dividend#2 divr8u::dividend#0 divr8u::dividend#1 ] zp ZP_BYTE:92 [ divr8u::divisor#0 ] reg byte x [ divr8u::return#0 ] Uplifting [] best 43227 combination zp ZP_WORD:13 [ char_cursor#80 char_cursor#133 char_cursor#130 char_cursor#132 char_cursor#128 char_cursor#129 char_cursor#155 char_cursor#126 char_cursor#17 char_cursor#162 char_cursor#135 char_cursor#131 char_cursor#1 char_cursor#179 char_cursor#185 ] zp ZP_WORD:5 [ line_cursor#20 line_cursor#39 line_cursor#1 line_cursor#41 ] zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 ] reg byte x [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] Uplifting [print_str] best 43227 combination zp ZP_WORD:15 [ print_str::str#13 print_str::str#15 print_str::str#0 ] @@ -9186,31 +9241,31 @@ Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ div16s::d Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 ] ] with [ zp ZP_WORD:58 [ div16s::divisor#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 div16s::divisor#0 ] ] with [ zp ZP_WORD:68 [ div16s::$7 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 ] ] with [ zp ZP_WORD:60 [ div16s::return#3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:76 [ divr16u::return#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:76 [ divr16u::return#2 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:70 [ div16u::return#2 ] ] with [ zp ZP_WORD:78 [ div16u::return#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:100 [ div16u::return#3 ] ] with [ zp ZP_WORD:102 [ test_16u::res#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#5 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_sword::w#4 print_sword::w#0 print_word::w#5 print_word::w#7 print_word::w#1 print_word::w#2 print_word::w#3 print_word::w#4 test_16s::dividend#0 ] ] with [ zp ZP_WORD:96 [ test_16u::dividend#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_BYTE:11 [ print_byte::b#7 print_byte::b#9 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#6 print_sbyte::b#6 print_sbyte::b#5 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#3 print_sbyte::b#4 print_sbyte::b#0 test_8u::dividend#0 ] ] with [ zp ZP_BYTE:82 [ test_8s::dividend#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:17 [ div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 ] ] with [ zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:17 [ div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 ] ] with [ zp ZP_WORD:30 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 div16s::divisor#0 div16s::$7 ] ] with [ zp ZP_WORD:74 [ divr16u::divisor#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 div16s::divisor#0 div16s::$7 divr16u::divisor#0 ] ] with [ zp ZP_WORD:98 [ test_16u::divisor#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 ] ] with [ zp ZP_WORD:62 [ test_16s::res#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 ] ] with [ zp ZP_WORD:70 [ div16u::return#2 div16u::return#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 ] ] with [ zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#0 ] ] with [ zp ZP_WORD:100 [ div16u::return#3 test_16u::res#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 ] ] with [ zp ZP_WORD:32 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:100 [ div16u::return#3 test_16u::res#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:2 [ test_16s::i#10 test_16s::i#1 ] ] with [ zp ZP_BYTE:35 [ test_8s::i#10 test_8s::i#1 ] ] Coalescing zero page register [ zp ZP_BYTE:2 [ test_16s::i#10 test_16s::i#1 test_8s::i#10 test_8s::i#1 ] ] with [ zp ZP_BYTE:48 [ test_16u::i#10 test_16u::i#1 ] ] Coalescing zero page register [ zp ZP_BYTE:2 [ test_16s::i#10 test_16s::i#1 test_8s::i#10 test_8s::i#1 test_16u::i#10 test_16u::i#1 ] ] with [ zp ZP_BYTE:49 [ test_8u::i#10 test_8u::i#1 ] ] -Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 ] ] with [ zp ZP_WORD:17 [ div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] ] -Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 ] ] with [ zp ZP_WORD:50 [ print_cls::sc#2 print_cls::sc#1 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 ] ] with [ zp ZP_WORD:17 [ div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] with [ zp ZP_WORD:50 [ print_cls::sc#2 print_cls::sc#1 ] ] Coalescing zero page register [ zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#5 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_sword::w#4 print_sword::w#0 print_word::w#5 print_word::w#7 print_word::w#1 print_word::w#2 print_word::w#3 print_word::w#4 test_16s::dividend#0 test_16u::dividend#0 ] ] with [ zp ZP_WORD:15 [ print_str::str#13 print_str::str#15 print_str::str#0 ] ] Coalescing zero page register [ zp ZP_BYTE:40 [ div8s::neg#4 div8s::neg#3 div8s::neg#2 ] ] with [ zp ZP_BYTE:87 [ test_8s::res#0 ] ] Coalescing zero page register [ zp ZP_BYTE:40 [ div8s::neg#4 div8s::neg#3 div8s::neg#2 test_8s::res#0 ] ] with [ zp ZP_BYTE:105 [ test_8u::divisor#0 ] ] Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:9 [ print_byte::b#7 print_byte::b#9 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#6 print_sbyte::b#6 print_sbyte::b#5 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#3 print_sbyte::b#4 print_sbyte::b#0 test_8u::dividend#0 test_8s::dividend#0 ] Allocated (was zp ZP_WORD:13) zp ZP_WORD:10 [ char_cursor#80 char_cursor#133 char_cursor#130 char_cursor#132 char_cursor#128 char_cursor#129 char_cursor#155 char_cursor#126 char_cursor#17 char_cursor#162 char_cursor#135 char_cursor#131 char_cursor#1 char_cursor#179 char_cursor#185 ] Allocated (was zp ZP_WORD:19) zp ZP_WORD:12 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 div16s::divisor#0 div16s::$7 divr16u::divisor#0 test_16u::divisor#0 ] -Allocated (was zp ZP_WORD:22) zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#0 div16u::return#3 test_16u::res#0 ] -Allocated (was zp ZP_WORD:28) zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] +Allocated (was zp ZP_WORD:22) zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#3 test_16u::res#0 ] +Allocated (was zp ZP_WORD:28) zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] Allocated (was zp ZP_BYTE:40) zp ZP_BYTE:18 [ div8s::neg#4 div8s::neg#3 div8s::neg#2 test_8s::res#0 test_8u::divisor#0 ] Allocated (was zp ZP_BYTE:44) zp ZP_BYTE:19 [ divr8u::rem#4 rem8u#31 divr8u::rem#10 rem8u#36 divr8u::rem#5 divr8u::rem#1 divr8u::rem#2 divr8u::rem#3 ] Allocated (was zp ZP_BYTE:45) zp ZP_BYTE:20 [ divr8u::dividend#2 divr8u::dividend#0 divr8u::dividend#1 ] @@ -9232,17 +9287,17 @@ ASSEMBLER BEFORE OPTIMIZATION .label rem16u = $10 //SEG2 @begin bbegin: -//SEG3 [1] phi from @begin to @21 [phi:@begin->@21] -b21_from_bbegin: - jmp b21 -//SEG4 @21 -b21: +//SEG3 [1] phi from @begin to @22 [phi:@begin->@22] +b22_from_bbegin: + jmp b22 +//SEG4 @22 +b22: //SEG5 [2] call main param-assignment [ ] ( ) -//SEG6 [4] phi from @21 to main [phi:@21->main] -main_from_b21: +//SEG6 [4] phi from @22 to main [phi:@22->main] +main_from_b22: jsr main -//SEG7 [3] phi from @21 to @end [phi:@21->@end] -bend_from_b21: +//SEG7 [3] phi from @22 to @end [phi:@22->@end] +bend_from_b22: jmp bend //SEG8 @end bend: @@ -9841,21 +9896,21 @@ div16u: { .label return = $e .label dividend = 3 .label divisor = $c - //SEG219 [107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] ) - // (word) divr16u::dividend#0 = (word) div16u::dividend#2 // register copy zp ZP_WORD:3 - //SEG220 [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) + //SEG219 [107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] ) + // (word) divr16u::dividend#1 = (word) div16u::dividend#2 // register copy zp ZP_WORD:3 + //SEG220 [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) // (word) divr16u::divisor#0 = (word) div16u::divisor#2 // register copy zp ZP_WORD:12 - //SEG221 [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + //SEG221 [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) //SEG222 [113] phi from div16u to divr16u [phi:div16u->divr16u] divr16u_from_div16u: jsr divr16u - //SEG223 [110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) - // (word) divr16u::return#0 = (word) divr16u::return#1 // register copy zp ZP_WORD:14 + //SEG223 [110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] ) + // (word) divr16u::return#2 = (word) divr16u::return#0 // register copy zp ZP_WORD:14 jmp b2 //SEG224 div16u::@2 b2: - //SEG225 [111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) - // (word) div16u::return#0 = (word) divr16u::return#0 // register copy zp ZP_WORD:14 + //SEG225 [111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) + // (word) div16u::return#0 = (word) divr16u::return#2 // register copy zp ZP_WORD:14 jmp breturn //SEG226 div16u::@return breturn: @@ -9864,11 +9919,11 @@ div16u: { } //SEG228 divr16u divr16u: { - .label dividend = 3 - .label divisor = $c - .label return = $e .label rem = $10 + .label dividend = 3 .label quotient = $e + .label return = $e + .label divisor = $c //SEG229 [114] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: //SEG230 [114] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 @@ -9878,7 +9933,7 @@ divr16u: { sta quotient lda #>0 sta quotient+1 - //SEG232 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG232 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy //SEG233 [114] phi (word) divr16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 lda #<0 sta rem @@ -9888,43 +9943,43 @@ divr16u: { //SEG234 [114] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: //SEG235 [114] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG236 [114] phi (word) divr16u::quotient#3 = (word) divr16u::return#1 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG237 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG236 [114] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG237 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy //SEG238 [114] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 //SEG239 divr16u::@1 b1: - //SEG240 [115] (word) divr16u::rem#1 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG240 [115] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG241 [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 + //SEG241 [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 lda dividend+1 - //SEG242 [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 + //SEG242 [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 and #$80 - //SEG243 [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vbuaa_eq_0_then_la1 + //SEG243 [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b2_from_b1 jmp b4 //SEG244 divr16u::@4 b4: - //SEG245 [119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG245 [119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem //SEG246 [120] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - //SEG247 [120] phi (word) divr16u::rem#5 = (word) divr16u::rem#1 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG247 [120] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 //SEG248 divr16u::@2 b2: - //SEG249 [121] (word) divr16u::dividend#1 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG249 [121] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG250 [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG250 [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG251 [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG251 [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -9936,12 +9991,12 @@ divr16u: { jmp b5 //SEG252 divr16u::@5 b5: - //SEG253 [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG253 [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG254 [125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG254 [125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -9952,20 +10007,20 @@ divr16u: { //SEG255 [126] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - //SEG256 [126] phi (word) divr16u::return#1 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG256 [126] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy //SEG257 [126] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 //SEG258 divr16u::@3 b3: - //SEG259 [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG259 [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG260 [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG260 [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b3 jmp breturn //SEG261 divr16u::@return breturn: - //SEG262 [129] return [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + //SEG262 [129] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) rts } //SEG263 test_8s @@ -10819,7 +10874,7 @@ print_cls: { } ASSEMBLER OPTIMIZATIONS -Removing instruction jmp b21 +Removing instruction jmp b22 Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp b2 @@ -10961,9 +11016,9 @@ Replacing label b1_from_b11 with b1 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Removing instruction bbegin: -Removing instruction b21_from_bbegin: -Removing instruction main_from_b21: -Removing instruction bend_from_b21: +Removing instruction b22_from_bbegin: +Removing instruction main_from_b22: +Removing instruction bend_from_b22: Removing instruction b1_from_main: Removing instruction test_8u_from_b1: Removing instruction b2_from_b1: @@ -11039,7 +11094,7 @@ Removing instruction b10_from_b9: Removing instruction print_ln_from_b10: Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction b21: +Removing instruction b22: Removing instruction bend: Removing instruction print_cls_from_main: Removing instruction b1: @@ -11181,7 +11236,7 @@ Succesful ASM optimization Pass5UnreachableCodeElimination Fixing long branch [87] bne b1 to beq FINAL SYMBOL TABLE -(label) @21 +(label) @22 (label) @begin (label) @end (byte*) SCREEN @@ -11314,8 +11369,8 @@ FINAL SYMBOL TABLE (label) divr16u::@5 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp ZP_WORD:3 1.3333333333333333 -(word) divr16u::dividend#1 dividend zp ZP_WORD:3 25.25 +(word) divr16u::dividend#0 dividend zp ZP_WORD:3 25.25 +(word) divr16u::dividend#1 dividend zp ZP_WORD:3 1.3333333333333333 (word) divr16u::dividend#2 dividend zp ZP_WORD:3 43.57142857142858 (word) divr16u::divisor (word) divr16u::divisor#0 divisor zp ZP_WORD:12 12.0 @@ -11327,15 +11382,15 @@ FINAL SYMBOL TABLE (word) divr16u::quotient#2 quotient zp ZP_WORD:14 101.0 (word) divr16u::quotient#3 quotient zp ZP_WORD:14 25.25 (word) divr16u::rem -(word) divr16u::rem#1 rem zp ZP_WORD:16 75.75 +(word) divr16u::rem#0 rem zp ZP_WORD:16 75.75 +(word) divr16u::rem#1 rem zp ZP_WORD:16 202.0 (word) divr16u::rem#10 rem zp ZP_WORD:16 3.8023255813953494 (word) divr16u::rem#2 rem zp ZP_WORD:16 202.0 -(word) divr16u::rem#3 rem zp ZP_WORD:16 202.0 (word) divr16u::rem#4 rem zp ZP_WORD:16 202.0 (word) divr16u::rem#5 rem zp ZP_WORD:16 101.0 (word) divr16u::return -(word) divr16u::return#0 return zp ZP_WORD:14 4.0 -(word) divr16u::return#1 return zp ZP_WORD:14 61.0 +(word) divr16u::return#0 return zp ZP_WORD:14 61.0 +(word) divr16u::return#2 return zp ZP_WORD:14 4.0 (byte()) divr8u((byte) divr8u::dividend , (byte) divr8u::divisor , (byte) divr8u::rem) (byte~) divr8u::$1 reg byte a 202.0 (label) divr8u::@1 @@ -11584,7 +11639,7 @@ FINAL SYMBOL TABLE (const string) test_8u::str2 str2 = (string) " @" zp ZP_BYTE:2 [ test_16s::i#10 test_16s::i#1 test_8s::i#10 test_8s::i#1 test_16u::i#10 test_16u::i#1 test_8u::i#10 test_8u::i#1 ] -zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:5 [ line_cursor#20 line_cursor#39 line_cursor#1 line_cursor#41 ] zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#5 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_sword::w#4 print_sword::w#0 print_word::w#5 print_word::w#7 print_word::w#1 print_word::w#2 print_word::w#3 print_word::w#4 test_16s::dividend#0 test_16u::dividend#0 print_str::str#13 print_str::str#15 print_str::str#0 ] zp ZP_BYTE:9 [ print_byte::b#7 print_byte::b#9 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#6 print_sbyte::b#6 print_sbyte::b#5 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#3 print_sbyte::b#4 print_sbyte::b#0 test_8u::dividend#0 test_8s::dividend#0 ] @@ -11592,8 +11647,8 @@ reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] zp ZP_WORD:10 [ char_cursor#80 char_cursor#133 char_cursor#130 char_cursor#132 char_cursor#128 char_cursor#129 char_cursor#155 char_cursor#126 char_cursor#17 char_cursor#162 char_cursor#135 char_cursor#131 char_cursor#1 char_cursor#179 char_cursor#185 ] zp ZP_WORD:12 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 div16s::divisor#0 div16s::$7 divr16u::divisor#0 test_16u::divisor#0 ] reg byte y [ div16s::neg#4 div16s::neg#3 div16s::neg#2 ] -zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#0 div16u::return#3 test_16u::res#0 ] -zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] +zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#3 test_16u::res#0 ] +zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte x [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] reg byte y [ div8s::dividendu#3 div8s::dividendu#7 div8s::dividendu#8 ] @@ -11642,12 +11697,12 @@ Score: 33674 .label rem8u = $13 .label rem16u = $10 //SEG2 @begin -//SEG3 [1] phi from @begin to @21 [phi:@begin->@21] -//SEG4 @21 +//SEG3 [1] phi from @begin to @22 [phi:@begin->@22] +//SEG4 @22 //SEG5 [2] call main param-assignment [ ] ( ) -//SEG6 [4] phi from @21 to main [phi:@21->main] +//SEG6 [4] phi from @22 to main [phi:@22->main] jsr main -//SEG7 [3] phi from @21 to @end [phi:@21->@end] +//SEG7 [3] phi from @22 to @end [phi:@22->@end] //SEG8 @end //SEG9 main main: { @@ -12130,29 +12185,29 @@ div16u: { .label return = $e .label dividend = 3 .label divisor = $c - //SEG219 [107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] ) - // (word) divr16u::dividend#0 = (word) div16u::dividend#2 // register copy zp ZP_WORD:3 - //SEG220 [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] ) + //SEG219 [107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] ) + // (word) divr16u::dividend#1 = (word) div16u::dividend#2 // register copy zp ZP_WORD:3 + //SEG220 [108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] ) // (word) divr16u::divisor#0 = (word) div16u::divisor#2 // register copy zp ZP_WORD:12 - //SEG221 [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + //SEG221 [109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) //SEG222 [113] phi from div16u to divr16u [phi:div16u->divr16u] jsr divr16u - //SEG223 [110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) - // (word) divr16u::return#0 = (word) divr16u::return#1 // register copy zp ZP_WORD:14 + //SEG223 [110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] ) + // (word) divr16u::return#2 = (word) divr16u::return#0 // register copy zp ZP_WORD:14 //SEG224 div16u::@2 - //SEG225 [111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) - // (word) div16u::return#0 = (word) divr16u::return#0 // register copy zp ZP_WORD:14 + //SEG225 [111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) + // (word) div16u::return#0 = (word) divr16u::return#2 // register copy zp ZP_WORD:14 //SEG226 div16u::@return //SEG227 [112] return [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] ) rts } //SEG228 divr16u divr16u: { - .label dividend = 3 - .label divisor = $c - .label return = $e .label rem = $10 + .label dividend = 3 .label quotient = $e + .label return = $e + .label divisor = $c //SEG229 [114] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] //SEG230 [114] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 @@ -12160,43 +12215,43 @@ divr16u: { txa sta quotient sta quotient+1 - //SEG232 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG232 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy //SEG233 [114] phi (word) divr16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 sta rem sta rem+1 //SEG234 [114] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] //SEG235 [114] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG236 [114] phi (word) divr16u::quotient#3 = (word) divr16u::return#1 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG237 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG236 [114] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG237 [114] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy //SEG238 [114] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy //SEG239 divr16u::@1 b1: - //SEG240 [115] (word) divr16u::rem#1 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG240 [115] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG241 [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 + //SEG241 [116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 lda dividend+1 - //SEG242 [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 + //SEG242 [117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 and #$80 - //SEG243 [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vbuaa_eq_0_then_la1 + //SEG243 [118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b2 //SEG244 divr16u::@4 - //SEG245 [119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG245 [119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem //SEG246 [120] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - //SEG247 [120] phi (word) divr16u::rem#5 = (word) divr16u::rem#1 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG247 [120] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy //SEG248 divr16u::@2 b2: - //SEG249 [121] (word) divr16u::dividend#1 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG249 [121] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG250 [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG250 [122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG251 [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG251 [123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3 @@ -12206,12 +12261,12 @@ divr16u: { bcc b3 !: //SEG252 divr16u::@5 - //SEG253 [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG253 [124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG254 [125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG254 [125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -12220,17 +12275,17 @@ divr16u: { sbc divisor+1 sta rem+1 //SEG255 [126] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - //SEG256 [126] phi (word) divr16u::return#1 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG256 [126] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy //SEG257 [126] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy //SEG258 divr16u::@3 b3: - //SEG259 [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG259 [127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG260 [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG260 [128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1 //SEG261 divr16u::@return - //SEG262 [129] return [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] ) + //SEG262 [129] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] ) rts } //SEG263 test_8s diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-division.sym b/src/test/java/dk/camelot64/kickc/test/ref/test-division.sym index 69e88804f..fc146e6a8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-division.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.sym @@ -1,4 +1,4 @@ -(label) @21 +(label) @22 (label) @begin (label) @end (byte*) SCREEN @@ -131,8 +131,8 @@ (label) divr16u::@5 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp ZP_WORD:3 1.3333333333333333 -(word) divr16u::dividend#1 dividend zp ZP_WORD:3 25.25 +(word) divr16u::dividend#0 dividend zp ZP_WORD:3 25.25 +(word) divr16u::dividend#1 dividend zp ZP_WORD:3 1.3333333333333333 (word) divr16u::dividend#2 dividend zp ZP_WORD:3 43.57142857142858 (word) divr16u::divisor (word) divr16u::divisor#0 divisor zp ZP_WORD:12 12.0 @@ -144,15 +144,15 @@ (word) divr16u::quotient#2 quotient zp ZP_WORD:14 101.0 (word) divr16u::quotient#3 quotient zp ZP_WORD:14 25.25 (word) divr16u::rem -(word) divr16u::rem#1 rem zp ZP_WORD:16 75.75 +(word) divr16u::rem#0 rem zp ZP_WORD:16 75.75 +(word) divr16u::rem#1 rem zp ZP_WORD:16 202.0 (word) divr16u::rem#10 rem zp ZP_WORD:16 3.8023255813953494 (word) divr16u::rem#2 rem zp ZP_WORD:16 202.0 -(word) divr16u::rem#3 rem zp ZP_WORD:16 202.0 (word) divr16u::rem#4 rem zp ZP_WORD:16 202.0 (word) divr16u::rem#5 rem zp ZP_WORD:16 101.0 (word) divr16u::return -(word) divr16u::return#0 return zp ZP_WORD:14 4.0 -(word) divr16u::return#1 return zp ZP_WORD:14 61.0 +(word) divr16u::return#0 return zp ZP_WORD:14 61.0 +(word) divr16u::return#2 return zp ZP_WORD:14 4.0 (byte()) divr8u((byte) divr8u::dividend , (byte) divr8u::divisor , (byte) divr8u::rem) (byte~) divr8u::$1 reg byte a 202.0 (label) divr8u::@1 @@ -401,7 +401,7 @@ (const string) test_8u::str2 str2 = (string) " @" zp ZP_BYTE:2 [ test_16s::i#10 test_16s::i#1 test_8s::i#10 test_8s::i#1 test_16u::i#10 test_16u::i#1 test_8u::i#10 test_8u::i#1 ] -zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:5 [ line_cursor#20 line_cursor#39 line_cursor#1 line_cursor#41 ] zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#5 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_sword::w#4 print_sword::w#0 print_word::w#5 print_word::w#7 print_word::w#1 print_word::w#2 print_word::w#3 print_word::w#4 test_16s::dividend#0 test_16u::dividend#0 print_str::str#13 print_str::str#15 print_str::str#0 ] zp ZP_BYTE:9 [ print_byte::b#7 print_byte::b#9 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#6 print_sbyte::b#6 print_sbyte::b#5 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#3 print_sbyte::b#4 print_sbyte::b#0 test_8u::dividend#0 test_8s::dividend#0 ] @@ -409,8 +409,8 @@ reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] zp ZP_WORD:10 [ char_cursor#80 char_cursor#133 char_cursor#130 char_cursor#132 char_cursor#128 char_cursor#129 char_cursor#155 char_cursor#126 char_cursor#17 char_cursor#162 char_cursor#135 char_cursor#131 char_cursor#1 char_cursor#179 char_cursor#185 ] zp ZP_WORD:12 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 div16s::divisor#0 div16s::$7 divr16u::divisor#0 test_16u::divisor#0 ] reg byte y [ div16s::neg#4 div16s::neg#3 div16s::neg#2 ] -zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#0 div16u::return#3 test_16u::res#0 ] -zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ] +zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#3 test_16u::res#0 ] +zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte x [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] reg byte y [ div8s::dividendu#3 div8s::dividendu#7 div8s::dividendu#8 ]