diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 4e4d6db3e..df30ca8d1 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -44,10 +44,9 @@ public class TestPrograms { @Test public void testDivision() throws IOException, URISyntaxException { - compileAndCompare("division"); + compileAndCompare("test-division"); } - @Test public void testVarRegister() throws IOException, URISyntaxException { compileAndCompare("var-register"); 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 a7ae3133e..19093780f 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/division.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/division.kc @@ -1,51 +1,5 @@ -import "print.kc" +// Binary division implementation -const byte* NULL = 0; - -word rem16u = 0; - -void main() { - print_cls(); - test_8u(); - test_16u(); -} - -void test_16u() { - word[] dividends = { $ffff, $ffff, $ffff, $ffff, $ffff, $ffff}; - word[] divisors = { 5, 7, 11, 13, 17, 19 }; - for( byte i=0;i!=12;i=i+2) { - word dividend = dividends[i]; - word divisor = divisors[i]; - word res = div16u(dividend, divisor); - print_word(dividend); - print_str(" / @"); - print_word(divisor); - print_str(" = @"); - print_word(res); - print_str(" @"); - print_word(rem16u); - print_ln(); - } -} - -void test_8u() { - byte* rem = $ff; - byte[] dividends = { 255, 255, 255, 255, 255, 255}; - byte[] divisors = { 5, 7, 11, 13, 17, 19 }; - for( byte i: 0..5 ) { - byte dividend = dividends[i]; - byte divisor = divisors[i]; - byte res = div8u(dividend, divisor, rem); - print_byte(dividend); - print_str(" / @"); - print_byte(divisor); - print_str(" = @"); - print_byte(res); - print_str(" @"); - print_byte(*rem); - print_ln(); - } -} // Performs division on two 8 bit unsigned bytes // Returns dividend/divisor. @@ -70,10 +24,11 @@ byte div8u(byte dividend, byte divisor, byte* remainder) { return quotient; } +word rem16u = 0; // Performs division on two 16 bit unsigned bytes // Returns dividend/divisor. -// If remainder is non-null it will be set to the remainder. +// The remainder will be set into the global variable rem16u // Implemented using simple binary division word div16u(word dividend, word divisor) { word rem = 0; diff --git a/src/test/java/dk/camelot64/kickc/test/kc/test-division.kc b/src/test/java/dk/camelot64/kickc/test/kc/test-division.kc new file mode 100644 index 000000000..1b71ea269 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/kc/test-division.kc @@ -0,0 +1,46 @@ +// Test the binary division library +import "print.kc" +import "division.kc" + +void main() { + print_cls(); + test_8u(); + test_16u(); +} + +void test_16u() { + word[] dividends = { $ffff, $ffff, $ffff, $ffff, $ffff, $ffff}; + word[] divisors = { 5, 7, 11, 13, 17, 19 }; + for( byte i=0;i!=12;i=i+2) { + word dividend = dividends[i]; + word divisor = divisors[i]; + word res = div16u(dividend, divisor); + print_word(dividend); + print_str(" / @"); + print_word(divisor); + print_str(" = @"); + print_word(res); + print_str(" @"); + print_word(rem16u); + print_ln(); + } +} + +void test_8u() { + byte* rem = $ff; + byte[] dividends = { 255, 255, 255, 255, 255, 255}; + byte[] divisors = { 5, 7, 11, 13, 17, 19 }; + for( byte i: 0..5 ) { + byte dividend = dividends[i]; + byte divisor = divisors[i]; + byte res = div8u(dividend, divisor, rem); + print_byte(dividend); + print_str(" / @"); + print_byte(divisor); + print_str(" = @"); + print_byte(res); + print_str(" @"); + print_byte(*rem); + print_ln(); + } +} diff --git a/src/test/java/dk/camelot64/kickc/test/kc/test-multiply.kc b/src/test/java/dk/camelot64/kickc/test/kc/test-multiply.kc index 02e5ffb54..3f9282990 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/test-multiply.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/test-multiply.kc @@ -1,7 +1,4 @@ -// Implementation of the Seriously Fast Multiplication -// See http://codebase64.org/doku.php?id=base:seriously_fast_multiplication -// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 - +// Test the fast multiplication library import "print.kc" import "multiply.kc" diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.asm b/src/test/java/dk/camelot64/kickc/test/ref/test-division.asm similarity index 100% rename from src/test/java/dk/camelot64/kickc/test/ref/division.asm rename to src/test/java/dk/camelot64/kickc/test/ref/test-division.asm index 123c01ee1..d4a4203da 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/division.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.asm @@ -162,11 +162,11 @@ print_str: { jmp b1 } div16u: { - .label dividend = $d - .label divisor = $16 - .label return = $f .label rem = $b + .label dividend = $d .label quotient = $f + .label return = $f + .label divisor = $16 ldx #0 txa sta quotient @@ -284,9 +284,9 @@ test_8u: { } div8u: { .label dividend = $12 - .label divisor = $19 .label quotient = $13 .label return = $13 + .label divisor = $19 ldx #0 txa sta quotient diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.cfg b/src/test/java/dk/camelot64/kickc/test/ref/test-division.cfg similarity index 94% rename from src/test/java/dk/camelot64/kickc/test/ref/division.cfg rename to src/test/java/dk/camelot64/kickc/test/ref/test-division.cfg index 0643f7594..12d7f5966 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/division.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.cfg @@ -30,13 +30,13 @@ test_16u::@1: scope:[test_16u] from test_16u test_16u::@11 [12] (byte) test_16u::i#10 ← phi( test_16u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_16u::@11/(byte) test_16u::i#1 ) [ test_16u::i#10 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 line_cursor#1 ] ) [13] (word) test_16u::dividend#0 ← *((const word[]) test_16u::dividends#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ) [14] (word) test_16u::divisor#0 ← *((const word[]) test_16u::divisors#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ) - [15] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ) - [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ) - [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ) - [18] (word) div16u::return#0 ← (word) div16u::return#1 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) + [15] (word) div16u::dividend#1 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ) + [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ) + [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) + [18] (word) div16u::return#2 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ) to:test_16u::@3 test_16u::@3: scope:[test_16u] from test_16u::@1 - [19] (word) test_16u::res#0 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) + [19] (word) test_16u::res#0 ← (word) div16u::return#2 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) [20] (word) print_word::w#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ) [21] (byte*~) char_cursor#84 ← (byte*) line_cursor#1 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ) [22] call print_word param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 line_cursor#1 char_cursor#11 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 line_cursor#1 char_cursor#11 ] ) @@ -141,12 +141,12 @@ print_str::@2: scope:[print_str] from print_str::@1 [69] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::test_16u:9::print_str:24 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_16u:9::print_str:28 [ test_16u::i#10 div16u::rem#8 test_16u::res#0 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_16u:9::print_str:32 [ test_16u::i#10 div16u::rem#8 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_8u:7::print_str:99 [ line_cursor#25 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_str::str#0 char_cursor#1 ] main:2::test_8u:7::print_str:103 [ line_cursor#25 test_8u::i#10 test_8u::res#0 print_str::str#0 char_cursor#1 ] main:2::test_8u:7::print_str:107 [ line_cursor#25 test_8u::i#10 print_str::str#0 char_cursor#1 ] ) to:print_str::@1 div16u: scope:[div16u] from test_16u::@1 - [70] phi() [ div16u::dividend#0 div16u::divisor#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::dividend#0 div16u::divisor#0 ] ) + [70] phi() [ div16u::dividend#1 div16u::divisor#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::dividend#1 div16u::divisor#0 ] ) to:div16u::@1 div16u::@1: scope:[div16u] from div16u div16u::@3 [71] (byte) div16u::i#2 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(byte) div16u::i#1 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) - [71] (word) div16u::quotient#3 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(word) div16u::return#1 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) - [71] (word) div16u::dividend#2 ← phi( div16u/(word) div16u::dividend#0 div16u::@3/(word) div16u::dividend#1 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) + [71] (word) div16u::quotient#3 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(word) div16u::return#0 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) + [71] (word) div16u::dividend#2 ← phi( div16u/(word) div16u::dividend#1 div16u::@3/(word) div16u::dividend#0 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) [71] (word) div16u::rem#4 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(word) div16u::rem#8 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) [72] (word) div16u::rem#1 ← (word) div16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 ] ) [73] (byte~) div16u::$1 ← > (word) div16u::dividend#2 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ) @@ -158,22 +158,22 @@ div16u::@4: scope:[div16u] from div16u::@1 to:div16u::@2 div16u::@2: scope:[div16u] from div16u::@1 div16u::@4 [77] (word) div16u::rem#5 ← phi( div16u::@1/(word) div16u::rem#1 div16u::@4/(word) div16u::rem#2 ) [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#5 ] ) - [78] (word) div16u::dividend#1 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ) - [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) - [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) + [78] (word) div16u::dividend#0 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ) + [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) + [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) to:div16u::@5 div16u::@5: scope:[div16u] from div16u::@2 - [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ) - [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ) + [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ) + [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ) to:div16u::@3 div16u::@3: scope:[div16u] from div16u::@2 div16u::@5 - [83] (word) div16u::return#1 ← phi( div16u::@2/(word) div16u::quotient#1 div16u::@5/(word) div16u::quotient#2 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ) - [83] (word) div16u::rem#8 ← phi( div16u::@2/(word) div16u::rem#5 div16u::@5/(word) div16u::rem#3 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ) - [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) - [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) + [83] (word) div16u::return#0 ← phi( div16u::@2/(word) div16u::quotient#1 div16u::@5/(word) div16u::quotient#2 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ) + [83] (word) div16u::rem#8 ← phi( div16u::@2/(word) div16u::rem#5 div16u::@5/(word) div16u::rem#3 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ) + [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) + [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) to:div16u::@return div16u::@return: scope:[div16u] from div16u::@3 - [86] return [ div16u::rem#8 div16u::return#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#1 ] ) + [86] return [ div16u::rem#8 div16u::return#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#0 ] ) to:@return test_8u: scope:[test_8u] from main::@1 [87] phi() [ ] ( main:2::test_8u:7 [ ] ) @@ -184,13 +184,13 @@ test_8u::@1: scope:[test_8u] from test_8u test_8u::@12 [88] (byte) test_8u::i#10 ← phi( test_8u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_8u::@12/(byte) test_8u::i#1 ) [ line_cursor#25 char_cursor#75 test_8u::i#10 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 ] ) [89] (byte) test_8u::dividend#0 ← *((const byte[]) test_8u::dividends#0 + (byte) test_8u::i#10) [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 ] ) [90] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ) - [91] (byte) div8u::dividend#0 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ) - [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) - [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) - [94] (byte) div8u::return#0 ← (byte) div8u::return#1 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) + [91] (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ) + [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ) + [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) + [94] (byte) div8u::return#2 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ) to:test_8u::@3 test_8u::@3: scope:[test_8u] from test_8u::@1 - [95] (byte) test_8u::res#0 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) + [95] (byte) test_8u::res#0 ← (byte) div8u::return#2 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) [96] (byte) print_byte::b#2 ← (byte) test_8u::dividend#0 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ) [97] call print_byte param-assignment [ line_cursor#25 char_cursor#11 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#11 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ) to:test_8u::@4 @@ -233,12 +233,12 @@ test_8u::@12: scope:[test_8u] from test_8u::@11 [115] (byte*~) char_cursor#98 ← (byte*) line_cursor#1 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ( main:2::test_8u:7 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ) to:test_8u::@1 div8u: scope:[div8u] from test_8u::@1 - [116] phi() [ div8u::dividend#0 div8u::divisor#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + [116] phi() [ div8u::dividend#1 div8u::divisor#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ) to:div8u::@1 div8u::@1: scope:[div8u] from div8u div8u::@3 [117] (byte) div8u::i#2 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::i#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) - [117] (byte) div8u::quotient#3 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::return#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) - [117] (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#0 div8u::@3/(byte) div8u::dividend#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [117] (byte) div8u::quotient#3 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::return#0 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [117] (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#1 div8u::@3/(byte) div8u::dividend#0 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) [117] (byte) div8u::rem#4 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::rem#8 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) [118] (byte) div8u::rem#1 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) [119] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) @@ -249,25 +249,25 @@ div8u::@4: scope:[div8u] from div8u::@1 to:div8u::@2 div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 [122] (byte) div8u::rem#5 ← phi( div8u::@1/(byte) div8u::rem#1 div8u::@4/(byte) div8u::rem#2 ) [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ) - [123] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) - [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) - [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) + [123] (byte) div8u::dividend#0 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ) + [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) + [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) to:div8u::@5 div8u::@5: scope:[div8u] from div8u::@2 - [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) - [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) + [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ) + [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ) to:div8u::@3 div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 - [128] (byte) div8u::return#1 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) - [128] (byte) div8u::rem#8 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) - [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) - [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) + [128] (byte) div8u::return#0 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) [ div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ) + [128] (byte) div8u::rem#8 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) [ div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ) + [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) + [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) to:div8u::@6 div8u::@6: scope:[div8u] from div8u::@3 - [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) to:div8u::@return div8u::@return: scope:[div8u] from div8u::@6 - [132] return [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + [132] return [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) to:@return print_cls: scope:[print_cls] from main [133] phi() [ ] ( main:2::print_cls:5 [ ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.log b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log similarity index 94% rename from src/test/java/dk/camelot64/kickc/test/ref/division.log rename to src/test/java/dk/camelot64/kickc/test/ref/test-division.log index 3d493e310..caf240e04 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/division.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log @@ -1,9 +1,7 @@ -PARSING src/test/java/dk/camelot64/kickc/test/kc/division.kc +PARSING src/test/java/dk/camelot64/kickc/test/kc/test-division.kc +// Test the binary division library import "print.kc" - -const byte* NULL = 0; - -word rem16u = 0; +import "division.kc" void main() { print_cls(); @@ -48,52 +46,6 @@ void test_8u() { } } -// Performs division on two 8 bit unsigned bytes -// Returns dividend/divisor. -// If remainder is non-null it will be set to the remainder. -// Implemented using simple binary division -byte div8u(byte dividend, byte divisor, byte* remainder) { - byte rem = 0; - byte quotient = 0; - for( byte i : 0..7) { - rem = rem << 1; - if( (dividend & $80) != 0 ) { - rem++; - } - dividend = dividend << 1; - quotient = quotient << 1; - if(rem>=divisor) { - quotient++; - rem = rem - divisor; - } - } - *remainder = rem; - return quotient; -} - - -// Performs division on two 16 bit unsigned bytes -// Returns dividend/divisor. -// If remainder is non-null it will be set to the remainder. -// Implemented using simple binary division -word div16u(word dividend, word divisor) { - word rem = 0; - word quotient = 0; - for( byte i : 0..15) { - rem = rem << 1; - if( (>dividend & $80) != 0 ) { - rem++; - } - dividend = dividend << 1; - quotient = quotient << 1; - if(rem>=divisor) { - quotient++; - rem = rem - divisor; - } - } - rem16u = rem; - return quotient; -} Importing print.kc PARSING src/test/java/dk/camelot64/kickc/test/kc/print.kc @@ -165,6 +117,58 @@ Adding pre/post-modifier (byte*) char_cursor ← ++ (byte*) char_cursor Adding pre/post-modifier (byte*) print_str::str ← ++ (byte*) print_str::str Adding pre/post-modifier (byte*) char_cursor ← ++ (byte*) char_cursor Adding pre/post-modifier (byte*) print_cls::sc ← ++ (byte*) print_cls::sc +Importing division.kc +PARSING src/test/java/dk/camelot64/kickc/test/kc/division.kc +// Binary division implementation + + +// Performs division on two 8 bit unsigned bytes +// Returns dividend/divisor. +// If remainder is non-null it will be set to the remainder. +// Implemented using simple binary division +byte div8u(byte dividend, byte divisor, byte* remainder) { + byte rem = 0; + byte quotient = 0; + for( byte i : 0..7) { + rem = rem << 1; + if( (dividend & $80) != 0 ) { + rem++; + } + dividend = dividend << 1; + quotient = quotient << 1; + if(rem>=divisor) { + quotient++; + rem = rem - divisor; + } + } + *remainder = rem; + return quotient; +} + +word rem16u = 0; + +// Performs division on two 16 bit unsigned bytes +// Returns dividend/divisor. +// The remainder will be set into the global variable rem16u +// Implemented using simple binary division +word div16u(word dividend, word divisor) { + word rem = 0; + word quotient = 0; + for( byte i : 0..15) { + rem = rem << 1; + if( (>dividend & $80) != 0 ) { + rem++; + } + dividend = dividend << 1; + quotient = quotient << 1; + if(rem>=divisor) { + quotient++; + rem = rem - divisor; + } + } + rem16u = rem; + return quotient; +} Adding pre/post-modifier (byte) div8u::rem ← ++ (byte) div8u::rem Adding pre/post-modifier (byte) div8u::quotient ← ++ (byte) div8u::quotient Adding pre/post-modifier (word) div16u::rem ← ++ (word) div16u::rem @@ -257,8 +261,76 @@ print_cls::@1: print_cls::@return: return endproc // print_cls() - (byte*) NULL ← (byte/signed byte/word/signed word/dword/signed dword) 0 +proc (byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) + (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 +div8u::@1: + (byte~) div8u::$0 ← (byte) div8u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::rem ← (byte~) div8u::$0 + (byte~) div8u::$1 ← (byte) div8u::dividend & (byte/word/signed word/dword/signed dword) 128 + (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) div8u::$3 ← ! (boolean~) div8u::$2 + if((boolean~) div8u::$3) goto div8u::@2 + (byte) div8u::rem ← ++ (byte) div8u::rem +div8u::@2: + (byte~) div8u::$4 ← (byte) div8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::dividend ← (byte~) div8u::$4 + (byte~) div8u::$5 ← (byte) div8u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::quotient ← (byte~) div8u::$5 + (boolean~) div8u::$6 ← (byte) div8u::rem >= (byte) div8u::divisor + (boolean~) div8u::$7 ← ! (boolean~) div8u::$6 + if((boolean~) div8u::$7) goto div8u::@3 + (byte) div8u::quotient ← ++ (byte) div8u::quotient + (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 ← (byte) div8u::rem - (byte) div8u::divisor + (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 +div8u::@3: + (byte) div8u::i ← ++ (byte) div8u::i + (boolean~) div8u::$9 ← (byte) div8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) div8u::$9) goto div8u::@1 + *((byte*) div8u::remainder) ← (byte) div8u::rem + (byte) div8u::return ← (byte) div8u::quotient + goto div8u::@return +div8u::@return: + (byte) div8u::return ← (byte) div8u::return + return (byte) div8u::return +endproc // div8u() (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor) + (word) div16u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 +div16u::@1: + (word~) div16u::$0 ← (word) div16u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) div16u::rem ← (word~) div16u::$0 + (byte~) div16u::$1 ← > (word) div16u::dividend + (byte~) div16u::$2 ← (byte~) div16u::$1 & (byte/word/signed word/dword/signed dword) 128 + (boolean~) div16u::$3 ← (byte~) div16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) div16u::$4 ← ! (boolean~) div16u::$3 + if((boolean~) div16u::$4) goto div16u::@2 + (word) div16u::rem ← ++ (word) div16u::rem +div16u::@2: + (word~) div16u::$5 ← (word) div16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) div16u::dividend ← (word~) div16u::$5 + (word~) div16u::$6 ← (word) div16u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) div16u::quotient ← (word~) div16u::$6 + (boolean~) div16u::$7 ← (word) div16u::rem >= (word) div16u::divisor + (boolean~) div16u::$8 ← ! (boolean~) div16u::$7 + if((boolean~) div16u::$8) goto div16u::@3 + (word) div16u::quotient ← ++ (word) div16u::quotient + (word~) div16u::$9 ← (word) div16u::rem - (word) div16u::divisor + (word) div16u::rem ← (word~) div16u::$9 +div16u::@3: + (byte) div16u::i ← ++ (byte) div16u::i + (boolean~) div16u::$10 ← (byte) div16u::i != (byte/signed byte/word/signed word/dword/signed dword) 16 + if((boolean~) div16u::$10) goto div16u::@1 + (word) rem16u ← (word) div16u::rem + (word) div16u::return ← (word) div16u::quotient + goto div16u::@return +div16u::@return: + (word) div16u::return ← (word) div16u::return + return (word) div16u::return +endproc // div16u() proc (void()) main() (void~) main::$0 ← call print_cls (void~) main::$1 ← call test_8u @@ -314,79 +386,9 @@ test_8u::@1: test_8u::@return: return endproc // test_8u() -proc (byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) - (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) div8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) div8u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 -div8u::@1: - (byte~) div8u::$0 ← (byte) div8u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8u::rem ← (byte~) div8u::$0 - (byte~) div8u::$1 ← (byte) div8u::dividend & (byte/word/signed word/dword/signed dword) 128 - (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 - (boolean~) div8u::$3 ← ! (boolean~) div8u::$2 - if((boolean~) div8u::$3) goto div8u::@2 - (byte) div8u::rem ← ++ (byte) div8u::rem -div8u::@2: - (byte~) div8u::$4 ← (byte) div8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8u::dividend ← (byte~) div8u::$4 - (byte~) div8u::$5 ← (byte) div8u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8u::quotient ← (byte~) div8u::$5 - (boolean~) div8u::$6 ← (byte) div8u::rem >= (byte) div8u::divisor - (boolean~) div8u::$7 ← ! (boolean~) div8u::$6 - if((boolean~) div8u::$7) goto div8u::@3 - (byte) div8u::quotient ← ++ (byte) div8u::quotient - (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 ← (byte) div8u::rem - (byte) div8u::divisor - (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 -div8u::@3: - (byte) div8u::i ← ++ (byte) div8u::i - (boolean~) div8u::$9 ← (byte) div8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 - if((boolean~) div8u::$9) goto div8u::@1 - *((byte*) div8u::remainder) ← (byte) div8u::rem - (byte) div8u::return ← (byte) div8u::quotient - goto div8u::@return -div8u::@return: - (byte) div8u::return ← (byte) div8u::return - return (byte) div8u::return -endproc // div8u() -proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor) - (word) div16u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) div16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) div16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 -div16u::@1: - (word~) div16u::$0 ← (word) div16u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) div16u::rem ← (word~) div16u::$0 - (byte~) div16u::$1 ← > (word) div16u::dividend - (byte~) div16u::$2 ← (byte~) div16u::$1 & (byte/word/signed word/dword/signed dword) 128 - (boolean~) div16u::$3 ← (byte~) div16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 - (boolean~) div16u::$4 ← ! (boolean~) div16u::$3 - if((boolean~) div16u::$4) goto div16u::@2 - (word) div16u::rem ← ++ (word) div16u::rem -div16u::@2: - (word~) div16u::$5 ← (word) div16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) div16u::dividend ← (word~) div16u::$5 - (word~) div16u::$6 ← (word) div16u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) div16u::quotient ← (word~) div16u::$6 - (boolean~) div16u::$7 ← (word) div16u::rem >= (word) div16u::divisor - (boolean~) div16u::$8 ← ! (boolean~) div16u::$7 - if((boolean~) div16u::$8) goto div16u::@3 - (word) div16u::quotient ← ++ (word) div16u::quotient - (word~) div16u::$9 ← (word) div16u::rem - (word) div16u::divisor - (word) div16u::rem ← (word~) div16u::$9 -div16u::@3: - (byte) div16u::i ← ++ (byte) div16u::i - (boolean~) div16u::$10 ← (byte) div16u::i != (byte/signed byte/word/signed word/dword/signed dword) 16 - if((boolean~) div16u::$10) goto div16u::@1 - (word) rem16u ← (word) div16u::rem - (word) div16u::return ← (word) div16u::quotient - goto div16u::@return -div16u::@return: - (word) div16u::return ← (word) div16u::return - return (word) div16u::return -endproc // div16u() call main SYMBOLS -(byte*) NULL (byte*) char_cursor (word()) div16u((word) div16u::dividend , (word) div16u::divisor) (word~) div16u::$0 @@ -538,7 +540,6 @@ SYMBOLS Promoting word/signed word/dword/signed dword to byte* in line_cursor ← ((byte*)) 1024 Promoting word/signed word/dword/signed dword to byte* in print_cls::sc ← ((byte*)) 1024 -Promoting byte/signed byte/word/signed word/dword/signed dword to byte* in NULL ← ((byte*)) 0 Promoting byte/word/signed word/dword/signed dword to byte* in test_8u::rem ← ((byte*)) 255 INITIAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -671,79 +672,7 @@ print_cls::@return: scope:[print_cls] from print_cls::@2 return to:@return @8: scope:[] from @7 - (byte*) NULL ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@9 -main: scope:[main] from - (void~) main::$0 ← call print_cls - (void~) main::$1 ← call test_8u - (void~) main::$2 ← call test_16u - to:main::@return -main::@return: scope:[main] from main - return - to:@return -@9: scope:[] from @8 - to:@10 -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 } - (byte) test_16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:test_16u::@1 -test_16u::@1: scope:[test_16u] from test_16u test_16u::@1 - (word) test_16u::dividend ← *((word[]) test_16u::dividends + (byte) test_16u::i) - (word) test_16u::divisor ← *((word[]) test_16u::divisors + (byte) test_16u::i) - (word~) test_16u::$0 ← call div16u (word) test_16u::dividend (word) test_16u::divisor - (word) test_16u::res ← (word~) test_16u::$0 - (void~) test_16u::$1 ← call print_word (word) test_16u::dividend - (void~) test_16u::$2 ← call print_str (string) " / @" - (void~) test_16u::$3 ← call print_word (word) test_16u::divisor - (void~) test_16u::$4 ← call print_str (string) " = @" - (void~) test_16u::$5 ← call print_word (word) test_16u::res - (void~) test_16u::$6 ← call print_str (string) " @" - (void~) test_16u::$7 ← call print_word (word) rem16u - (void~) test_16u::$8 ← call print_ln - (byte/word~) test_16u::$9 ← (byte) test_16u::i + (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) test_16u::i ← (byte/word~) test_16u::$9 - (boolean~) test_16u::$10 ← (byte) test_16u::i != (byte/signed byte/word/signed word/dword/signed dword) 12 - if((boolean~) test_16u::$10) goto test_16u::@1 - to:test_16u::@2 -test_16u::@2: scope:[test_16u] from test_16u::@1 - to:test_16u::@return -test_16u::@return: scope:[test_16u] from test_16u::@2 - return - to:@return -@10: scope:[] from @9 - to:@11 -test_8u: scope:[test_8u] from - (byte*) test_8u::rem ← ((byte*)) (byte/word/signed word/dword/signed dword) 255 - (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 } - (byte) test_8u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:test_8u::@1 -test_8u::@1: scope:[test_8u] from test_8u test_8u::@1 - (byte) test_8u::dividend ← *((byte[]) test_8u::dividends + (byte) test_8u::i) - (byte) test_8u::divisor ← *((byte[]) test_8u::divisors + (byte) test_8u::i) - (byte~) test_8u::$0 ← call div8u (byte) test_8u::dividend (byte) test_8u::divisor (byte*) test_8u::rem - (byte) test_8u::res ← (byte~) test_8u::$0 - (void~) test_8u::$1 ← call print_byte (byte) test_8u::dividend - (void~) test_8u::$2 ← call print_str (string) " / @" - (void~) test_8u::$3 ← call print_byte (byte) test_8u::divisor - (void~) test_8u::$4 ← call print_str (string) " = @" - (void~) test_8u::$5 ← call print_byte (byte) test_8u::res - (void~) test_8u::$6 ← call print_str (string) " @" - (void~) test_8u::$7 ← call print_byte *((byte*) test_8u::rem) - (void~) test_8u::$8 ← call print_ln - (byte) test_8u::i ← ++ (byte) test_8u::i - (boolean~) test_8u::$9 ← (byte) test_8u::i != (byte/signed byte/word/signed word/dword/signed dword) 6 - if((boolean~) test_8u::$9) goto test_8u::@1 - to:test_8u::@2 -test_8u::@2: scope:[test_8u] from test_8u::@1 - to:test_8u::@return -test_8u::@return: scope:[test_8u] from test_8u::@2 - return - to:@return -@11: scope:[] from @10 - to:@12 div8u: scope:[div8u] from (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) div8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -789,8 +718,9 @@ div8u::@return: scope:[div8u] from div8u::@6 div8u::@7 to:@return div8u::@7: scope:[div8u] from to:div8u::@return -@12: scope:[] from @11 - to:@13 +@9: scope:[] from @8 + (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@10 div16u: scope:[div16u] from (word) div16u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) div16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -837,6 +767,76 @@ div16u::@return: scope:[div16u] from div16u::@6 div16u::@7 to:@return div16u::@7: scope:[div16u] from to:div16u::@return +@10: scope:[] from @9 + to:@11 +main: scope:[main] from + (void~) main::$0 ← call print_cls + (void~) main::$1 ← call test_8u + (void~) main::$2 ← call test_16u + to:main::@return +main::@return: scope:[main] from main + return + to:@return +@11: scope:[] from @10 + to:@12 +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 } + (byte) test_16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:test_16u::@1 +test_16u::@1: scope:[test_16u] from test_16u test_16u::@1 + (word) test_16u::dividend ← *((word[]) test_16u::dividends + (byte) test_16u::i) + (word) test_16u::divisor ← *((word[]) test_16u::divisors + (byte) test_16u::i) + (word~) test_16u::$0 ← call div16u (word) test_16u::dividend (word) test_16u::divisor + (word) test_16u::res ← (word~) test_16u::$0 + (void~) test_16u::$1 ← call print_word (word) test_16u::dividend + (void~) test_16u::$2 ← call print_str (string) " / @" + (void~) test_16u::$3 ← call print_word (word) test_16u::divisor + (void~) test_16u::$4 ← call print_str (string) " = @" + (void~) test_16u::$5 ← call print_word (word) test_16u::res + (void~) test_16u::$6 ← call print_str (string) " @" + (void~) test_16u::$7 ← call print_word (word) rem16u + (void~) test_16u::$8 ← call print_ln + (byte/word~) test_16u::$9 ← (byte) test_16u::i + (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) test_16u::i ← (byte/word~) test_16u::$9 + (boolean~) test_16u::$10 ← (byte) test_16u::i != (byte/signed byte/word/signed word/dword/signed dword) 12 + if((boolean~) test_16u::$10) goto test_16u::@1 + to:test_16u::@2 +test_16u::@2: scope:[test_16u] from test_16u::@1 + to:test_16u::@return +test_16u::@return: scope:[test_16u] from test_16u::@2 + return + to:@return +@12: scope:[] from @11 + to:@13 +test_8u: scope:[test_8u] from + (byte*) test_8u::rem ← ((byte*)) (byte/word/signed word/dword/signed dword) 255 + (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 } + (byte) test_8u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:test_8u::@1 +test_8u::@1: scope:[test_8u] from test_8u test_8u::@1 + (byte) test_8u::dividend ← *((byte[]) test_8u::dividends + (byte) test_8u::i) + (byte) test_8u::divisor ← *((byte[]) test_8u::divisors + (byte) test_8u::i) + (byte~) test_8u::$0 ← call div8u (byte) test_8u::dividend (byte) test_8u::divisor (byte*) test_8u::rem + (byte) test_8u::res ← (byte~) test_8u::$0 + (void~) test_8u::$1 ← call print_byte (byte) test_8u::dividend + (void~) test_8u::$2 ← call print_str (string) " / @" + (void~) test_8u::$3 ← call print_byte (byte) test_8u::divisor + (void~) test_8u::$4 ← call print_str (string) " = @" + (void~) test_8u::$5 ← call print_byte (byte) test_8u::res + (void~) test_8u::$6 ← call print_str (string) " @" + (void~) test_8u::$7 ← call print_byte *((byte*) test_8u::rem) + (void~) test_8u::$8 ← call print_ln + (byte) test_8u::i ← ++ (byte) test_8u::i + (boolean~) test_8u::$9 ← (byte) test_8u::i != (byte/signed byte/word/signed word/dword/signed dword) 6 + if((boolean~) test_8u::$9) goto test_8u::@1 + to:test_8u::@2 +test_8u::@2: scope:[test_8u] from test_8u::@1 + to:test_8u::@return +test_8u::@return: scope:[test_8u] from test_8u::@2 + return + to:@return @13: scope:[] from @12 call main to:@end @@ -848,7 +848,6 @@ Eliminating unused variable - keeping the call (void~) print_word::$1 Eliminating unused variable - keeping the call (void~) print_word::$3 Eliminating unused variable - keeping the call (void~) print_byte::$1 Eliminating unused variable - keeping the call (void~) print_byte::$3 -Eliminating unused variable (byte*) NULL and assignment [35] (byte*) NULL ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable - keeping the call (void~) main::$0 Eliminating unused variable - keeping the call (void~) main::$1 Eliminating unused variable - keeping the call (void~) main::$2 @@ -887,14 +886,14 @@ Removing empty block @5 Removing empty block @6 Removing empty block @7 Removing empty block print_cls::@2 -Removing empty block @9 -Removing empty block test_16u::@2 -Removing empty block @10 -Removing empty block test_8u::@2 -Removing empty block @11 +Removing empty block @8 Removing empty block div8u::@7 -Removing empty block @12 Removing empty block div16u::@7 +Removing empty block @10 +Removing empty block @11 +Removing empty block test_16u::@2 +Removing empty block @12 +Removing empty block test_8u::@2 PROCEDURE MODIFY VARIABLE ANALYSIS print_str modifies char_cursor print_ln modifies line_cursor @@ -902,6 +901,7 @@ print_ln modifies char_cursor print_word modifies char_cursor print_byte modifies char_cursor print_char modifies char_cursor +div16u modifies rem16u main modifies char_cursor main modifies line_cursor main modifies rem16u @@ -910,7 +910,6 @@ test_16u modifies char_cursor test_16u modifies line_cursor test_8u modifies char_cursor test_8u modifies line_cursor -div16u modifies rem16u Completing Phi functions... Completing Phi functions... @@ -928,7 +927,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from (byte*) line_cursor#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) char_cursor#0 ← (byte*) line_cursor#0 - to:@8 + to:@9 print_str: scope:[print_str] from test_16u::@4 test_16u::@6 test_16u::@8 test_8u::@4 test_8u::@6 test_8u::@8 (byte*) char_cursor#77 ← phi( test_16u::@4/(byte*) char_cursor#16 test_16u::@6/(byte*) char_cursor#18 test_16u::@8/(byte*) char_cursor#20 test_8u::@4/(byte*) char_cursor#25 test_8u::@6/(byte*) char_cursor#27 test_8u::@8/(byte*) char_cursor#29 ) (byte*) print_str::str#9 ← phi( test_16u::@4/(byte*) print_str::str#1 test_16u::@6/(byte*) print_str::str#2 test_16u::@8/(byte*) print_str::str#3 test_8u::@4/(byte*) print_str::str#4 test_8u::@6/(byte*) print_str::str#5 test_8u::@8/(byte*) print_str::str#6 ) @@ -1048,11 +1047,167 @@ print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 print_cls::@return: scope:[print_cls] from print_cls::@1 return to:@return -@8: scope:[] from @begin +div8u: scope:[div8u] from test_8u::@1 + (byte*) div8u::remainder#7 ← phi( test_8u::@1/(byte*) div8u::remainder#0 ) + (byte) div8u::divisor#5 ← phi( test_8u::@1/(byte) div8u::divisor#0 ) + (byte) div8u::dividend#4 ← phi( test_8u::@1/(byte) div8u::dividend#1 ) + (byte) div8u::rem#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:div8u::@1 +div8u::@1: scope:[div8u] from div8u div8u::@3 + (byte*) div8u::remainder#5 ← phi( div8u/(byte*) div8u::remainder#7 div8u::@3/(byte*) div8u::remainder#2 ) + (byte) div8u::i#5 ← phi( div8u/(byte) div8u::i#0 div8u::@3/(byte) div8u::i#1 ) + (byte) div8u::divisor#3 ← phi( div8u/(byte) div8u::divisor#5 div8u::@3/(byte) div8u::divisor#6 ) + (byte) div8u::quotient#6 ← phi( div8u/(byte) div8u::quotient#0 div8u::@3/(byte) div8u::quotient#8 ) + (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#4 div8u::@3/(byte) div8u::dividend#5 ) + (byte) div8u::rem#4 ← phi( div8u/(byte) div8u::rem#0 div8u::@3/(byte) div8u::rem#9 ) + (byte~) div8u::$0 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::rem#1 ← (byte~) div8u::$0 + (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 + (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) div8u::$3 ← ! (boolean~) div8u::$2 + if((boolean~) div8u::$3) goto div8u::@2 + to:div8u::@4 +div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 + (byte*) div8u::remainder#3 ← phi( div8u::@1/(byte*) div8u::remainder#5 div8u::@4/(byte*) div8u::remainder#6 ) + (byte) div8u::i#3 ← phi( div8u::@1/(byte) div8u::i#5 div8u::@4/(byte) div8u::i#6 ) + (byte) div8u::divisor#1 ← phi( div8u::@1/(byte) div8u::divisor#3 div8u::@4/(byte) div8u::divisor#4 ) + (byte) div8u::rem#5 ← phi( div8u::@1/(byte) div8u::rem#1 div8u::@4/(byte) div8u::rem#2 ) + (byte) div8u::quotient#3 ← phi( div8u::@1/(byte) div8u::quotient#6 div8u::@4/(byte) div8u::quotient#7 ) + (byte) div8u::dividend#3 ← phi( div8u::@1/(byte) div8u::dividend#2 div8u::@4/(byte) div8u::dividend#6 ) + (byte~) div8u::$4 ← (byte) div8u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::dividend#0 ← (byte~) div8u::$4 + (byte~) div8u::$5 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::quotient#1 ← (byte~) div8u::$5 + (boolean~) div8u::$6 ← (byte) div8u::rem#5 >= (byte) div8u::divisor#1 + (boolean~) div8u::$7 ← ! (boolean~) div8u::$6 + if((boolean~) div8u::$7) goto div8u::@3 + to:div8u::@5 +div8u::@4: scope:[div8u] from div8u::@1 + (byte*) div8u::remainder#6 ← phi( div8u::@1/(byte*) div8u::remainder#5 ) + (byte) div8u::i#6 ← phi( div8u::@1/(byte) div8u::i#5 ) + (byte) div8u::divisor#4 ← phi( div8u::@1/(byte) div8u::divisor#3 ) + (byte) div8u::quotient#7 ← phi( div8u::@1/(byte) div8u::quotient#6 ) + (byte) div8u::dividend#6 ← phi( div8u::@1/(byte) div8u::dividend#2 ) + (byte) div8u::rem#6 ← phi( div8u::@1/(byte) div8u::rem#1 ) + (byte) div8u::rem#2 ← ++ (byte) div8u::rem#6 + to:div8u::@2 +div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 + (byte) div8u::divisor#6 ← phi( div8u::@2/(byte) div8u::divisor#1 div8u::@5/(byte) div8u::divisor#2 ) + (byte) div8u::quotient#8 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) + (byte*) div8u::remainder#2 ← phi( div8u::@2/(byte*) div8u::remainder#3 div8u::@5/(byte*) div8u::remainder#4 ) + (byte) div8u::dividend#5 ← phi( div8u::@2/(byte) div8u::dividend#0 div8u::@5/(byte) div8u::dividend#7 ) + (byte) div8u::rem#9 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) + (byte) div8u::i#2 ← phi( div8u::@2/(byte) div8u::i#3 div8u::@5/(byte) div8u::i#4 ) + (byte) div8u::i#1 ← ++ (byte) div8u::i#2 + (boolean~) div8u::$9 ← (byte) div8u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) div8u::$9) goto div8u::@1 + to:div8u::@6 +div8u::@5: scope:[div8u] from div8u::@2 + (byte*) div8u::remainder#4 ← phi( div8u::@2/(byte*) div8u::remainder#3 ) + (byte) div8u::dividend#7 ← phi( div8u::@2/(byte) div8u::dividend#0 ) + (byte) div8u::i#4 ← phi( div8u::@2/(byte) div8u::i#3 ) + (byte) div8u::divisor#2 ← phi( div8u::@2/(byte) div8u::divisor#1 ) + (byte) div8u::rem#7 ← phi( div8u::@2/(byte) div8u::rem#5 ) + (byte) div8u::quotient#4 ← phi( div8u::@2/(byte) div8u::quotient#1 ) + (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#4 + (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 ← (byte) div8u::rem#7 - (byte) div8u::divisor#2 + (byte) div8u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 + to:div8u::@3 +div8u::@6: scope:[div8u] from div8u::@3 + (byte) div8u::quotient#5 ← phi( div8u::@3/(byte) div8u::quotient#8 ) + (byte*) div8u::remainder#1 ← phi( div8u::@3/(byte*) div8u::remainder#2 ) + (byte) div8u::rem#8 ← phi( div8u::@3/(byte) div8u::rem#9 ) + *((byte*) div8u::remainder#1) ← (byte) div8u::rem#8 + (byte) div8u::return#0 ← (byte) div8u::quotient#5 + to:div8u::@return +div8u::@return: scope:[div8u] from div8u::@6 + (byte) div8u::return#3 ← phi( div8u::@6/(byte) div8u::return#0 ) + (byte) div8u::return#1 ← (byte) div8u::return#3 + return + to:@return +@9: scope:[] from @begin (byte*) line_cursor#30 ← phi( @begin/(byte*) line_cursor#0 ) (byte*) char_cursor#81 ← phi( @begin/(byte*) char_cursor#0 ) (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@13 +div16u: scope:[div16u] from test_16u::@1 + (word) div16u::divisor#5 ← phi( test_16u::@1/(word) div16u::divisor#0 ) + (word) div16u::dividend#4 ← phi( test_16u::@1/(word) div16u::dividend#1 ) + (word) div16u::rem#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:div16u::@1 +div16u::@1: scope:[div16u] from div16u div16u::@3 + (byte) div16u::i#5 ← phi( div16u/(byte) div16u::i#0 div16u::@3/(byte) div16u::i#1 ) + (word) div16u::divisor#3 ← phi( div16u/(word) div16u::divisor#5 div16u::@3/(word) div16u::divisor#6 ) + (word) div16u::quotient#6 ← phi( div16u/(word) div16u::quotient#0 div16u::@3/(word) div16u::quotient#8 ) + (word) div16u::dividend#2 ← phi( div16u/(word) div16u::dividend#4 div16u::@3/(word) div16u::dividend#5 ) + (word) div16u::rem#4 ← phi( div16u/(word) div16u::rem#0 div16u::@3/(word) div16u::rem#9 ) + (word~) div16u::$0 ← (word) div16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) div16u::rem#1 ← (word~) div16u::$0 + (byte~) div16u::$1 ← > (word) div16u::dividend#2 + (byte~) div16u::$2 ← (byte~) div16u::$1 & (byte/word/signed word/dword/signed dword) 128 + (boolean~) div16u::$3 ← (byte~) div16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) div16u::$4 ← ! (boolean~) div16u::$3 + if((boolean~) div16u::$4) goto div16u::@2 + to:div16u::@4 +div16u::@2: scope:[div16u] from div16u::@1 div16u::@4 + (byte) div16u::i#3 ← phi( div16u::@1/(byte) div16u::i#5 div16u::@4/(byte) div16u::i#6 ) + (word) div16u::divisor#1 ← phi( div16u::@1/(word) div16u::divisor#3 div16u::@4/(word) div16u::divisor#4 ) + (word) div16u::rem#5 ← phi( div16u::@1/(word) div16u::rem#1 div16u::@4/(word) div16u::rem#2 ) + (word) div16u::quotient#3 ← phi( div16u::@1/(word) div16u::quotient#6 div16u::@4/(word) div16u::quotient#7 ) + (word) div16u::dividend#3 ← phi( div16u::@1/(word) div16u::dividend#2 div16u::@4/(word) div16u::dividend#6 ) + (word~) div16u::$5 ← (word) div16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) div16u::dividend#0 ← (word~) div16u::$5 + (word~) div16u::$6 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) div16u::quotient#1 ← (word~) div16u::$6 + (boolean~) div16u::$7 ← (word) div16u::rem#5 >= (word) div16u::divisor#1 + (boolean~) div16u::$8 ← ! (boolean~) div16u::$7 + if((boolean~) div16u::$8) goto div16u::@3 + to:div16u::@5 +div16u::@4: scope:[div16u] from div16u::@1 + (byte) div16u::i#6 ← phi( div16u::@1/(byte) div16u::i#5 ) + (word) div16u::divisor#4 ← phi( div16u::@1/(word) div16u::divisor#3 ) + (word) div16u::quotient#7 ← phi( div16u::@1/(word) div16u::quotient#6 ) + (word) div16u::dividend#6 ← phi( div16u::@1/(word) div16u::dividend#2 ) + (word) div16u::rem#6 ← phi( div16u::@1/(word) div16u::rem#1 ) + (word) div16u::rem#2 ← ++ (word) div16u::rem#6 + to:div16u::@2 +div16u::@3: scope:[div16u] from div16u::@2 div16u::@5 + (word) div16u::divisor#6 ← phi( div16u::@2/(word) div16u::divisor#1 div16u::@5/(word) div16u::divisor#2 ) + (word) div16u::quotient#8 ← phi( div16u::@2/(word) div16u::quotient#1 div16u::@5/(word) div16u::quotient#2 ) + (word) div16u::dividend#5 ← phi( div16u::@2/(word) div16u::dividend#0 div16u::@5/(word) div16u::dividend#7 ) + (word) div16u::rem#9 ← phi( div16u::@2/(word) div16u::rem#5 div16u::@5/(word) div16u::rem#3 ) + (byte) div16u::i#2 ← phi( div16u::@2/(byte) div16u::i#3 div16u::@5/(byte) div16u::i#4 ) + (byte) div16u::i#1 ← ++ (byte) div16u::i#2 + (boolean~) div16u::$10 ← (byte) div16u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 16 + if((boolean~) div16u::$10) goto div16u::@1 + to:div16u::@6 +div16u::@5: scope:[div16u] from div16u::@2 + (word) div16u::dividend#7 ← phi( div16u::@2/(word) div16u::dividend#0 ) + (byte) div16u::i#4 ← phi( div16u::@2/(byte) div16u::i#3 ) + (word) div16u::divisor#2 ← phi( div16u::@2/(word) div16u::divisor#1 ) + (word) div16u::rem#7 ← phi( div16u::@2/(word) div16u::rem#5 ) + (word) div16u::quotient#4 ← phi( div16u::@2/(word) div16u::quotient#1 ) + (word) div16u::quotient#2 ← ++ (word) div16u::quotient#4 + (word~) div16u::$9 ← (word) div16u::rem#7 - (word) div16u::divisor#2 + (word) div16u::rem#3 ← (word~) div16u::$9 + to:div16u::@3 +div16u::@6: scope:[div16u] from div16u::@3 + (word) div16u::quotient#5 ← phi( div16u::@3/(word) div16u::quotient#8 ) + (word) div16u::rem#8 ← phi( div16u::@3/(word) div16u::rem#9 ) + (word) rem16u#1 ← (word) div16u::rem#8 + (word) div16u::return#0 ← (word) div16u::quotient#5 + to:div16u::@return +div16u::@return: scope:[div16u] from div16u::@6 + (word) rem16u#8 ← phi( div16u::@6/(word) rem16u#1 ) + (word) div16u::return#3 ← phi( div16u::@6/(word) div16u::return#0 ) + (word) div16u::return#1 ← (word) div16u::return#3 + (word) rem16u#2 ← (word) rem16u#8 + return + to:@return main: scope:[main] from @13 (word) rem16u#24 ← phi( @13/(word) rem16u#19 ) (byte*) line_cursor#27 ← phi( @13/(byte*) line_cursor#26 ) @@ -1076,18 +1231,18 @@ main::@2: scope:[main] from main::@1 main::@3: scope:[main] from main::@2 (byte*) line_cursor#15 ← phi( main::@2/(byte*) line_cursor#7 ) (byte*) char_cursor#48 ← phi( main::@2/(byte*) char_cursor#24 ) - (word) rem16u#8 ← phi( main::@2/(word) rem16u#4 ) - (word) rem16u#1 ← (word) rem16u#8 + (word) rem16u#9 ← phi( main::@2/(word) rem16u#6 ) + (word) rem16u#3 ← (word) rem16u#9 (byte*) char_cursor#14 ← (byte*) char_cursor#48 (byte*) line_cursor#4 ← (byte*) line_cursor#15 to:main::@return main::@return: scope:[main] from main::@3 - (word) rem16u#9 ← phi( main::@3/(word) rem16u#1 ) + (word) rem16u#10 ← phi( main::@3/(word) rem16u#3 ) (byte*) line_cursor#16 ← phi( main::@3/(byte*) line_cursor#4 ) (byte*) char_cursor#49 ← phi( main::@3/(byte*) char_cursor#14 ) (byte*) char_cursor#15 ← (byte*) char_cursor#49 (byte*) line_cursor#5 ← (byte*) line_cursor#16 - (word) rem16u#2 ← (word) rem16u#9 + (word) rem16u#4 ← (word) rem16u#10 return to:@return test_16u: scope:[test_16u] from main::@2 @@ -1105,10 +1260,10 @@ test_16u::@1: scope:[test_16u] from test_16u test_16u::@11 (byte) test_16u::i#2 ← phi( test_16u/(byte) test_16u::i#0 test_16u::@11/(byte) test_16u::i#1 ) (word) test_16u::dividend#0 ← *((word[]) test_16u::dividends#0 + (byte) test_16u::i#2) (word) test_16u::divisor#0 ← *((word[]) test_16u::divisors#0 + (byte) test_16u::i#2) - (word) div16u::dividend#0 ← (word) test_16u::dividend#0 + (word) div16u::dividend#1 ← (word) test_16u::dividend#0 (word) div16u::divisor#0 ← (word) test_16u::divisor#0 call div16u param-assignment - (word) div16u::return#0 ← (word) div16u::return#2 + (word) div16u::return#2 ← (word) div16u::return#1 to:test_16u::@3 test_16u::@3: scope:[test_16u] from test_16u::@1 (byte) test_16u::i#11 ← phi( test_16u::@1/(byte) test_16u::i#2 ) @@ -1116,10 +1271,10 @@ 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#74 ← phi( test_16u::@1/(byte*) char_cursor#79 ) (word) test_16u::dividend#1 ← phi( test_16u::@1/(word) test_16u::dividend#0 ) - (word) rem16u#10 ← phi( test_16u::@1/(word) rem16u#6 ) - (word) div16u::return#3 ← phi( test_16u::@1/(word) div16u::return#0 ) - (word~) test_16u::$0 ← (word) div16u::return#3 - (word) rem16u#3 ← (word) rem16u#10 + (word) rem16u#11 ← phi( test_16u::@1/(word) rem16u#2 ) + (word) div16u::return#4 ← phi( test_16u::@1/(word) div16u::return#2 ) + (word~) test_16u::$0 ← (word) div16u::return#4 + (word) rem16u#5 ← (word) rem16u#11 (word) test_16u::res#0 ← (word~) test_16u::$0 (word) print_word::w#0 ← (word) test_16u::dividend#1 call print_word param-assignment @@ -1127,7 +1282,7 @@ test_16u::@3: scope:[test_16u] from test_16u::@1 test_16u::@4: scope:[test_16u] from test_16u::@3 (byte) test_16u::i#10 ← phi( test_16u::@3/(byte) test_16u::i#11 ) (byte*) line_cursor#39 ← phi( test_16u::@3/(byte*) line_cursor#41 ) - (word) rem16u#27 ← phi( test_16u::@3/(word) rem16u#3 ) + (word) rem16u#27 ← phi( test_16u::@3/(word) rem16u#5 ) (word) test_16u::res#4 ← phi( test_16u::@3/(word) test_16u::res#0 ) (word) test_16u::divisor#2 ← phi( test_16u::@3/(word) test_16u::divisor#3 ) (byte*) char_cursor#50 ← phi( test_16u::@3/(byte*) char_cursor#7 ) @@ -1178,14 +1333,14 @@ test_16u::@8: scope:[test_16u] from test_16u::@7 test_16u::@9: scope:[test_16u] from test_16u::@8 (byte) test_16u::i#5 ← phi( test_16u::@8/(byte) test_16u::i#6 ) (byte*) line_cursor#28 ← phi( test_16u::@8/(byte*) line_cursor#31 ) - (word) rem16u#11 ← phi( test_16u::@8/(word) rem16u#17 ) + (word) rem16u#12 ← phi( test_16u::@8/(word) rem16u#17 ) (byte*) char_cursor#55 ← phi( test_16u::@8/(byte*) char_cursor#2 ) (byte*) char_cursor#21 ← (byte*) char_cursor#55 - (word) print_word::w#3 ← (word) rem16u#11 + (word) print_word::w#3 ← (word) rem16u#12 call print_word param-assignment to:test_16u::@10 test_16u::@10: scope:[test_16u] from test_16u::@9 - (word) rem16u#23 ← phi( test_16u::@9/(word) rem16u#11 ) + (word) rem16u#23 ← phi( test_16u::@9/(word) rem16u#12 ) (byte) test_16u::i#4 ← phi( test_16u::@9/(byte) test_16u::i#5 ) (byte*) line_cursor#24 ← phi( test_16u::@9/(byte*) line_cursor#28 ) (byte*) char_cursor#56 ← phi( test_16u::@9/(byte*) char_cursor#7 ) @@ -1207,8 +1362,8 @@ test_16u::@11: scope:[test_16u] from test_16u::@10 test_16u::@return: scope:[test_16u] from test_16u::@11 (byte*) line_cursor#18 ← phi( test_16u::@11/(byte*) line_cursor#6 ) (byte*) char_cursor#58 ← phi( test_16u::@11/(byte*) char_cursor#23 ) - (word) rem16u#12 ← phi( test_16u::@11/(word) rem16u#18 ) - (word) rem16u#4 ← (word) rem16u#12 + (word) rem16u#13 ← phi( test_16u::@11/(word) rem16u#18 ) + (word) rem16u#6 ← (word) rem16u#13 (byte*) char_cursor#24 ← (byte*) char_cursor#58 (byte*) line_cursor#7 ← (byte*) line_cursor#18 return @@ -1228,11 +1383,11 @@ test_8u::@1: scope:[test_8u] from test_8u test_8u::@11 (byte) test_8u::i#2 ← phi( test_8u/(byte) test_8u::i#0 test_8u::@11/(byte) test_8u::i#1 ) (byte) test_8u::dividend#0 ← *((byte[]) test_8u::dividends#0 + (byte) test_8u::i#2) (byte) test_8u::divisor#0 ← *((byte[]) test_8u::divisors#0 + (byte) test_8u::i#2) - (byte) div8u::dividend#0 ← (byte) test_8u::dividend#0 + (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0 (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 (byte*) div8u::remainder#0 ← (byte*) test_8u::rem#1 call div8u param-assignment - (byte) div8u::return#0 ← (byte) div8u::return#2 + (byte) div8u::return#2 ← (byte) div8u::return#1 to:test_8u::@3 test_8u::@3: scope:[test_8u] from test_8u::@1 (byte) test_8u::i#11 ← phi( test_8u::@1/(byte) test_8u::i#2 ) @@ -1241,8 +1396,8 @@ test_8u::@3: scope:[test_8u] from test_8u::@1 (byte) test_8u::divisor#3 ← phi( test_8u::@1/(byte) test_8u::divisor#0 ) (byte*) char_cursor#75 ← phi( test_8u::@1/(byte*) char_cursor#80 ) (byte) test_8u::dividend#1 ← phi( test_8u::@1/(byte) test_8u::dividend#0 ) - (byte) div8u::return#3 ← phi( test_8u::@1/(byte) div8u::return#0 ) - (byte~) test_8u::$0 ← (byte) div8u::return#3 + (byte) div8u::return#4 ← phi( test_8u::@1/(byte) div8u::return#2 ) + (byte~) test_8u::$0 ← (byte) div8u::return#4 (byte) test_8u::res#0 ← (byte~) test_8u::$0 (byte) print_byte::b#2 ← (byte) test_8u::dividend#1 call print_byte param-assignment @@ -1333,170 +1488,14 @@ test_8u::@return: scope:[test_8u] from test_8u::@11 (byte*) line_cursor#9 ← (byte*) line_cursor#20 return to:@return -div8u: scope:[div8u] from test_8u::@1 - (byte*) div8u::remainder#7 ← phi( test_8u::@1/(byte*) div8u::remainder#0 ) - (byte) div8u::divisor#5 ← phi( test_8u::@1/(byte) div8u::divisor#0 ) - (byte) div8u::dividend#4 ← phi( test_8u::@1/(byte) div8u::dividend#0 ) - (byte) div8u::rem#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) div8u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) div8u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:div8u::@1 -div8u::@1: scope:[div8u] from div8u div8u::@3 - (byte*) div8u::remainder#5 ← phi( div8u/(byte*) div8u::remainder#7 div8u::@3/(byte*) div8u::remainder#2 ) - (byte) div8u::i#5 ← phi( div8u/(byte) div8u::i#0 div8u::@3/(byte) div8u::i#1 ) - (byte) div8u::divisor#3 ← phi( div8u/(byte) div8u::divisor#5 div8u::@3/(byte) div8u::divisor#6 ) - (byte) div8u::quotient#6 ← phi( div8u/(byte) div8u::quotient#0 div8u::@3/(byte) div8u::quotient#8 ) - (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#4 div8u::@3/(byte) div8u::dividend#5 ) - (byte) div8u::rem#4 ← phi( div8u/(byte) div8u::rem#0 div8u::@3/(byte) div8u::rem#9 ) - (byte~) div8u::$0 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8u::rem#1 ← (byte~) div8u::$0 - (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 - (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 - (boolean~) div8u::$3 ← ! (boolean~) div8u::$2 - if((boolean~) div8u::$3) goto div8u::@2 - to:div8u::@4 -div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 - (byte*) div8u::remainder#3 ← phi( div8u::@1/(byte*) div8u::remainder#5 div8u::@4/(byte*) div8u::remainder#6 ) - (byte) div8u::i#3 ← phi( div8u::@1/(byte) div8u::i#5 div8u::@4/(byte) div8u::i#6 ) - (byte) div8u::divisor#1 ← phi( div8u::@1/(byte) div8u::divisor#3 div8u::@4/(byte) div8u::divisor#4 ) - (byte) div8u::rem#5 ← phi( div8u::@1/(byte) div8u::rem#1 div8u::@4/(byte) div8u::rem#2 ) - (byte) div8u::quotient#3 ← phi( div8u::@1/(byte) div8u::quotient#6 div8u::@4/(byte) div8u::quotient#7 ) - (byte) div8u::dividend#3 ← phi( div8u::@1/(byte) div8u::dividend#2 div8u::@4/(byte) div8u::dividend#6 ) - (byte~) div8u::$4 ← (byte) div8u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8u::dividend#1 ← (byte~) div8u::$4 - (byte~) div8u::$5 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) div8u::quotient#1 ← (byte~) div8u::$5 - (boolean~) div8u::$6 ← (byte) div8u::rem#5 >= (byte) div8u::divisor#1 - (boolean~) div8u::$7 ← ! (boolean~) div8u::$6 - if((boolean~) div8u::$7) goto div8u::@3 - to:div8u::@5 -div8u::@4: scope:[div8u] from div8u::@1 - (byte*) div8u::remainder#6 ← phi( div8u::@1/(byte*) div8u::remainder#5 ) - (byte) div8u::i#6 ← phi( div8u::@1/(byte) div8u::i#5 ) - (byte) div8u::divisor#4 ← phi( div8u::@1/(byte) div8u::divisor#3 ) - (byte) div8u::quotient#7 ← phi( div8u::@1/(byte) div8u::quotient#6 ) - (byte) div8u::dividend#6 ← phi( div8u::@1/(byte) div8u::dividend#2 ) - (byte) div8u::rem#6 ← phi( div8u::@1/(byte) div8u::rem#1 ) - (byte) div8u::rem#2 ← ++ (byte) div8u::rem#6 - to:div8u::@2 -div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 - (byte) div8u::divisor#6 ← phi( div8u::@2/(byte) div8u::divisor#1 div8u::@5/(byte) div8u::divisor#2 ) - (byte) div8u::quotient#8 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) - (byte*) div8u::remainder#2 ← phi( div8u::@2/(byte*) div8u::remainder#3 div8u::@5/(byte*) div8u::remainder#4 ) - (byte) div8u::dividend#5 ← phi( div8u::@2/(byte) div8u::dividend#1 div8u::@5/(byte) div8u::dividend#7 ) - (byte) div8u::rem#9 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) - (byte) div8u::i#2 ← phi( div8u::@2/(byte) div8u::i#3 div8u::@5/(byte) div8u::i#4 ) - (byte) div8u::i#1 ← ++ (byte) div8u::i#2 - (boolean~) div8u::$9 ← (byte) div8u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 - if((boolean~) div8u::$9) goto div8u::@1 - to:div8u::@6 -div8u::@5: scope:[div8u] from div8u::@2 - (byte*) div8u::remainder#4 ← phi( div8u::@2/(byte*) div8u::remainder#3 ) - (byte) div8u::dividend#7 ← phi( div8u::@2/(byte) div8u::dividend#1 ) - (byte) div8u::i#4 ← phi( div8u::@2/(byte) div8u::i#3 ) - (byte) div8u::divisor#2 ← phi( div8u::@2/(byte) div8u::divisor#1 ) - (byte) div8u::rem#7 ← phi( div8u::@2/(byte) div8u::rem#5 ) - (byte) div8u::quotient#4 ← phi( div8u::@2/(byte) div8u::quotient#1 ) - (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#4 - (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 ← (byte) div8u::rem#7 - (byte) div8u::divisor#2 - (byte) div8u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 - to:div8u::@3 -div8u::@6: scope:[div8u] from div8u::@3 - (byte) div8u::quotient#5 ← phi( div8u::@3/(byte) div8u::quotient#8 ) - (byte*) div8u::remainder#1 ← phi( div8u::@3/(byte*) div8u::remainder#2 ) - (byte) div8u::rem#8 ← phi( div8u::@3/(byte) div8u::rem#9 ) - *((byte*) div8u::remainder#1) ← (byte) div8u::rem#8 - (byte) div8u::return#1 ← (byte) div8u::quotient#5 - to:div8u::@return -div8u::@return: scope:[div8u] from div8u::@6 - (byte) div8u::return#4 ← phi( div8u::@6/(byte) div8u::return#1 ) - (byte) div8u::return#2 ← (byte) div8u::return#4 - return - to:@return -div16u: scope:[div16u] from test_16u::@1 - (word) div16u::divisor#5 ← phi( test_16u::@1/(word) div16u::divisor#0 ) - (word) div16u::dividend#4 ← phi( test_16u::@1/(word) div16u::dividend#0 ) - (word) div16u::rem#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) div16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) div16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:div16u::@1 -div16u::@1: scope:[div16u] from div16u div16u::@3 - (byte) div16u::i#5 ← phi( div16u/(byte) div16u::i#0 div16u::@3/(byte) div16u::i#1 ) - (word) div16u::divisor#3 ← phi( div16u/(word) div16u::divisor#5 div16u::@3/(word) div16u::divisor#6 ) - (word) div16u::quotient#6 ← phi( div16u/(word) div16u::quotient#0 div16u::@3/(word) div16u::quotient#8 ) - (word) div16u::dividend#2 ← phi( div16u/(word) div16u::dividend#4 div16u::@3/(word) div16u::dividend#5 ) - (word) div16u::rem#4 ← phi( div16u/(word) div16u::rem#0 div16u::@3/(word) div16u::rem#9 ) - (word~) div16u::$0 ← (word) div16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) div16u::rem#1 ← (word~) div16u::$0 - (byte~) div16u::$1 ← > (word) div16u::dividend#2 - (byte~) div16u::$2 ← (byte~) div16u::$1 & (byte/word/signed word/dword/signed dword) 128 - (boolean~) div16u::$3 ← (byte~) div16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 - (boolean~) div16u::$4 ← ! (boolean~) div16u::$3 - if((boolean~) div16u::$4) goto div16u::@2 - to:div16u::@4 -div16u::@2: scope:[div16u] from div16u::@1 div16u::@4 - (byte) div16u::i#3 ← phi( div16u::@1/(byte) div16u::i#5 div16u::@4/(byte) div16u::i#6 ) - (word) div16u::divisor#1 ← phi( div16u::@1/(word) div16u::divisor#3 div16u::@4/(word) div16u::divisor#4 ) - (word) div16u::rem#5 ← phi( div16u::@1/(word) div16u::rem#1 div16u::@4/(word) div16u::rem#2 ) - (word) div16u::quotient#3 ← phi( div16u::@1/(word) div16u::quotient#6 div16u::@4/(word) div16u::quotient#7 ) - (word) div16u::dividend#3 ← phi( div16u::@1/(word) div16u::dividend#2 div16u::@4/(word) div16u::dividend#6 ) - (word~) div16u::$5 ← (word) div16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) div16u::dividend#1 ← (word~) div16u::$5 - (word~) div16u::$6 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 - (word) div16u::quotient#1 ← (word~) div16u::$6 - (boolean~) div16u::$7 ← (word) div16u::rem#5 >= (word) div16u::divisor#1 - (boolean~) div16u::$8 ← ! (boolean~) div16u::$7 - if((boolean~) div16u::$8) goto div16u::@3 - to:div16u::@5 -div16u::@4: scope:[div16u] from div16u::@1 - (byte) div16u::i#6 ← phi( div16u::@1/(byte) div16u::i#5 ) - (word) div16u::divisor#4 ← phi( div16u::@1/(word) div16u::divisor#3 ) - (word) div16u::quotient#7 ← phi( div16u::@1/(word) div16u::quotient#6 ) - (word) div16u::dividend#6 ← phi( div16u::@1/(word) div16u::dividend#2 ) - (word) div16u::rem#6 ← phi( div16u::@1/(word) div16u::rem#1 ) - (word) div16u::rem#2 ← ++ (word) div16u::rem#6 - to:div16u::@2 -div16u::@3: scope:[div16u] from div16u::@2 div16u::@5 - (word) div16u::divisor#6 ← phi( div16u::@2/(word) div16u::divisor#1 div16u::@5/(word) div16u::divisor#2 ) - (word) div16u::quotient#8 ← phi( div16u::@2/(word) div16u::quotient#1 div16u::@5/(word) div16u::quotient#2 ) - (word) div16u::dividend#5 ← phi( div16u::@2/(word) div16u::dividend#1 div16u::@5/(word) div16u::dividend#7 ) - (word) div16u::rem#9 ← phi( div16u::@2/(word) div16u::rem#5 div16u::@5/(word) div16u::rem#3 ) - (byte) div16u::i#2 ← phi( div16u::@2/(byte) div16u::i#3 div16u::@5/(byte) div16u::i#4 ) - (byte) div16u::i#1 ← ++ (byte) div16u::i#2 - (boolean~) div16u::$10 ← (byte) div16u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 16 - if((boolean~) div16u::$10) goto div16u::@1 - to:div16u::@6 -div16u::@5: scope:[div16u] from div16u::@2 - (word) div16u::dividend#7 ← phi( div16u::@2/(word) div16u::dividend#1 ) - (byte) div16u::i#4 ← phi( div16u::@2/(byte) div16u::i#3 ) - (word) div16u::divisor#2 ← phi( div16u::@2/(word) div16u::divisor#1 ) - (word) div16u::rem#7 ← phi( div16u::@2/(word) div16u::rem#5 ) - (word) div16u::quotient#4 ← phi( div16u::@2/(word) div16u::quotient#1 ) - (word) div16u::quotient#2 ← ++ (word) div16u::quotient#4 - (word~) div16u::$9 ← (word) div16u::rem#7 - (word) div16u::divisor#2 - (word) div16u::rem#3 ← (word~) div16u::$9 - to:div16u::@3 -div16u::@6: scope:[div16u] from div16u::@3 - (word) div16u::quotient#5 ← phi( div16u::@3/(word) div16u::quotient#8 ) - (word) div16u::rem#8 ← phi( div16u::@3/(word) div16u::rem#9 ) - (word) rem16u#5 ← (word) div16u::rem#8 - (word) div16u::return#1 ← (word) div16u::quotient#5 - to:div16u::@return -div16u::@return: scope:[div16u] from div16u::@6 - (word) rem16u#13 ← phi( div16u::@6/(word) rem16u#5 ) - (word) div16u::return#4 ← phi( div16u::@6/(word) div16u::return#1 ) - (word) div16u::return#2 ← (word) div16u::return#4 - (word) rem16u#6 ← (word) rem16u#13 - return - to:@return -@13: scope:[] from @8 - (word) rem16u#19 ← phi( @8/(word) rem16u#0 ) - (byte*) line_cursor#26 ← phi( @8/(byte*) line_cursor#30 ) - (byte*) char_cursor#76 ← phi( @8/(byte*) char_cursor#81 ) +@13: scope:[] from @9 + (word) rem16u#19 ← phi( @9/(word) rem16u#0 ) + (byte*) line_cursor#26 ← phi( @9/(byte*) line_cursor#30 ) + (byte*) char_cursor#76 ← phi( @9/(byte*) char_cursor#81 ) call main param-assignment to:@14 @14: scope:[] from @13 - (word) rem16u#14 ← phi( @13/(word) rem16u#2 ) + (word) rem16u#14 ← phi( @13/(word) rem16u#4 ) (byte*) line_cursor#21 ← phi( @13/(byte*) line_cursor#5 ) (byte*) char_cursor#68 ← phi( @13/(byte*) char_cursor#15 ) (byte*) char_cursor#34 ← (byte*) char_cursor#68 @@ -1508,7 +1507,7 @@ div16u::@return: scope:[div16u] from div16u::@6 SYMBOL TABLE SSA (label) @13 (label) @14 -(label) @8 +(label) @9 (label) @begin (label) @end (byte*) char_cursor @@ -2026,22 +2025,28 @@ Not aliassing across scopes: char_cursor#42 char_cursor#12 Not aliassing across scopes: char_cursor#43 char_cursor#12 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#45 char_cursor#72 +Not aliassing across scopes: div8u::dividend#4 div8u::dividend#1 +Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 +Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 +Not aliassing across scopes: div16u::dividend#4 div16u::dividend#1 +Not aliassing across scopes: div16u::divisor#5 div16u::divisor#0 +Not aliassing across scopes: rem16u#1 div16u::rem#8 Not aliassing across scopes: char_cursor#78 char_cursor#76 Not aliassing across scopes: line_cursor#27 line_cursor#26 Not aliassing across scopes: rem16u#24 rem16u#19 Not aliassing across scopes: char_cursor#47 char_cursor#33 Not aliassing across scopes: line_cursor#14 line_cursor#9 -Not aliassing across scopes: rem16u#8 rem16u#4 +Not aliassing across scopes: rem16u#9 rem16u#6 Not aliassing across scopes: char_cursor#48 char_cursor#24 Not aliassing across scopes: line_cursor#15 line_cursor#7 Not aliassing across scopes: rem16u#21 rem16u#15 Not aliassing across scopes: char_cursor#82 char_cursor#13 Not aliassing across scopes: line_cursor#45 line_cursor#3 -Not aliassing across scopes: div16u::dividend#0 test_16u::dividend#0 +Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#0 test_16u::divisor#0 -Not aliassing across scopes: div16u::return#0 div16u::return#2 -Not aliassing across scopes: rem16u#10 rem16u#6 -Not aliassing across scopes: test_16u::$0 div16u::return#3 +Not aliassing across scopes: div16u::return#2 div16u::return#1 +Not aliassing across scopes: rem16u#11 rem16u#2 +Not aliassing across scopes: test_16u::$0 div16u::return#4 Not aliassing across scopes: print_word::w#0 test_16u::dividend#1 Not aliassing across scopes: char_cursor#50 char_cursor#7 Not aliassing across scopes: char_cursor#51 char_cursor#2 @@ -2051,17 +2056,17 @@ Not aliassing across scopes: char_cursor#53 char_cursor#2 Not aliassing across scopes: print_word::w#2 test_16u::res#1 Not aliassing across scopes: char_cursor#54 char_cursor#7 Not aliassing across scopes: char_cursor#55 char_cursor#2 -Not aliassing across scopes: print_word::w#3 rem16u#11 +Not aliassing across scopes: print_word::w#3 rem16u#12 Not aliassing across scopes: char_cursor#56 char_cursor#7 Not aliassing across scopes: line_cursor#17 line_cursor#2 Not aliassing across scopes: char_cursor#57 char_cursor#4 Not aliassing across scopes: char_cursor#83 char_cursor#73 Not aliassing across scopes: line_cursor#46 line_cursor#23 -Not aliassing across scopes: div8u::dividend#0 test_8u::dividend#0 +Not aliassing across scopes: div8u::dividend#1 test_8u::dividend#0 Not aliassing across scopes: div8u::divisor#0 test_8u::divisor#0 Not aliassing across scopes: div8u::remainder#0 test_8u::rem#1 -Not aliassing across scopes: div8u::return#0 div8u::return#2 -Not aliassing across scopes: test_8u::$0 div8u::return#3 +Not aliassing across scopes: div8u::return#2 div8u::return#1 +Not aliassing across scopes: test_8u::$0 div8u::return#4 Not aliassing across scopes: print_byte::b#2 test_8u::dividend#1 Not aliassing across scopes: char_cursor#59 char_cursor#10 Not aliassing across scopes: char_cursor#60 char_cursor#2 @@ -2074,15 +2079,9 @@ Not aliassing across scopes: char_cursor#64 char_cursor#2 Not aliassing across scopes: char_cursor#65 char_cursor#10 Not aliassing across scopes: line_cursor#19 line_cursor#2 Not aliassing across scopes: char_cursor#66 char_cursor#4 -Not aliassing across scopes: div8u::dividend#4 div8u::dividend#0 -Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 -Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 -Not aliassing across scopes: div16u::dividend#4 div16u::dividend#0 -Not aliassing across scopes: div16u::divisor#5 div16u::divisor#0 -Not aliassing across scopes: rem16u#5 div16u::rem#8 Not aliassing across scopes: char_cursor#68 char_cursor#15 Not aliassing across scopes: line_cursor#21 line_cursor#5 -Not aliassing across scopes: rem16u#14 rem16u#2 +Not aliassing across scopes: rem16u#14 rem16u#4 Alias (byte*) char_cursor#0 = (byte*) line_cursor#0 (byte*) char_cursor#81 (byte*) line_cursor#30 (byte*) char_cursor#76 (byte*) line_cursor#26 Alias (byte*) print_str::str#7 = (byte*) print_str::str#8 Alias (byte*) char_cursor#2 = (byte*) char_cursor#35 (byte*) char_cursor#69 (byte*) char_cursor#36 @@ -2096,21 +2095,51 @@ Alias (byte) print_byte::b#6 = (byte) print_byte::b#7 Alias (byte*) char_cursor#42 = (byte*) char_cursor#8 Alias (byte*) char_cursor#10 = (byte*) char_cursor#9 (byte*) char_cursor#43 (byte*) char_cursor#44 Alias (byte*) char_cursor#11 = (byte*) char_cursor#46 (byte*) char_cursor#12 +Alias (byte) div8u::rem#1 = (byte~) div8u::$0 (byte) div8u::rem#6 +Alias (byte) div8u::dividend#0 = (byte~) div8u::$4 (byte) div8u::dividend#7 +Alias (byte) div8u::quotient#1 = (byte~) div8u::$5 (byte) div8u::quotient#4 +Alias (byte) div8u::dividend#2 = (byte) div8u::dividend#6 +Alias (byte) div8u::quotient#6 = (byte) div8u::quotient#7 +Alias (byte) div8u::divisor#3 = (byte) div8u::divisor#4 +Alias (byte) div8u::i#5 = (byte) div8u::i#6 +Alias (byte*) div8u::remainder#5 = (byte*) div8u::remainder#6 +Alias (byte) div8u::rem#5 = (byte) div8u::rem#7 +Alias (byte) div8u::divisor#1 = (byte) div8u::divisor#2 +Alias (byte) div8u::i#3 = (byte) div8u::i#4 +Alias (byte*) div8u::remainder#3 = (byte*) div8u::remainder#4 +Alias (byte) div8u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 +Alias (byte) div8u::rem#8 = (byte) div8u::rem#9 +Alias (byte*) div8u::remainder#1 = (byte*) div8u::remainder#2 +Alias (byte) div8u::return#0 = (byte) div8u::quotient#5 (byte) div8u::quotient#8 (byte) div8u::return#3 (byte) div8u::return#1 +Alias (word) div16u::rem#1 = (word~) div16u::$0 (word) div16u::rem#6 +Alias (word) div16u::dividend#0 = (word~) div16u::$5 (word) div16u::dividend#7 +Alias (word) div16u::quotient#1 = (word~) div16u::$6 (word) div16u::quotient#4 +Alias (word) div16u::dividend#2 = (word) div16u::dividend#6 +Alias (word) div16u::quotient#6 = (word) div16u::quotient#7 +Alias (word) div16u::divisor#3 = (word) div16u::divisor#4 +Alias (byte) div16u::i#5 = (byte) div16u::i#6 +Alias (word) div16u::rem#5 = (word) div16u::rem#7 +Alias (word) div16u::divisor#1 = (word) div16u::divisor#2 +Alias (byte) div16u::i#3 = (byte) div16u::i#4 +Alias (word) div16u::rem#3 = (word~) div16u::$9 +Alias (word) div16u::rem#8 = (word) div16u::rem#9 +Alias (word) div16u::return#0 = (word) div16u::quotient#5 (word) div16u::quotient#8 (word) div16u::return#3 (word) div16u::return#1 +Alias (word) rem16u#1 = (word) rem16u#8 (word) rem16u#2 Alias (byte*) char_cursor#73 = (byte*) char_cursor#78 Alias (byte*) line_cursor#23 = (byte*) line_cursor#27 Alias (word) rem16u#15 = (word) rem16u#20 (word) rem16u#24 Alias (byte*) char_cursor#13 = (byte*) char_cursor#47 Alias (byte*) line_cursor#14 = (byte*) line_cursor#3 -Alias (word) rem16u#1 = (word) rem16u#8 (word) rem16u#9 (word) rem16u#2 +Alias (word) rem16u#10 = (word) rem16u#3 (word) rem16u#9 (word) rem16u#4 Alias (byte*) char_cursor#14 = (byte*) char_cursor#48 (byte*) char_cursor#49 (byte*) char_cursor#15 Alias (byte*) line_cursor#15 = (byte*) line_cursor#4 (byte*) line_cursor#16 (byte*) line_cursor#5 -Alias (word) div16u::return#0 = (word) div16u::return#3 +Alias (word) div16u::return#2 = (word) div16u::return#4 Alias (word) test_16u::dividend#0 = (word) test_16u::dividend#1 Alias (byte*) char_cursor#74 = (byte*) char_cursor#79 Alias (word) test_16u::divisor#0 = (word) test_16u::divisor#3 (word) test_16u::divisor#2 (word) test_16u::divisor#1 Alias (byte*) line_cursor#24 = (byte*) line_cursor#41 (byte*) line_cursor#43 (byte*) line_cursor#39 (byte*) line_cursor#37 (byte*) line_cursor#35 (byte*) line_cursor#33 (byte*) line_cursor#31 (byte*) line_cursor#28 Alias (byte) test_16u::i#10 = (byte) test_16u::i#11 (byte) test_16u::i#2 (byte) test_16u::i#9 (byte) test_16u::i#8 (byte) test_16u::i#7 (byte) test_16u::i#6 (byte) test_16u::i#5 (byte) test_16u::i#4 (byte) test_16u::i#3 -Alias (word) rem16u#10 = (word) rem16u#3 (word) rem16u#27 (word) rem16u#26 (word) rem16u#25 (word) rem16u#22 (word) rem16u#17 (word) rem16u#11 (word) rem16u#23 (word) rem16u#18 (word) rem16u#12 (word) rem16u#4 +Alias (word) rem16u#11 = (word) rem16u#5 (word) rem16u#27 (word) rem16u#26 (word) rem16u#25 (word) rem16u#22 (word) rem16u#17 (word) rem16u#12 (word) rem16u#23 (word) rem16u#18 (word) rem16u#13 (word) rem16u#6 Alias (word) test_16u::res#0 = (word~) test_16u::$0 (word) test_16u::res#4 (word) test_16u::res#3 (word) test_16u::res#2 (word) test_16u::res#1 Alias (byte*) char_cursor#16 = (byte*) char_cursor#50 Alias (byte*) char_cursor#17 = (byte*) char_cursor#51 @@ -2122,7 +2151,7 @@ Alias (byte*) char_cursor#22 = (byte*) char_cursor#56 Alias (byte*) line_cursor#17 = (byte*) line_cursor#6 (byte*) line_cursor#18 (byte*) line_cursor#7 Alias (byte*) char_cursor#23 = (byte*) char_cursor#57 (byte*) char_cursor#58 (byte*) char_cursor#24 Alias (byte) test_16u::i#1 = (byte/word~) test_16u::$9 -Alias (byte) div8u::return#0 = (byte) div8u::return#3 +Alias (byte) div8u::return#2 = (byte) div8u::return#4 Alias (byte) test_8u::dividend#0 = (byte) test_8u::dividend#1 Alias (byte*) char_cursor#75 = (byte*) char_cursor#80 Alias (byte) test_8u::divisor#0 = (byte) test_8u::divisor#3 (byte) test_8u::divisor#2 (byte) test_8u::divisor#1 @@ -2139,36 +2168,6 @@ Alias (byte*) char_cursor#30 = (byte*) char_cursor#64 Alias (byte*) char_cursor#31 = (byte*) char_cursor#65 Alias (byte*) line_cursor#19 = (byte*) line_cursor#8 (byte*) line_cursor#20 (byte*) line_cursor#9 Alias (byte*) char_cursor#32 = (byte*) char_cursor#66 (byte*) char_cursor#67 (byte*) char_cursor#33 -Alias (byte) div8u::rem#1 = (byte~) div8u::$0 (byte) div8u::rem#6 -Alias (byte) div8u::dividend#1 = (byte~) div8u::$4 (byte) div8u::dividend#7 -Alias (byte) div8u::quotient#1 = (byte~) div8u::$5 (byte) div8u::quotient#4 -Alias (byte) div8u::dividend#2 = (byte) div8u::dividend#6 -Alias (byte) div8u::quotient#6 = (byte) div8u::quotient#7 -Alias (byte) div8u::divisor#3 = (byte) div8u::divisor#4 -Alias (byte) div8u::i#5 = (byte) div8u::i#6 -Alias (byte*) div8u::remainder#5 = (byte*) div8u::remainder#6 -Alias (byte) div8u::rem#5 = (byte) div8u::rem#7 -Alias (byte) div8u::divisor#1 = (byte) div8u::divisor#2 -Alias (byte) div8u::i#3 = (byte) div8u::i#4 -Alias (byte*) div8u::remainder#3 = (byte*) div8u::remainder#4 -Alias (byte) div8u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 -Alias (byte) div8u::rem#8 = (byte) div8u::rem#9 -Alias (byte*) div8u::remainder#1 = (byte*) div8u::remainder#2 -Alias (byte) div8u::return#1 = (byte) div8u::quotient#5 (byte) div8u::quotient#8 (byte) div8u::return#4 (byte) div8u::return#2 -Alias (word) div16u::rem#1 = (word~) div16u::$0 (word) div16u::rem#6 -Alias (word) div16u::dividend#1 = (word~) div16u::$5 (word) div16u::dividend#7 -Alias (word) div16u::quotient#1 = (word~) div16u::$6 (word) div16u::quotient#4 -Alias (word) div16u::dividend#2 = (word) div16u::dividend#6 -Alias (word) div16u::quotient#6 = (word) div16u::quotient#7 -Alias (word) div16u::divisor#3 = (word) div16u::divisor#4 -Alias (byte) div16u::i#5 = (byte) div16u::i#6 -Alias (word) div16u::rem#5 = (word) div16u::rem#7 -Alias (word) div16u::divisor#1 = (word) div16u::divisor#2 -Alias (byte) div16u::i#3 = (byte) div16u::i#4 -Alias (word) div16u::rem#3 = (word~) div16u::$9 -Alias (word) div16u::rem#8 = (word) div16u::rem#9 -Alias (word) div16u::return#1 = (word) div16u::quotient#5 (word) div16u::quotient#8 (word) div16u::return#4 (word) div16u::return#2 -Alias (word) rem16u#13 = (word) rem16u#5 (word) rem16u#6 Alias (word) rem16u#0 = (word) rem16u#19 Alias (byte*) char_cursor#34 = (byte*) char_cursor#68 Alias (byte*) line_cursor#10 = (byte*) line_cursor#21 @@ -2188,22 +2187,28 @@ Not aliassing across scopes: char_cursor#42 char_cursor#11 Not aliassing across scopes: char_cursor#10 char_cursor#11 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#45 char_cursor#72 +Not aliassing across scopes: div8u::dividend#4 div8u::dividend#1 +Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 +Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 +Not aliassing across scopes: div16u::dividend#4 div16u::dividend#1 +Not aliassing across scopes: div16u::divisor#5 div16u::divisor#0 +Not aliassing across scopes: rem16u#1 div16u::rem#8 Not aliassing across scopes: char_cursor#73 char_cursor#0 Not aliassing across scopes: line_cursor#23 char_cursor#0 Not aliassing across scopes: rem16u#15 rem16u#0 Not aliassing across scopes: char_cursor#13 char_cursor#32 Not aliassing across scopes: line_cursor#14 line_cursor#19 -Not aliassing across scopes: rem16u#1 rem16u#10 +Not aliassing across scopes: rem16u#10 rem16u#11 Not aliassing across scopes: char_cursor#14 char_cursor#23 Not aliassing across scopes: line_cursor#15 line_cursor#17 Not aliassing across scopes: rem16u#21 rem16u#15 Not aliassing across scopes: char_cursor#82 char_cursor#13 Not aliassing across scopes: line_cursor#45 line_cursor#14 -Not aliassing across scopes: div16u::dividend#0 test_16u::dividend#0 +Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#0 test_16u::divisor#0 -Not aliassing across scopes: div16u::return#0 div16u::return#1 -Not aliassing across scopes: rem16u#10 rem16u#13 -Not aliassing across scopes: test_16u::res#0 div16u::return#0 +Not aliassing across scopes: div16u::return#2 div16u::return#0 +Not aliassing across scopes: rem16u#11 rem16u#1 +Not aliassing across scopes: test_16u::res#0 div16u::return#2 Not aliassing across scopes: print_word::w#0 test_16u::dividend#0 Not aliassing across scopes: char_cursor#16 char_cursor#40 Not aliassing across scopes: char_cursor#17 char_cursor#2 @@ -2213,17 +2218,17 @@ Not aliassing across scopes: char_cursor#19 char_cursor#2 Not aliassing across scopes: print_word::w#2 test_16u::res#0 Not aliassing across scopes: char_cursor#20 char_cursor#40 Not aliassing across scopes: char_cursor#21 char_cursor#2 -Not aliassing across scopes: print_word::w#3 rem16u#10 +Not aliassing across scopes: print_word::w#3 rem16u#11 Not aliassing across scopes: char_cursor#22 char_cursor#40 Not aliassing across scopes: line_cursor#17 line_cursor#1 Not aliassing across scopes: char_cursor#23 line_cursor#1 Not aliassing across scopes: char_cursor#83 char_cursor#73 Not aliassing across scopes: line_cursor#46 line_cursor#23 -Not aliassing across scopes: div8u::dividend#0 test_8u::dividend#0 +Not aliassing across scopes: div8u::dividend#1 test_8u::dividend#0 Not aliassing across scopes: div8u::divisor#0 test_8u::divisor#0 Not aliassing across scopes: div8u::remainder#0 test_8u::rem#1 -Not aliassing across scopes: div8u::return#0 div8u::return#1 -Not aliassing across scopes: test_8u::res#0 div8u::return#0 +Not aliassing across scopes: div8u::return#2 div8u::return#0 +Not aliassing across scopes: test_8u::res#0 div8u::return#2 Not aliassing across scopes: print_byte::b#2 test_8u::dividend#0 Not aliassing across scopes: char_cursor#25 char_cursor#10 Not aliassing across scopes: char_cursor#26 char_cursor#2 @@ -2236,26 +2241,20 @@ Not aliassing across scopes: char_cursor#30 char_cursor#2 Not aliassing across scopes: char_cursor#31 char_cursor#10 Not aliassing across scopes: line_cursor#19 line_cursor#1 Not aliassing across scopes: char_cursor#32 line_cursor#1 -Not aliassing across scopes: div8u::dividend#4 div8u::dividend#0 -Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 -Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 -Not aliassing across scopes: div16u::dividend#4 div16u::dividend#0 -Not aliassing across scopes: div16u::divisor#5 div16u::divisor#0 -Not aliassing across scopes: rem16u#13 div16u::rem#8 Not aliassing across scopes: char_cursor#34 char_cursor#14 Not aliassing across scopes: line_cursor#10 line_cursor#15 -Not aliassing across scopes: rem16u#14 rem16u#1 +Not aliassing across scopes: rem16u#14 rem16u#10 Alias (byte) div8u::dividend#2 = (byte) div8u::dividend#3 Alias (byte) div8u::quotient#3 = (byte) div8u::quotient#6 Alias (byte) div8u::divisor#1 = (byte) div8u::divisor#3 (byte) div8u::divisor#6 Alias (byte) div8u::i#2 = (byte) div8u::i#3 (byte) div8u::i#5 Alias (byte*) div8u::remainder#1 = (byte*) div8u::remainder#3 (byte*) div8u::remainder#5 -Alias (byte) div8u::dividend#1 = (byte) div8u::dividend#5 +Alias (byte) div8u::dividend#0 = (byte) div8u::dividend#5 Alias (word) div16u::dividend#2 = (word) div16u::dividend#3 Alias (word) div16u::quotient#3 = (word) div16u::quotient#6 Alias (word) div16u::divisor#1 = (word) div16u::divisor#3 (word) div16u::divisor#6 Alias (byte) div16u::i#2 = (byte) div16u::i#3 (byte) div16u::i#5 -Alias (word) div16u::dividend#1 = (word) div16u::dividend#5 +Alias (word) div16u::dividend#0 = (word) div16u::dividend#5 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: print_str::str#9 print_str::str#1 Not aliassing across scopes: char_cursor#77 char_cursor#16 @@ -2271,22 +2270,28 @@ Not aliassing across scopes: char_cursor#42 char_cursor#11 Not aliassing across scopes: char_cursor#10 char_cursor#11 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#45 char_cursor#72 +Not aliassing across scopes: div8u::dividend#4 div8u::dividend#1 +Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 +Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 +Not aliassing across scopes: div16u::dividend#4 div16u::dividend#1 +Not aliassing across scopes: div16u::divisor#5 div16u::divisor#0 +Not aliassing across scopes: rem16u#1 div16u::rem#8 Not aliassing across scopes: char_cursor#73 char_cursor#0 Not aliassing across scopes: line_cursor#23 char_cursor#0 Not aliassing across scopes: rem16u#15 rem16u#0 Not aliassing across scopes: char_cursor#13 char_cursor#32 Not aliassing across scopes: line_cursor#14 line_cursor#19 -Not aliassing across scopes: rem16u#1 rem16u#10 +Not aliassing across scopes: rem16u#10 rem16u#11 Not aliassing across scopes: char_cursor#14 char_cursor#23 Not aliassing across scopes: line_cursor#15 line_cursor#17 Not aliassing across scopes: rem16u#21 rem16u#15 Not aliassing across scopes: char_cursor#82 char_cursor#13 Not aliassing across scopes: line_cursor#45 line_cursor#14 -Not aliassing across scopes: div16u::dividend#0 test_16u::dividend#0 +Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#0 test_16u::divisor#0 -Not aliassing across scopes: div16u::return#0 div16u::return#1 -Not aliassing across scopes: rem16u#10 rem16u#13 -Not aliassing across scopes: test_16u::res#0 div16u::return#0 +Not aliassing across scopes: div16u::return#2 div16u::return#0 +Not aliassing across scopes: rem16u#11 rem16u#1 +Not aliassing across scopes: test_16u::res#0 div16u::return#2 Not aliassing across scopes: print_word::w#0 test_16u::dividend#0 Not aliassing across scopes: char_cursor#16 char_cursor#40 Not aliassing across scopes: char_cursor#17 char_cursor#2 @@ -2296,17 +2301,17 @@ Not aliassing across scopes: char_cursor#19 char_cursor#2 Not aliassing across scopes: print_word::w#2 test_16u::res#0 Not aliassing across scopes: char_cursor#20 char_cursor#40 Not aliassing across scopes: char_cursor#21 char_cursor#2 -Not aliassing across scopes: print_word::w#3 rem16u#10 +Not aliassing across scopes: print_word::w#3 rem16u#11 Not aliassing across scopes: char_cursor#22 char_cursor#40 Not aliassing across scopes: line_cursor#17 line_cursor#1 Not aliassing across scopes: char_cursor#23 line_cursor#1 Not aliassing across scopes: char_cursor#83 char_cursor#73 Not aliassing across scopes: line_cursor#46 line_cursor#23 -Not aliassing across scopes: div8u::dividend#0 test_8u::dividend#0 +Not aliassing across scopes: div8u::dividend#1 test_8u::dividend#0 Not aliassing across scopes: div8u::divisor#0 test_8u::divisor#0 Not aliassing across scopes: div8u::remainder#0 test_8u::rem#1 -Not aliassing across scopes: div8u::return#0 div8u::return#1 -Not aliassing across scopes: test_8u::res#0 div8u::return#0 +Not aliassing across scopes: div8u::return#2 div8u::return#0 +Not aliassing across scopes: test_8u::res#0 div8u::return#2 Not aliassing across scopes: print_byte::b#2 test_8u::dividend#0 Not aliassing across scopes: char_cursor#25 char_cursor#10 Not aliassing across scopes: char_cursor#26 char_cursor#2 @@ -2319,38 +2324,40 @@ Not aliassing across scopes: char_cursor#30 char_cursor#2 Not aliassing across scopes: char_cursor#31 char_cursor#10 Not aliassing across scopes: line_cursor#19 line_cursor#1 Not aliassing across scopes: char_cursor#32 line_cursor#1 -Not aliassing across scopes: div8u::dividend#4 div8u::dividend#0 -Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 -Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 -Not aliassing across scopes: div16u::dividend#4 div16u::dividend#0 -Not aliassing across scopes: div16u::divisor#5 div16u::divisor#0 -Not aliassing across scopes: rem16u#13 div16u::rem#8 Not aliassing across scopes: char_cursor#34 char_cursor#14 Not aliassing across scopes: line_cursor#10 line_cursor#15 -Not aliassing across scopes: rem16u#14 rem16u#1 +Not aliassing across scopes: rem16u#14 rem16u#10 Self Phi Eliminated (byte*) char_cursor#37 -Self Phi Eliminated (byte*) test_8u::rem#1 Self Phi Eliminated (byte) div8u::divisor#1 Self Phi Eliminated (byte*) div8u::remainder#1 Self Phi Eliminated (word) div16u::divisor#1 +Self Phi Eliminated (byte*) test_8u::rem#1 Succesful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) char_cursor#37 (byte*) char_cursor#70 Redundant Phi (byte*) char_cursor#39 (byte*) char_cursor#10 Redundant Phi (byte*) char_cursor#40 (byte*) char_cursor#10 Redundant Phi (byte*) char_cursor#42 (byte*) char_cursor#11 Redundant Phi (byte*) char_cursor#10 (byte*) char_cursor#11 +Redundant Phi (byte) div8u::dividend#4 (byte) div8u::dividend#1 +Redundant Phi (byte) div8u::divisor#5 (byte) div8u::divisor#0 +Redundant Phi (byte*) div8u::remainder#7 (byte*) div8u::remainder#0 +Redundant Phi (byte) div8u::divisor#1 (byte) div8u::divisor#5 +Redundant Phi (byte*) div8u::remainder#1 (byte*) div8u::remainder#7 +Redundant Phi (word) div16u::dividend#4 (word) div16u::dividend#1 +Redundant Phi (word) div16u::divisor#5 (word) div16u::divisor#0 +Redundant Phi (word) div16u::divisor#1 (word) div16u::divisor#5 Redundant Phi (byte*) char_cursor#73 (byte*) char_cursor#0 Redundant Phi (byte*) line_cursor#23 (byte*) char_cursor#0 Redundant Phi (word) rem16u#15 (word) rem16u#0 Redundant Phi (byte*) char_cursor#13 (byte*) char_cursor#32 Redundant Phi (byte*) line_cursor#14 (byte*) line_cursor#19 -Redundant Phi (word) rem16u#1 (word) rem16u#10 +Redundant Phi (word) rem16u#10 (word) rem16u#11 Redundant Phi (byte*) char_cursor#14 (byte*) char_cursor#23 Redundant Phi (byte*) line_cursor#15 (byte*) line_cursor#17 Redundant Phi (word) rem16u#21 (word) rem16u#15 Redundant Phi (byte*) char_cursor#82 (byte*) char_cursor#13 Redundant Phi (byte*) line_cursor#45 (byte*) line_cursor#14 -Redundant Phi (word) rem16u#10 (word) rem16u#13 +Redundant Phi (word) rem16u#11 (word) rem16u#1 Redundant Phi (byte*) char_cursor#16 (byte*) char_cursor#40 Redundant Phi (byte*) char_cursor#17 (byte*) char_cursor#2 Redundant Phi (byte*) char_cursor#18 (byte*) char_cursor#40 @@ -2372,17 +2379,9 @@ Redundant Phi (byte*) char_cursor#30 (byte*) char_cursor#2 Redundant Phi (byte*) char_cursor#31 (byte*) char_cursor#10 Redundant Phi (byte*) line_cursor#19 (byte*) line_cursor#1 Redundant Phi (byte*) char_cursor#32 (byte*) line_cursor#1 -Redundant Phi (byte) div8u::dividend#4 (byte) div8u::dividend#0 -Redundant Phi (byte) div8u::divisor#5 (byte) div8u::divisor#0 -Redundant Phi (byte*) div8u::remainder#7 (byte*) div8u::remainder#0 -Redundant Phi (byte) div8u::divisor#1 (byte) div8u::divisor#5 -Redundant Phi (byte*) div8u::remainder#1 (byte*) div8u::remainder#7 -Redundant Phi (word) div16u::dividend#4 (word) div16u::dividend#0 -Redundant Phi (word) div16u::divisor#5 (word) div16u::divisor#0 -Redundant Phi (word) div16u::divisor#1 (word) div16u::divisor#5 Redundant Phi (byte*) char_cursor#34 (byte*) char_cursor#14 Redundant Phi (byte*) line_cursor#10 (byte*) line_cursor#15 -Redundant Phi (word) rem16u#14 (word) rem16u#1 +Redundant Phi (word) rem16u#14 (word) rem16u#10 Succesful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) char_cursor#77 (byte*) char_cursor#11 Redundant Phi (byte*) char_cursor#70 (byte*) char_cursor#11 @@ -2392,20 +2391,26 @@ Succesful SSA optimization Pass2RedundantPhiElimination Simple Condition (boolean~) print_str::$0 if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 Simple Condition (boolean~) print_ln::$1 if((byte*) line_cursor#1<(byte*) char_cursor#11) goto print_ln::@1 Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword~) print_cls::$0) goto print_cls::@1 -Simple Condition (boolean~) test_16u::$10 if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16u::@1 -Simple Condition (boolean~) test_8u::$9 if((byte) test_8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_8u::@1 Simple Condition (boolean~) div8u::$3 if((byte~) div8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8u::@2 Simple Condition (boolean~) div8u::$7 if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 Simple Condition (boolean~) div8u::$9 if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 Simple Condition (boolean~) div16u::$4 if((byte~) div16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div16u::@2 Simple Condition (boolean~) div16u::$8 if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 Simple Condition (boolean~) div16u::$10 if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 +Simple Condition (boolean~) test_16u::$10 if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16u::@1 +Simple Condition (boolean~) test_8u::$9 if((byte) test_8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_8u::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) char_cursor#0 = ((byte*))1024 Constant (const string) print_byte::hextab#0 = print_byte::$4 Constant (const byte*) print_cls::sc#0 = ((byte*))1024 Constant (const word/signed word/dword/signed dword) print_cls::$0 = 1024+1000 +Constant (const byte) div8u::rem#0 = 0 +Constant (const byte) div8u::quotient#0 = 0 +Constant (const byte) div8u::i#0 = 0 Constant (const word) rem16u#0 = 0 +Constant (const word) div16u::rem#0 = 0 +Constant (const word) div16u::quotient#0 = 0 +Constant (const byte) div16u::i#0 = 0 Constant (const word[]) test_16u::dividends#0 = { 65535, 65535, 65535, 65535, 65535, 65535 } Constant (const word[]) test_16u::divisors#0 = { 5, 7, 11, 13, 17, 19 } Constant (const byte) test_16u::i#0 = 0 @@ -2419,19 +2424,13 @@ Constant (const byte) test_8u::i#0 = 0 Constant (const string) print_str::str#4 = test_8u::str Constant (const string) print_str::str#5 = test_8u::str1 Constant (const string) print_str::str#6 = test_8u::str2 -Constant (const byte) div8u::rem#0 = 0 -Constant (const byte) div8u::quotient#0 = 0 -Constant (const byte) div8u::i#0 = 0 -Constant (const word) div16u::rem#0 = 0 -Constant (const word) div16u::quotient#0 = 0 -Constant (const byte) div16u::i#0 = 0 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte*) div8u::remainder#0 = test_8u::rem#0 Succesful SSA optimization Pass2ConstantIdentification 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) @8 +Culled Empty Block (label) @9 Culled Empty Block (label) main::@3 Culled Empty Block (label) @14 Succesful SSA optimization Pass2CullEmptyBlocks @@ -2442,24 +2441,24 @@ Not aliassing across scopes: print_byte::b#6 print_byte::b#0 Not aliassing across scopes: char_cursor#72 char_cursor#71 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#45 char_cursor#72 -Not aliassing across scopes: div16u::dividend#0 test_16u::dividend#0 +Not aliassing across scopes: div8u::dividend#2 div8u::dividend#1 +Not aliassing across scopes: div16u::dividend#2 div16u::dividend#1 +Not aliassing across scopes: rem16u#1 div16u::rem#8 +Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#0 test_16u::divisor#0 -Not aliassing across scopes: div16u::return#0 div16u::return#1 -Not aliassing across scopes: test_16u::res#0 div16u::return#0 +Not aliassing across scopes: div16u::return#2 div16u::return#0 +Not aliassing across scopes: test_16u::res#0 div16u::return#2 Not aliassing across scopes: print_word::w#0 test_16u::dividend#0 Not aliassing across scopes: print_word::w#1 test_16u::divisor#0 Not aliassing across scopes: print_word::w#2 test_16u::res#0 -Not aliassing across scopes: print_word::w#3 rem16u#13 -Not aliassing across scopes: div8u::dividend#0 test_8u::dividend#0 +Not aliassing across scopes: print_word::w#3 rem16u#1 +Not aliassing across scopes: div8u::dividend#1 test_8u::dividend#0 Not aliassing across scopes: div8u::divisor#0 test_8u::divisor#0 -Not aliassing across scopes: div8u::return#0 div8u::return#1 -Not aliassing across scopes: test_8u::res#0 div8u::return#0 +Not aliassing across scopes: div8u::return#2 div8u::return#0 +Not aliassing across scopes: test_8u::res#0 div8u::return#2 Not aliassing across scopes: print_byte::b#2 test_8u::dividend#0 Not aliassing across scopes: print_byte::b#3 test_8u::divisor#0 Not aliassing across scopes: print_byte::b#4 test_8u::res#0 -Not aliassing across scopes: div8u::dividend#2 div8u::dividend#0 -Not aliassing across scopes: div16u::dividend#2 div16u::dividend#0 -Not aliassing across scopes: rem16u#13 div16u::rem#8 Not aliassing across scopes: char_cursor#2 char_cursor#11 Not aliassing across scopes: print_word::w#4 print_word::w#0 Not aliassing across scopes: char_cursor#71 line_cursor#1 @@ -2467,24 +2466,24 @@ Not aliassing across scopes: print_byte::b#6 print_byte::b#0 Not aliassing across scopes: char_cursor#72 char_cursor#71 Not aliassing across scopes: print_char::ch#2 print_char::ch#0 Not aliassing across scopes: char_cursor#45 char_cursor#72 -Not aliassing across scopes: div16u::dividend#0 test_16u::dividend#0 +Not aliassing across scopes: div8u::dividend#2 div8u::dividend#1 +Not aliassing across scopes: div16u::dividend#2 div16u::dividend#1 +Not aliassing across scopes: rem16u#1 div16u::rem#8 +Not aliassing across scopes: div16u::dividend#1 test_16u::dividend#0 Not aliassing across scopes: div16u::divisor#0 test_16u::divisor#0 -Not aliassing across scopes: div16u::return#0 div16u::return#1 -Not aliassing across scopes: test_16u::res#0 div16u::return#0 +Not aliassing across scopes: div16u::return#2 div16u::return#0 +Not aliassing across scopes: test_16u::res#0 div16u::return#2 Not aliassing across scopes: print_word::w#0 test_16u::dividend#0 Not aliassing across scopes: print_word::w#1 test_16u::divisor#0 Not aliassing across scopes: print_word::w#2 test_16u::res#0 -Not aliassing across scopes: print_word::w#3 rem16u#13 -Not aliassing across scopes: div8u::dividend#0 test_8u::dividend#0 +Not aliassing across scopes: print_word::w#3 rem16u#1 +Not aliassing across scopes: div8u::dividend#1 test_8u::dividend#0 Not aliassing across scopes: div8u::divisor#0 test_8u::divisor#0 -Not aliassing across scopes: div8u::return#0 div8u::return#1 -Not aliassing across scopes: test_8u::res#0 div8u::return#0 +Not aliassing across scopes: div8u::return#2 div8u::return#0 +Not aliassing across scopes: test_8u::res#0 div8u::return#2 Not aliassing across scopes: print_byte::b#2 test_8u::dividend#0 Not aliassing across scopes: print_byte::b#3 test_8u::divisor#0 Not aliassing across scopes: print_byte::b#4 test_8u::res#0 -Not aliassing across scopes: div8u::dividend#2 div8u::dividend#0 -Not aliassing across scopes: div16u::dividend#2 div16u::dividend#0 -Not aliassing across scopes: rem16u#13 div16u::rem#8 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const string) print_str::str#1 @@ -2506,10 +2505,6 @@ Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_cls::sc#0 Inlining constant with var siblings (const byte*) print_cls::sc#0 -Inlining constant with var siblings (const byte) test_16u::i#0 -Inlining constant with var siblings (const byte) test_16u::i#0 -Inlining constant with var siblings (const byte) test_8u::i#0 -Inlining constant with var siblings (const byte) test_8u::i#0 Inlining constant with var siblings (const byte) div8u::rem#0 Inlining constant with var siblings (const byte) div8u::rem#0 Inlining constant with var siblings (const byte) div8u::rem#0 @@ -2532,6 +2527,10 @@ Inlining constant with var siblings (const word) div16u::quotient#0 Inlining constant with var siblings (const word) div16u::quotient#0 Inlining constant with var siblings (const byte) div16u::i#0 Inlining constant with var siblings (const byte) div16u::i#0 +Inlining constant with var siblings (const byte) test_16u::i#0 +Inlining constant with var siblings (const byte) test_16u::i#0 +Inlining constant with var siblings (const byte) test_8u::i#0 +Inlining constant with var siblings (const byte) test_8u::i#0 Inlining constant with var siblings (const byte*) char_cursor#0 Inlining constant with var siblings (const byte*) char_cursor#0 Inlining constant with var siblings (const byte*) char_cursor#0 @@ -2639,7 +2638,7 @@ Coalesced [39] print_word::w#9 ← print_word::w#3 Coalesced (already) [40] char_cursor#87 ← char_cursor#2 Coalesced [42] line_cursor#47 ← line_cursor#1 Coalesced [47] test_16u::i#12 ← test_16u::i#1 -Coalesced [48] rem16u#28 ← rem16u#13 +Coalesced [48] rem16u#28 ← rem16u#1 Coalesced [50] line_cursor#49 ← line_cursor#22 Coalesced (already) [55] line_cursor#50 ← line_cursor#1 Coalesced [58] print_byte::b#8 ← print_byte::b#0 @@ -2654,14 +2653,14 @@ Coalesced [83] print_str::str#10 ← print_str::str#9 Coalesced (already) [84] char_cursor#96 ← char_cursor#11 Coalesced [91] print_str::str#11 ← print_str::str#0 Coalesced [92] char_cursor#97 ← char_cursor#1 -Coalesced [93] div16u::dividend#8 ← div16u::dividend#0 +Coalesced [93] div16u::dividend#8 ← div16u::dividend#1 Coalesced [100] div16u::rem#12 ← div16u::rem#2 Coalesced [107] div16u::rem#14 ← div16u::rem#3 Coalesced [108] div16u::return#6 ← div16u::quotient#2 -Coalesced [112] rem16u#13 ← div16u::rem#8 +Coalesced [112] rem16u#1 ← div16u::rem#8 Coalesced [114] div16u::rem#10 ← div16u::rem#8 -Coalesced [115] div16u::dividend#9 ← div16u::dividend#1 -Coalesced [116] div16u::quotient#9 ← div16u::return#1 +Coalesced [115] div16u::dividend#9 ← div16u::dividend#0 +Coalesced [116] div16u::quotient#9 ← div16u::return#0 Coalesced [117] div16u::i#7 ← div16u::i#1 Coalesced [118] div16u::rem#13 ← div16u::rem#5 Coalesced [119] div16u::return#5 ← div16u::quotient#1 @@ -2678,13 +2677,13 @@ Coalesced [152] line_cursor#48 ← line_cursor#25 Coalesced [157] test_8u::i#12 ← test_8u::i#1 Not coalescing [158] char_cursor#98 ← line_cursor#1 Coalesced (already) [159] line_cursor#51 ← line_cursor#1 -Coalesced [160] div8u::dividend#8 ← div8u::dividend#0 +Coalesced [160] div8u::dividend#8 ← div8u::dividend#1 Coalesced [166] div8u::rem#12 ← div8u::rem#2 Coalesced [173] div8u::rem#14 ← div8u::rem#3 Coalesced [174] div8u::return#6 ← div8u::quotient#2 Coalesced [180] div8u::rem#10 ← div8u::rem#8 -Coalesced [181] div8u::dividend#9 ← div8u::dividend#1 -Coalesced [182] div8u::quotient#9 ← div8u::return#1 +Coalesced [181] div8u::dividend#9 ← div8u::dividend#0 +Coalesced [182] div8u::quotient#9 ← div8u::return#0 Coalesced [183] div8u::i#7 ← div8u::i#1 Coalesced [184] div8u::rem#13 ← div8u::rem#5 Coalesced [185] div8u::return#5 ← div8u::quotient#1 @@ -2779,13 +2778,13 @@ test_16u::@1: scope:[test_16u] from test_16u test_16u::@11 [12] (byte) test_16u::i#10 ← phi( test_16u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_16u::@11/(byte) test_16u::i#1 ) [ test_16u::i#10 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 line_cursor#1 ] ) [13] (word) test_16u::dividend#0 ← *((const word[]) test_16u::dividends#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ) [14] (word) test_16u::divisor#0 ← *((const word[]) test_16u::divisors#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ) - [15] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ) - [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ) - [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ) - [18] (word) div16u::return#0 ← (word) div16u::return#1 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) + [15] (word) div16u::dividend#1 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ) + [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ) + [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) + [18] (word) div16u::return#2 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ) to:test_16u::@3 test_16u::@3: scope:[test_16u] from test_16u::@1 - [19] (word) test_16u::res#0 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) + [19] (word) test_16u::res#0 ← (word) div16u::return#2 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) [20] (word) print_word::w#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ) [21] (byte*~) char_cursor#84 ← (byte*) line_cursor#1 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ) [22] call print_word param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 line_cursor#1 char_cursor#11 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 line_cursor#1 char_cursor#11 ] ) @@ -2890,12 +2889,12 @@ print_str::@2: scope:[print_str] from print_str::@1 [69] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::test_16u:9::print_str:24 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_16u:9::print_str:28 [ test_16u::i#10 div16u::rem#8 test_16u::res#0 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_16u:9::print_str:32 [ test_16u::i#10 div16u::rem#8 line_cursor#1 print_str::str#0 char_cursor#1 ] main:2::test_8u:7::print_str:99 [ line_cursor#25 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 print_str::str#0 char_cursor#1 ] main:2::test_8u:7::print_str:103 [ line_cursor#25 test_8u::i#10 test_8u::res#0 print_str::str#0 char_cursor#1 ] main:2::test_8u:7::print_str:107 [ line_cursor#25 test_8u::i#10 print_str::str#0 char_cursor#1 ] ) to:print_str::@1 div16u: scope:[div16u] from test_16u::@1 - [70] phi() [ div16u::dividend#0 div16u::divisor#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::dividend#0 div16u::divisor#0 ] ) + [70] phi() [ div16u::dividend#1 div16u::divisor#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::dividend#1 div16u::divisor#0 ] ) to:div16u::@1 div16u::@1: scope:[div16u] from div16u div16u::@3 [71] (byte) div16u::i#2 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(byte) div16u::i#1 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) - [71] (word) div16u::quotient#3 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(word) div16u::return#1 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) - [71] (word) div16u::dividend#2 ← phi( div16u/(word) div16u::dividend#0 div16u::@3/(word) div16u::dividend#1 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) + [71] (word) div16u::quotient#3 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(word) div16u::return#0 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) + [71] (word) div16u::dividend#2 ← phi( div16u/(word) div16u::dividend#1 div16u::@3/(word) div16u::dividend#0 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) [71] (word) div16u::rem#4 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div16u::@3/(word) div16u::rem#8 ) [ div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::rem#4 div16u::dividend#2 div16u::quotient#3 div16u::i#2 ] ) [72] (word) div16u::rem#1 ← (word) div16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 ] ) [73] (byte~) div16u::$1 ← > (word) div16u::dividend#2 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ) @@ -2907,22 +2906,22 @@ div16u::@4: scope:[div16u] from div16u::@1 to:div16u::@2 div16u::@2: scope:[div16u] from div16u::@1 div16u::@4 [77] (word) div16u::rem#5 ← phi( div16u::@1/(word) div16u::rem#1 div16u::@4/(word) div16u::rem#2 ) [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#5 ] ) - [78] (word) div16u::dividend#1 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ) - [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) - [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) + [78] (word) div16u::dividend#0 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ) + [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) + [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) to:div16u::@5 div16u::@5: scope:[div16u] from div16u::@2 - [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ) - [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ) + [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ) + [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ) to:div16u::@3 div16u::@3: scope:[div16u] from div16u::@2 div16u::@5 - [83] (word) div16u::return#1 ← phi( div16u::@2/(word) div16u::quotient#1 div16u::@5/(word) div16u::quotient#2 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ) - [83] (word) div16u::rem#8 ← phi( div16u::@2/(word) div16u::rem#5 div16u::@5/(word) div16u::rem#3 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::i#2 div16u::dividend#1 ] ) - [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) - [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) + [83] (word) div16u::return#0 ← phi( div16u::@2/(word) div16u::quotient#1 div16u::@5/(word) div16u::quotient#2 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ) + [83] (word) div16u::rem#8 ← phi( div16u::@2/(word) div16u::rem#5 div16u::@5/(word) div16u::rem#3 ) [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::i#2 div16u::dividend#0 ] ) + [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) + [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) to:div16u::@return div16u::@return: scope:[div16u] from div16u::@3 - [86] return [ div16u::rem#8 div16u::return#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#1 ] ) + [86] return [ div16u::rem#8 div16u::return#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#0 ] ) to:@return test_8u: scope:[test_8u] from main::@1 [87] phi() [ ] ( main:2::test_8u:7 [ ] ) @@ -2933,13 +2932,13 @@ test_8u::@1: scope:[test_8u] from test_8u test_8u::@12 [88] (byte) test_8u::i#10 ← phi( test_8u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_8u::@12/(byte) test_8u::i#1 ) [ line_cursor#25 char_cursor#75 test_8u::i#10 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 ] ) [89] (byte) test_8u::dividend#0 ← *((const byte[]) test_8u::dividends#0 + (byte) test_8u::i#10) [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 ] ) [90] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ) - [91] (byte) div8u::dividend#0 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ) - [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) - [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) - [94] (byte) div8u::return#0 ← (byte) div8u::return#1 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) + [91] (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ) + [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ) + [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) + [94] (byte) div8u::return#2 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ) to:test_8u::@3 test_8u::@3: scope:[test_8u] from test_8u::@1 - [95] (byte) test_8u::res#0 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) + [95] (byte) test_8u::res#0 ← (byte) div8u::return#2 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) [96] (byte) print_byte::b#2 ← (byte) test_8u::dividend#0 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ) [97] call print_byte param-assignment [ line_cursor#25 char_cursor#11 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#11 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ) to:test_8u::@4 @@ -2982,12 +2981,12 @@ test_8u::@12: scope:[test_8u] from test_8u::@11 [115] (byte*~) char_cursor#98 ← (byte*) line_cursor#1 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ( main:2::test_8u:7 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ) to:test_8u::@1 div8u: scope:[div8u] from test_8u::@1 - [116] phi() [ div8u::dividend#0 div8u::divisor#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + [116] phi() [ div8u::dividend#1 div8u::divisor#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ) to:div8u::@1 div8u::@1: scope:[div8u] from div8u div8u::@3 [117] (byte) div8u::i#2 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::i#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) - [117] (byte) div8u::quotient#3 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::return#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) - [117] (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#0 div8u::@3/(byte) div8u::dividend#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [117] (byte) div8u::quotient#3 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::return#0 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [117] (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#1 div8u::@3/(byte) div8u::dividend#0 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) [117] (byte) div8u::rem#4 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::rem#8 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) [118] (byte) div8u::rem#1 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) [119] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) @@ -2998,25 +2997,25 @@ div8u::@4: scope:[div8u] from div8u::@1 to:div8u::@2 div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 [122] (byte) div8u::rem#5 ← phi( div8u::@1/(byte) div8u::rem#1 div8u::@4/(byte) div8u::rem#2 ) [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ) - [123] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) - [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) - [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) + [123] (byte) div8u::dividend#0 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ) + [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) + [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) to:div8u::@5 div8u::@5: scope:[div8u] from div8u::@2 - [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) - [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) + [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ) + [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ) to:div8u::@3 div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 - [128] (byte) div8u::return#1 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) - [128] (byte) div8u::rem#8 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) - [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) - [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) + [128] (byte) div8u::return#0 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) [ div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ) + [128] (byte) div8u::rem#8 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) [ div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::i#2 div8u::rem#8 div8u::dividend#0 ] ) + [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) + [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) to:div8u::@6 div8u::@6: scope:[div8u] from div8u::@3 - [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) to:div8u::@return div8u::@return: scope:[div8u] from div8u::@6 - [132] return [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + [132] return [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) to:@return print_cls: scope:[print_cls] from main [133] phi() [ ] ( main:2::print_cls:5 [ ] ) @@ -3165,8 +3164,8 @@ VARIABLE REGISTER WEIGHTS (byte~) div16u::$1 202.0 (byte~) div16u::$2 202.0 (word) div16u::dividend -(word) div16u::dividend#0 4.333333333333333 -(word) div16u::dividend#1 25.25 +(word) div16u::dividend#0 25.25 +(word) div16u::dividend#1 4.333333333333333 (word) div16u::dividend#2 43.57142857142858 (word) div16u::divisor (word) div16u::divisor#0 12.529411764705884 @@ -3185,13 +3184,13 @@ VARIABLE REGISTER WEIGHTS (word) div16u::rem#5 101.0 (word) div16u::rem#8 12.5 (word) div16u::return -(word) div16u::return#0 22.0 -(word) div16u::return#1 62.8 +(word) div16u::return#0 62.8 +(word) div16u::return#2 22.0 (byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) (byte~) div8u::$1 202.0 (byte) div8u::dividend -(byte) div8u::dividend#0 4.333333333333333 -(byte) div8u::dividend#1 25.25 +(byte) div8u::dividend#0 25.25 +(byte) div8u::dividend#1 4.333333333333333 (byte) div8u::dividend#2 50.83333333333333 (byte) div8u::divisor (byte) div8u::divisor#0 13.3125 @@ -3211,8 +3210,8 @@ VARIABLE REGISTER WEIGHTS (byte) div8u::rem#8 101.66666666666667 (byte*) div8u::remainder (byte) div8u::return -(byte) div8u::return#0 22.0 -(byte) div8u::return#1 52.33333333333333 +(byte) div8u::return#0 52.33333333333333 +(byte) div8u::return#2 22.0 (byte*) line_cursor (byte*) line_cursor#1 9.131578947368421 (byte*) line_cursor#11 204.0 @@ -3290,19 +3289,19 @@ Initial phi equivalence classes [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] [ print_str::str#7 print_str::str#9 print_str::str#0 ] [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] -[ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] -[ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 ] +[ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] +[ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 ] [ div16u::i#2 div16u::i#1 ] [ test_8u::i#10 test_8u::i#1 ] [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] -[ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -[ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +[ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +[ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] [ div8u::i#2 div8u::i#1 ] [ print_cls::sc#2 print_cls::sc#1 ] Added variable test_16u::dividend#0 to zero page equivalence class [ test_16u::dividend#0 ] Added variable test_16u::divisor#0 to zero page equivalence class [ test_16u::divisor#0 ] Added variable div16u::divisor#0 to zero page equivalence class [ div16u::divisor#0 ] -Added variable div16u::return#0 to zero page equivalence class [ div16u::return#0 ] +Added variable div16u::return#2 to zero page equivalence class [ div16u::return#2 ] Added variable test_16u::res#0 to zero page equivalence class [ test_16u::res#0 ] Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] @@ -3311,7 +3310,7 @@ Added variable div16u::$2 to zero page equivalence class [ div16u::$2 ] Added variable test_8u::dividend#0 to zero page equivalence class [ test_8u::dividend#0 ] Added variable test_8u::divisor#0 to zero page equivalence class [ test_8u::divisor#0 ] Added variable div8u::divisor#0 to zero page equivalence class [ div8u::divisor#0 ] -Added variable div8u::return#0 to zero page equivalence class [ div8u::return#0 ] +Added variable div8u::return#2 to zero page equivalence class [ div8u::return#2 ] Added variable test_8u::res#0 to zero page equivalence class [ test_8u::res#0 ] Added variable div8u::$1 to zero page equivalence class [ div8u::$1 ] Complete equivalence classes @@ -3323,19 +3322,19 @@ Complete equivalence classes [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] [ print_str::str#7 print_str::str#9 print_str::str#0 ] [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] -[ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] -[ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 ] +[ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] +[ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 ] [ div16u::i#2 div16u::i#1 ] [ test_8u::i#10 test_8u::i#1 ] [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] -[ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -[ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +[ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +[ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] [ div8u::i#2 div8u::i#1 ] [ print_cls::sc#2 print_cls::sc#1 ] [ test_16u::dividend#0 ] [ test_16u::divisor#0 ] [ div16u::divisor#0 ] -[ div16u::return#0 ] +[ div16u::return#2 ] [ test_16u::res#0 ] [ print_byte::$0 ] [ print_byte::$2 ] @@ -3344,7 +3343,7 @@ Complete equivalence classes [ test_8u::dividend#0 ] [ test_8u::divisor#0 ] [ div8u::divisor#0 ] -[ div8u::return#0 ] +[ div8u::return#2 ] [ test_8u::res#0 ] [ div8u::$1 ] Allocated zp ZP_BYTE:2 [ test_16u::i#10 test_16u::i#1 ] @@ -3355,19 +3354,19 @@ Allocated zp ZP_BYTE:8 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Allocated zp ZP_WORD:9 [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] Allocated zp ZP_WORD:11 [ print_str::str#7 print_str::str#9 print_str::str#0 ] Allocated zp ZP_WORD:13 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] -Allocated zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] -Allocated zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 ] +Allocated zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] +Allocated zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 ] Allocated zp ZP_BYTE:19 [ div16u::i#2 div16u::i#1 ] Allocated zp ZP_BYTE:20 [ test_8u::i#10 test_8u::i#1 ] Allocated zp ZP_BYTE:21 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] -Allocated zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -Allocated zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Allocated zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +Allocated zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] Allocated zp ZP_BYTE:24 [ div8u::i#2 div8u::i#1 ] Allocated zp ZP_WORD:25 [ print_cls::sc#2 print_cls::sc#1 ] Allocated zp ZP_WORD:27 [ test_16u::dividend#0 ] Allocated zp ZP_WORD:29 [ test_16u::divisor#0 ] Allocated zp ZP_WORD:31 [ div16u::divisor#0 ] -Allocated zp ZP_WORD:33 [ div16u::return#0 ] +Allocated zp ZP_WORD:33 [ div16u::return#2 ] Allocated zp ZP_WORD:35 [ test_16u::res#0 ] Allocated zp ZP_BYTE:37 [ print_byte::$0 ] Allocated zp ZP_BYTE:38 [ print_byte::$2 ] @@ -3376,7 +3375,7 @@ Allocated zp ZP_BYTE:40 [ div16u::$2 ] Allocated zp ZP_BYTE:41 [ test_8u::dividend#0 ] Allocated zp ZP_BYTE:42 [ test_8u::divisor#0 ] Allocated zp ZP_BYTE:43 [ div8u::divisor#0 ] -Allocated zp ZP_BYTE:44 [ div8u::return#0 ] +Allocated zp ZP_BYTE:44 [ div8u::return#2 ] Allocated zp ZP_BYTE:45 [ test_8u::res#0 ] Allocated zp ZP_BYTE:46 [ div8u::$1 ] @@ -3471,32 +3470,32 @@ test_16u: { sta divisor lda divisors+1,y sta divisor+1 - //SEG32 [15] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ) -- vwuz1=vwuz2 + //SEG32 [15] (word) div16u::dividend#1 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ) -- vwuz1=vwuz2 lda dividend sta div16u.dividend lda dividend+1 sta div16u.dividend+1 - //SEG33 [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ) -- vwuz1=vwuz2 + //SEG33 [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ) -- vwuz1=vwuz2 lda divisor sta div16u.divisor lda divisor+1 sta div16u.divisor+1 - //SEG34 [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ) + //SEG34 [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) //SEG35 [70] phi from test_16u::@1 to div16u [phi:test_16u::@1->div16u] div16u_from_b1: jsr div16u - //SEG36 [18] (word) div16u::return#0 ← (word) div16u::return#1 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) -- vwuz1=vwuz2 - lda div16u.return_1 - sta div16u.return - lda div16u.return_1+1 - sta div16u.return+1 + //SEG36 [18] (word) div16u::return#2 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ) -- vwuz1=vwuz2 + lda div16u.return + sta div16u.return_2 + lda div16u.return+1 + sta div16u.return_2+1 jmp b3 //SEG37 test_16u::@3 b3: - //SEG38 [19] (word) test_16u::res#0 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) -- vwuz1=vwuz2 - lda div16u.return + //SEG38 [19] (word) test_16u::res#0 ← (word) div16u::return#2 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) -- vwuz1=vwuz2 + lda div16u.return_2 sta res - lda div16u.return+1 + lda div16u.return_2+1 sta res+1 //SEG39 [20] (word) print_word::w#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ) -- vwuz1=vwuz2 lda dividend @@ -3801,13 +3800,13 @@ print_str: { div16u: { .label _1 = $27 .label _2 = $28 - .label dividend = $f - .label divisor = $1f - .label return = $21 .label rem = $d + .label dividend = $f .label quotient = $11 .label i = $13 - .label return_1 = $11 + .label return = $11 + .label divisor = $1f + .label return_2 = $21 //SEG144 [71] phi from div16u to div16u::@1 [phi:div16u->div16u::@1] b1_from_div16u: //SEG145 [71] phi (byte) div16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#0] -- vbuz1=vbuc1 @@ -3818,7 +3817,7 @@ div16u: { sta quotient lda #0 sta quotient+1 - //SEG147 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#0 [phi:div16u->div16u::@1#2] -- register_copy + //SEG147 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#1 [phi:div16u->div16u::@1#2] -- register_copy //SEG148 [71] phi (word) div16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#3] -- vwuz1=vbuc1 lda #0 sta rem @@ -3828,8 +3827,8 @@ div16u: { //SEG149 [71] phi from div16u::@3 to div16u::@1 [phi:div16u::@3->div16u::@1] b1_from_b3: //SEG150 [71] phi (byte) div16u::i#2 = (byte) div16u::i#1 [phi:div16u::@3->div16u::@1#0] -- register_copy - //SEG151 [71] phi (word) div16u::quotient#3 = (word) div16u::return#1 [phi:div16u::@3->div16u::@1#1] -- register_copy - //SEG152 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#1 [phi:div16u::@3->div16u::@1#2] -- register_copy + //SEG151 [71] phi (word) div16u::quotient#3 = (word) div16u::return#0 [phi:div16u::@3->div16u::@1#1] -- register_copy + //SEG152 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#0 [phi:div16u::@3->div16u::@1#2] -- register_copy //SEG153 [71] phi (word) div16u::rem#4 = (word) div16u::rem#8 [phi:div16u::@3->div16u::@1#3] -- register_copy jmp b1 //SEG154 div16u::@1 @@ -3862,13 +3861,13 @@ div16u: { jmp b2 //SEG163 div16u::@2 b2: - //SEG164 [78] (word) div16u::dividend#1 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG164 [78] (word) div16u::dividend#0 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG165 [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG165 [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG166 [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG166 [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -3880,12 +3879,12 @@ div16u: { jmp b5 //SEG167 div16u::@5 b5: - //SEG168 [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG168 [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG169 [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG169 [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -3896,21 +3895,21 @@ div16u: { //SEG170 [83] phi from div16u::@2 div16u::@5 to div16u::@3 [phi:div16u::@2/div16u::@5->div16u::@3] b3_from_b2: b3_from_b5: - //SEG171 [83] phi (word) div16u::return#1 = (word) div16u::quotient#1 [phi:div16u::@2/div16u::@5->div16u::@3#0] -- register_copy + //SEG171 [83] phi (word) div16u::return#0 = (word) div16u::quotient#1 [phi:div16u::@2/div16u::@5->div16u::@3#0] -- register_copy //SEG172 [83] phi (word) div16u::rem#8 = (word) div16u::rem#5 [phi:div16u::@2/div16u::@5->div16u::@3#1] -- register_copy jmp b3 //SEG173 div16u::@3 b3: - //SEG174 [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG174 [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG175 [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG175 [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #$10 bne b1_from_b3 jmp breturn //SEG176 div16u::@return breturn: - //SEG177 [86] return [ div16u::rem#8 div16u::return#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#1 ] ) + //SEG177 [86] return [ div16u::rem#8 div16u::return#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#0 ] ) rts } //SEG178 test_8u @@ -3946,24 +3945,24 @@ test_8u: { ldy i lda divisors,y sta divisor - //SEG186 [91] (byte) div8u::dividend#0 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ) -- vbuz1=vbuz2 + //SEG186 [91] (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ) -- vbuz1=vbuz2 lda dividend sta div8u.dividend - //SEG187 [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) -- vbuz1=vbuz2 + //SEG187 [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ) -- vbuz1=vbuz2 lda divisor sta div8u.divisor - //SEG188 [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + //SEG188 [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) //SEG189 [116] phi from test_8u::@1 to div8u [phi:test_8u::@1->div8u] div8u_from_b1: jsr div8u - //SEG190 [94] (byte) div8u::return#0 ← (byte) div8u::return#1 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) -- vbuz1=vbuz2 - lda div8u.return_1 - sta div8u.return + //SEG190 [94] (byte) div8u::return#2 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ) -- vbuz1=vbuz2 + lda div8u.return + sta div8u.return_2 jmp b3 //SEG191 test_8u::@3 b3: - //SEG192 [95] (byte) test_8u::res#0 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuz1=vbuz2 - lda div8u.return + //SEG192 [95] (byte) test_8u::res#0 ← (byte) div8u::return#2 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuz1=vbuz2 + lda div8u.return_2 sta res //SEG193 [96] (byte) print_byte::b#2 ← (byte) test_8u::dividend#0 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuz1=vbuz2 lda dividend @@ -4098,13 +4097,13 @@ test_8u: { //SEG247 div8u div8u: { .label _1 = $2e - .label dividend = $16 - .label divisor = $2b - .label return = $2c .label rem = $15 + .label dividend = $16 .label quotient = $17 .label i = $18 - .label return_1 = $17 + .label return = $17 + .label divisor = $2b + .label return_2 = $2c //SEG248 [117] phi from div8u to div8u::@1 [phi:div8u->div8u::@1] b1_from_div8u: //SEG249 [117] phi (byte) div8u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#0] -- vbuz1=vbuc1 @@ -4113,7 +4112,7 @@ div8u: { //SEG250 [117] phi (byte) div8u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#1] -- vbuz1=vbuc1 lda #0 sta quotient - //SEG251 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u->div8u::@1#2] -- register_copy + //SEG251 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u->div8u::@1#2] -- register_copy //SEG252 [117] phi (byte) div8u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#3] -- vbuz1=vbuc1 lda #0 sta rem @@ -4121,8 +4120,8 @@ div8u: { //SEG253 [117] phi from div8u::@3 to div8u::@1 [phi:div8u::@3->div8u::@1] b1_from_b3: //SEG254 [117] phi (byte) div8u::i#2 = (byte) div8u::i#1 [phi:div8u::@3->div8u::@1#0] -- register_copy - //SEG255 [117] phi (byte) div8u::quotient#3 = (byte) div8u::return#1 [phi:div8u::@3->div8u::@1#1] -- register_copy - //SEG256 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u::@3->div8u::@1#2] -- register_copy + //SEG255 [117] phi (byte) div8u::quotient#3 = (byte) div8u::return#0 [phi:div8u::@3->div8u::@1#1] -- register_copy + //SEG256 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u::@3->div8u::@1#2] -- register_copy //SEG257 [117] phi (byte) div8u::rem#4 = (byte) div8u::rem#8 [phi:div8u::@3->div8u::@1#3] -- register_copy jmp b1 //SEG258 div8u::@1 @@ -4148,20 +4147,20 @@ div8u: { jmp b2 //SEG266 div8u::@2 b2: - //SEG267 [123] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 + //SEG267 [123] (byte) div8u::dividend#0 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 asl dividend - //SEG268 [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 + //SEG268 [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 asl quotient - //SEG269 [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1_lt_vbuz2_then_la1 + //SEG269 [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1_lt_vbuz2_then_la1 lda rem cmp divisor bcc b3_from_b2 jmp b5 //SEG270 div8u::@5 b5: - //SEG271 [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 + //SEG271 [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 inc quotient - //SEG272 [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) -- vbuz1=vbuz1_minus_vbuz2 + //SEG272 [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ) -- vbuz1=vbuz1_minus_vbuz2 lda rem sec sbc divisor @@ -4169,27 +4168,27 @@ div8u: { //SEG273 [128] phi from div8u::@2 div8u::@5 to div8u::@3 [phi:div8u::@2/div8u::@5->div8u::@3] b3_from_b2: b3_from_b5: - //SEG274 [128] phi (byte) div8u::return#1 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy + //SEG274 [128] phi (byte) div8u::return#0 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy //SEG275 [128] phi (byte) div8u::rem#8 = (byte) div8u::rem#5 [phi:div8u::@2/div8u::@5->div8u::@3#1] -- register_copy jmp b3 //SEG276 div8u::@3 b3: - //SEG277 [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG277 [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG278 [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG278 [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #8 bne b1_from_b3 jmp b6 //SEG279 div8u::@6 b6: - //SEG280 [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) -- _deref_pbuc1=vbuz1 + //SEG280 [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) -- _deref_pbuc1=vbuz1 lda rem sta test_8u.rem jmp breturn //SEG281 div8u::@return breturn: - //SEG282 [132] return [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + //SEG282 [132] return [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) rts } //SEG283 print_cls @@ -4236,10 +4235,10 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [13] (word) test_16u::dividend#0 ← *((const word[]) test_16u::dividends#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ test_16u::i#10 test_16u::i#1 ] Statement [14] (word) test_16u::divisor#0 ← *((const word[]) test_16u::divisors#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [15] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [18] (word) div16u::return#0 ← (word) div16u::return#1 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [19] (word) test_16u::res#0 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) always clobbers reg byte a +Statement [15] (word) div16u::dividend#1 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ) always clobbers reg byte a +Statement [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ) always clobbers reg byte a +Statement [18] (word) div16u::return#2 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ) always clobbers reg byte a +Statement [19] (word) test_16u::res#0 ← (word) div16u::return#2 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) always clobbers reg byte a Statement [20] (word) print_word::w#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ) always clobbers reg byte a Statement [21] (byte*~) char_cursor#84 ← (byte*) line_cursor#1 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ) always clobbers reg byte a Statement [25] (word) print_word::w#1 ← (word) test_16u::divisor#0 [ test_16u::i#10 div16u::rem#8 test_16u::res#0 line_cursor#1 print_word::w#1 char_cursor#2 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::res#0 line_cursor#1 print_word::w#1 char_cursor#2 ] ) always clobbers reg byte a @@ -4265,26 +4264,26 @@ Statement [67] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_c Statement [73] (byte~) div16u::$1 ← > (word) div16u::dividend#2 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ div16u::i#2 div16u::i#1 ] Statement [74] (byte~) div16u::$2 ← (byte~) div16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$2 ] ) always clobbers reg byte a -Statement [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) always clobbers reg byte a -Statement [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ) always clobbers reg byte a +Statement [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) always clobbers reg byte a +Statement [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ) always clobbers reg byte a Statement [90] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ test_8u::dividend#0 ] Statement [115] (byte*~) char_cursor#98 ← (byte*) line_cursor#1 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ( main:2::test_8u:7 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ) always clobbers reg byte a Statement [119] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:43 [ div8u::divisor#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ div8u::i#2 div8u::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] -Statement [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) always clobbers reg byte a +Statement [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ) always clobbers reg byte a Statement [135] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y Statement [137] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a Statement [13] (word) test_16u::dividend#0 ← *((const word[]) test_16u::dividends#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 line_cursor#1 ] ) always clobbers reg byte a Statement [14] (word) test_16u::divisor#0 ← *((const word[]) test_16u::divisors#0 + (byte) test_16u::i#10) [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [15] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [18] (word) div16u::return#0 ← (word) div16u::return#1 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) always clobbers reg byte a -Statement [19] (word) test_16u::res#0 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) always clobbers reg byte a +Statement [15] (word) div16u::dividend#1 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ) always clobbers reg byte a +Statement [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ) always clobbers reg byte a +Statement [18] (word) div16u::return#2 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ) always clobbers reg byte a +Statement [19] (word) test_16u::res#0 ← (word) div16u::return#2 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) always clobbers reg byte a Statement [20] (word) print_word::w#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ) always clobbers reg byte a Statement [21] (byte*~) char_cursor#84 ← (byte*) line_cursor#1 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ) always clobbers reg byte a Statement [25] (word) print_word::w#1 ← (word) test_16u::divisor#0 [ test_16u::i#10 div16u::rem#8 test_16u::res#0 line_cursor#1 print_word::w#1 char_cursor#2 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::res#0 line_cursor#1 print_word::w#1 char_cursor#2 ] ) always clobbers reg byte a @@ -4301,12 +4300,12 @@ Statement [65] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ Statement [67] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::test_16u:9::print_str:24 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 line_cursor#1 char_cursor#2 print_str::str#7 ] main:2::test_16u:9::print_str:28 [ test_16u::i#10 div16u::rem#8 test_16u::res#0 line_cursor#1 char_cursor#2 print_str::str#7 ] main:2::test_16u:9::print_str:32 [ test_16u::i#10 div16u::rem#8 line_cursor#1 char_cursor#2 print_str::str#7 ] main:2::test_8u:7::print_str:99 [ line_cursor#25 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 char_cursor#2 print_str::str#7 ] main:2::test_8u:7::print_str:103 [ line_cursor#25 test_8u::i#10 test_8u::res#0 char_cursor#2 print_str::str#7 ] main:2::test_8u:7::print_str:107 [ line_cursor#25 test_8u::i#10 char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y Statement [73] (byte~) div16u::$1 ← > (word) div16u::dividend#2 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$1 ] ) always clobbers reg byte a Statement [74] (byte~) div16u::$2 ← (byte~) div16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::dividend#2 div16u::quotient#3 div16u::i#2 div16u::rem#1 div16u::$2 ] ) always clobbers reg byte a -Statement [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) always clobbers reg byte a -Statement [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ) always clobbers reg byte a +Statement [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) always clobbers reg byte a +Statement [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ) always clobbers reg byte a Statement [90] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ) always clobbers reg byte a Statement [115] (byte*~) char_cursor#98 ← (byte*) line_cursor#1 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ( main:2::test_8u:7 [ line_cursor#1 test_8u::i#1 char_cursor#98 ] ) always clobbers reg byte a Statement [119] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) always clobbers reg byte a -Statement [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) always clobbers reg byte a +Statement [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ) always clobbers reg byte a Statement [135] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y Statement [137] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ test_16u::i#10 test_16u::i#1 ] : zp ZP_BYTE:2 , reg byte x , @@ -4317,19 +4316,19 @@ Potential registers zp ZP_BYTE:8 [ print_char::ch#2 print_char::ch#0 print_char: Potential registers zp ZP_WORD:9 [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] : zp ZP_WORD:9 , Potential registers zp ZP_WORD:11 [ print_str::str#7 print_str::str#9 print_str::str#0 ] : zp ZP_WORD:11 , Potential registers zp ZP_WORD:13 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] : zp ZP_WORD:13 , -Potential registers zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] : zp ZP_WORD:15 , -Potential registers zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 ] : zp ZP_WORD:17 , +Potential registers zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 ] : zp ZP_WORD:17 , Potential registers zp ZP_BYTE:19 [ div16u::i#2 div16u::i#1 ] : zp ZP_BYTE:19 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:20 [ test_8u::i#10 test_8u::i#1 ] : zp ZP_BYTE:20 , reg byte x , Potential registers zp ZP_BYTE:21 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] : zp ZP_BYTE:23 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:24 [ div8u::i#2 div8u::i#1 ] : zp ZP_BYTE:24 , reg byte x , reg byte y , Potential registers zp ZP_WORD:25 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:25 , Potential registers zp ZP_WORD:27 [ test_16u::dividend#0 ] : zp ZP_WORD:27 , Potential registers zp ZP_WORD:29 [ test_16u::divisor#0 ] : zp ZP_WORD:29 , Potential registers zp ZP_WORD:31 [ div16u::divisor#0 ] : zp ZP_WORD:31 , -Potential registers zp ZP_WORD:33 [ div16u::return#0 ] : zp ZP_WORD:33 , +Potential registers zp ZP_WORD:33 [ div16u::return#2 ] : zp ZP_WORD:33 , Potential registers zp ZP_WORD:35 [ test_16u::res#0 ] : zp ZP_WORD:35 , Potential registers zp ZP_BYTE:37 [ print_byte::$0 ] : zp ZP_BYTE:37 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:38 [ print_byte::$2 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y , @@ -4338,13 +4337,13 @@ Potential registers zp ZP_BYTE:40 [ div16u::$2 ] : zp ZP_BYTE:40 , reg byte a , Potential registers zp ZP_BYTE:41 [ test_8u::dividend#0 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:42 [ test_8u::divisor#0 ] : zp ZP_BYTE:42 , reg byte x , Potential registers zp ZP_BYTE:43 [ div8u::divisor#0 ] : zp ZP_BYTE:43 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:44 [ div8u::return#0 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:44 [ div8u::return#2 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:45 [ test_8u::res#0 ] : zp ZP_BYTE:45 , reg byte x , Potential registers zp ZP_BYTE:46 [ div8u::$1 ] : zp ZP_BYTE:46 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [div16u] 905.25: zp ZP_WORD:13 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] 340.55: zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 ] 202: zp ZP_BYTE:39 [ div16u::$1 ] 202: zp ZP_BYTE:40 [ div16u::$2 ] 167.04: zp ZP_BYTE:19 [ div16u::i#2 div16u::i#1 ] 73.15: zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] 22: zp ZP_WORD:33 [ div16u::return#0 ] 12.53: zp ZP_WORD:31 [ div16u::divisor#0 ] -Uplift Scope [div8u] 909.67: zp ZP_BYTE:21 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] 333.69: zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] 202: zp ZP_BYTE:46 [ div8u::$1 ] 168.33: zp ZP_BYTE:24 [ div8u::i#2 div8u::i#1 ] 80.42: zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] 22: zp ZP_BYTE:44 [ div8u::return#0 ] 13.31: zp ZP_BYTE:43 [ div8u::divisor#0 ] +Uplift Scope [div16u] 905.25: zp ZP_WORD:13 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] 340.55: zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 ] 202: zp ZP_BYTE:39 [ div16u::$1 ] 202: zp ZP_BYTE:40 [ div16u::$2 ] 167.04: zp ZP_BYTE:19 [ div16u::i#2 div16u::i#1 ] 73.15: zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] 22: zp ZP_WORD:33 [ div16u::return#2 ] 12.53: zp ZP_WORD:31 [ div16u::divisor#0 ] +Uplift Scope [div8u] 909.67: zp ZP_BYTE:21 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] 333.69: zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] 202: zp ZP_BYTE:46 [ div8u::$1 ] 168.33: zp ZP_BYTE:24 [ div8u::i#2 div8u::i#1 ] 80.42: zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] 22: zp ZP_BYTE:44 [ div8u::return#2 ] 13.31: zp ZP_BYTE:43 [ div8u::divisor#0 ] Uplift Scope [] 238.09: zp ZP_WORD:3 [ line_cursor#11 line_cursor#22 line_cursor#1 line_cursor#25 ] 217.7: zp ZP_WORD:9 [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] Uplift Scope [print_str] 305.5: zp ZP_WORD:11 [ print_str::str#7 print_str::str#9 print_str::str#0 ] Uplift Scope [print_byte] 109: zp ZP_BYTE:7 [ print_byte::b#6 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 ] 4: zp ZP_BYTE:37 [ print_byte::$0 ] 4: zp ZP_BYTE:38 [ print_byte::$2 ] @@ -4356,8 +4355,8 @@ Uplift Scope [print_char] 14: zp ZP_BYTE:8 [ print_char::ch#2 print_char::ch#0 p Uplift Scope [print_ln] Uplift Scope [main] -Uplifting [div16u] best 40878 combination zp ZP_WORD:13 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 ] reg byte a [ div16u::$1 ] reg byte a [ div16u::$2 ] reg byte x [ div16u::i#2 div16u::i#1 ] zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] zp ZP_WORD:33 [ div16u::return#0 ] zp ZP_WORD:31 [ div16u::divisor#0 ] -Uplifting [div8u] best 38515 combination reg byte y [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] reg byte a [ div8u::$1 ] reg byte x [ div8u::i#2 div8u::i#1 ] zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] reg byte a [ div8u::return#0 ] zp ZP_BYTE:43 [ div8u::divisor#0 ] +Uplifting [div16u] best 40878 combination zp ZP_WORD:13 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 ] reg byte a [ div16u::$1 ] reg byte a [ div16u::$2 ] reg byte x [ div16u::i#2 div16u::i#1 ] zp ZP_WORD:15 [ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] zp ZP_WORD:33 [ div16u::return#2 ] zp ZP_WORD:31 [ div16u::divisor#0 ] +Uplifting [div8u] best 38515 combination reg byte y [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] reg byte a [ div8u::$1 ] reg byte x [ div8u::i#2 div8u::i#1 ] zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] reg byte a [ div8u::return#2 ] zp ZP_BYTE:43 [ div8u::divisor#0 ] Uplifting [] best 38515 combination zp ZP_WORD:3 [ line_cursor#11 line_cursor#22 line_cursor#1 line_cursor#25 ] zp ZP_WORD:9 [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] Uplifting [print_str] best 38515 combination zp ZP_WORD:11 [ print_str::str#7 print_str::str#9 print_str::str#0 ] Uplifting [print_byte] best 38383 combination reg byte x [ print_byte::b#6 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] @@ -4368,10 +4367,10 @@ Uplifting [test_8u] best 38383 combination zp ZP_BYTE:20 [ test_8u::i#10 test_8u Uplifting [print_char] best 38374 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplifting [print_ln] best 38374 combination Uplifting [main] best 38374 combination -Attempting to uplift remaining variables inzp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] -Uplifting [div8u] best 38374 combination zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -Uplifting [div8u] best 38374 combination zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] +Uplifting [div8u] best 38374 combination zp ZP_BYTE:23 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +Uplifting [div8u] best 38374 combination zp ZP_BYTE:22 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ test_16u::i#10 test_16u::i#1 ] Uplifting [test_16u] best 38374 combination zp ZP_BYTE:2 [ test_16u::i#10 test_16u::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:43 [ div8u::divisor#0 ] @@ -4385,18 +4384,18 @@ Uplifting [test_8u] best 38374 combination zp ZP_BYTE:42 [ test_8u::divisor#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:45 [ test_8u::res#0 ] Uplifting [test_8u] best 38374 combination zp ZP_BYTE:45 [ test_8u::res#0 ] Coalescing zero page register [ zp ZP_WORD:5 [ print_word::w#4 print_word::w#0 print_word::w#1 print_word::w#2 print_word::w#3 ] ] with [ zp ZP_WORD:27 [ test_16u::dividend#0 ] ] -Coalescing zero page register [ zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 ] ] with [ zp ZP_WORD:33 [ div16u::return#0 ] ] -Coalescing zero page register [ zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 div16u::return#0 ] ] with [ zp ZP_WORD:35 [ test_16u::res#0 ] ] +Coalescing zero page register [ zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 ] ] with [ zp ZP_WORD:33 [ div16u::return#2 ] ] +Coalescing zero page register [ zp ZP_WORD:17 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 div16u::return#2 ] ] with [ zp ZP_WORD:35 [ test_16u::res#0 ] ] Coalescing zero page register [ zp ZP_WORD:29 [ test_16u::divisor#0 ] ] with [ zp ZP_WORD:31 [ div16u::divisor#0 ] ] Coalescing zero page register [ zp ZP_BYTE:42 [ test_8u::divisor#0 ] ] with [ zp ZP_BYTE:43 [ div8u::divisor#0 ] ] Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] Allocated (was zp ZP_WORD:11) zp ZP_WORD:9 [ print_str::str#7 print_str::str#9 print_str::str#0 ] Allocated (was zp ZP_WORD:13) zp ZP_WORD:11 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] -Allocated (was zp ZP_WORD:15) zp ZP_WORD:13 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] -Allocated (was zp ZP_WORD:17) zp ZP_WORD:15 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 div16u::return#0 test_16u::res#0 ] +Allocated (was zp ZP_WORD:15) zp ZP_WORD:13 [ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] +Allocated (was zp ZP_WORD:17) zp ZP_WORD:15 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 div16u::return#2 test_16u::res#0 ] Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:17 [ test_8u::i#10 test_8u::i#1 ] -Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:18 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -Allocated (was zp ZP_BYTE:23) zp ZP_BYTE:19 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:18 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +Allocated (was zp ZP_BYTE:23) zp ZP_BYTE:19 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] Allocated (was zp ZP_WORD:25) zp ZP_WORD:20 [ print_cls::sc#2 print_cls::sc#1 ] Allocated (was zp ZP_WORD:29) zp ZP_WORD:22 [ test_16u::divisor#0 div16u::divisor#0 ] Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:24 [ test_8u::dividend#0 ] @@ -4494,24 +4493,24 @@ test_16u: { sta divisor lda divisors+1,y sta divisor+1 - //SEG32 [15] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ) -- vwuz1=vwuz2 + //SEG32 [15] (word) div16u::dividend#1 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ) -- vwuz1=vwuz2 lda dividend sta div16u.dividend lda dividend+1 sta div16u.dividend+1 - //SEG33 [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ) + //SEG33 [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ) // (word) div16u::divisor#0 = (word) test_16u::divisor#0 // register copy zp ZP_WORD:22 - //SEG34 [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ) + //SEG34 [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) //SEG35 [70] phi from test_16u::@1 to div16u [phi:test_16u::@1->div16u] div16u_from_b1: jsr div16u - //SEG36 [18] (word) div16u::return#0 ← (word) div16u::return#1 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) - // (word) div16u::return#0 = (word) div16u::return#1 // register copy zp ZP_WORD:15 + //SEG36 [18] (word) div16u::return#2 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ) + // (word) div16u::return#2 = (word) div16u::return#0 // register copy zp ZP_WORD:15 jmp b3 //SEG37 test_16u::@3 b3: - //SEG38 [19] (word) test_16u::res#0 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) - // (word) test_16u::res#0 = (word) div16u::return#0 // register copy zp ZP_WORD:15 + //SEG38 [19] (word) test_16u::res#0 ← (word) div16u::return#2 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) + // (word) test_16u::res#0 = (word) div16u::return#2 // register copy zp ZP_WORD:15 //SEG39 [20] (word) print_word::w#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ) // (word) print_word::w#0 = (word) test_16u::dividend#0 // register copy zp ZP_WORD:5 //SEG40 [21] (byte*~) char_cursor#84 ← (byte*) line_cursor#1 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ) -- pbuz1=pbuz2 @@ -4801,11 +4800,11 @@ print_str: { } //SEG143 div16u div16u: { - .label dividend = $d - .label divisor = $16 - .label return = $f .label rem = $b + .label dividend = $d .label quotient = $f + .label return = $f + .label divisor = $16 //SEG144 [71] phi from div16u to div16u::@1 [phi:div16u->div16u::@1] b1_from_div16u: //SEG145 [71] phi (byte) div16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#0] -- vbuxx=vbuc1 @@ -4815,7 +4814,7 @@ div16u: { sta quotient lda #0 sta quotient+1 - //SEG147 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#0 [phi:div16u->div16u::@1#2] -- register_copy + //SEG147 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#1 [phi:div16u->div16u::@1#2] -- register_copy //SEG148 [71] phi (word) div16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#3] -- vwuz1=vbuc1 lda #0 sta rem @@ -4825,8 +4824,8 @@ div16u: { //SEG149 [71] phi from div16u::@3 to div16u::@1 [phi:div16u::@3->div16u::@1] b1_from_b3: //SEG150 [71] phi (byte) div16u::i#2 = (byte) div16u::i#1 [phi:div16u::@3->div16u::@1#0] -- register_copy - //SEG151 [71] phi (word) div16u::quotient#3 = (word) div16u::return#1 [phi:div16u::@3->div16u::@1#1] -- register_copy - //SEG152 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#1 [phi:div16u::@3->div16u::@1#2] -- register_copy + //SEG151 [71] phi (word) div16u::quotient#3 = (word) div16u::return#0 [phi:div16u::@3->div16u::@1#1] -- register_copy + //SEG152 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#0 [phi:div16u::@3->div16u::@1#2] -- register_copy //SEG153 [71] phi (word) div16u::rem#4 = (word) div16u::rem#8 [phi:div16u::@3->div16u::@1#3] -- register_copy jmp b1 //SEG154 div16u::@1 @@ -4856,13 +4855,13 @@ div16u: { jmp b2 //SEG163 div16u::@2 b2: - //SEG164 [78] (word) div16u::dividend#1 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG164 [78] (word) div16u::dividend#0 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG165 [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG165 [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG166 [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG166 [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -4874,12 +4873,12 @@ div16u: { jmp b5 //SEG167 div16u::@5 b5: - //SEG168 [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG168 [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG169 [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG169 [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -4890,20 +4889,20 @@ div16u: { //SEG170 [83] phi from div16u::@2 div16u::@5 to div16u::@3 [phi:div16u::@2/div16u::@5->div16u::@3] b3_from_b2: b3_from_b5: - //SEG171 [83] phi (word) div16u::return#1 = (word) div16u::quotient#1 [phi:div16u::@2/div16u::@5->div16u::@3#0] -- register_copy + //SEG171 [83] phi (word) div16u::return#0 = (word) div16u::quotient#1 [phi:div16u::@2/div16u::@5->div16u::@3#0] -- register_copy //SEG172 [83] phi (word) div16u::rem#8 = (word) div16u::rem#5 [phi:div16u::@2/div16u::@5->div16u::@3#1] -- register_copy jmp b3 //SEG173 div16u::@3 b3: - //SEG174 [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG174 [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG175 [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG175 [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b3 jmp breturn //SEG176 div16u::@return breturn: - //SEG177 [86] return [ div16u::rem#8 div16u::return#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#1 ] ) + //SEG177 [86] return [ div16u::rem#8 div16u::return#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#0 ] ) rts } //SEG178 test_8u @@ -4939,21 +4938,21 @@ test_8u: { ldy i lda divisors,y sta divisor - //SEG186 [91] (byte) div8u::dividend#0 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ) -- vbuz1=vbuz2 + //SEG186 [91] (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ) -- vbuz1=vbuz2 lda dividend sta div8u.dividend - //SEG187 [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + //SEG187 [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ) // (byte) div8u::divisor#0 = (byte) test_8u::divisor#0 // register copy zp ZP_BYTE:25 - //SEG188 [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + //SEG188 [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) //SEG189 [116] phi from test_8u::@1 to div8u [phi:test_8u::@1->div8u] div8u_from_b1: jsr div8u - //SEG190 [94] (byte) div8u::return#0 ← (byte) div8u::return#1 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) -- vbuaa=vbuz1 + //SEG190 [94] (byte) div8u::return#2 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ) -- vbuaa=vbuz1 lda div8u.return jmp b3 //SEG191 test_8u::@3 b3: - //SEG192 [95] (byte) test_8u::res#0 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuz1=vbuaa + //SEG192 [95] (byte) test_8u::res#0 ← (byte) div8u::return#2 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuz1=vbuaa sta res //SEG193 [96] (byte) print_byte::b#2 ← (byte) test_8u::dividend#0 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuxx=vbuz1 ldx dividend @@ -5084,9 +5083,9 @@ test_8u: { //SEG247 div8u div8u: { .label dividend = $12 - .label divisor = $19 .label quotient = $13 .label return = $13 + .label divisor = $19 //SEG248 [117] phi from div8u to div8u::@1 [phi:div8u->div8u::@1] b1_from_div8u: //SEG249 [117] phi (byte) div8u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#0] -- vbuxx=vbuc1 @@ -5094,15 +5093,15 @@ div8u: { //SEG250 [117] phi (byte) div8u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#1] -- vbuz1=vbuc1 lda #0 sta quotient - //SEG251 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u->div8u::@1#2] -- register_copy + //SEG251 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u->div8u::@1#2] -- register_copy //SEG252 [117] phi (byte) div8u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#3] -- vbuyy=vbuc1 ldy #0 jmp b1 //SEG253 [117] phi from div8u::@3 to div8u::@1 [phi:div8u::@3->div8u::@1] b1_from_b3: //SEG254 [117] phi (byte) div8u::i#2 = (byte) div8u::i#1 [phi:div8u::@3->div8u::@1#0] -- register_copy - //SEG255 [117] phi (byte) div8u::quotient#3 = (byte) div8u::return#1 [phi:div8u::@3->div8u::@1#1] -- register_copy - //SEG256 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u::@3->div8u::@1#2] -- register_copy + //SEG255 [117] phi (byte) div8u::quotient#3 = (byte) div8u::return#0 [phi:div8u::@3->div8u::@1#1] -- register_copy + //SEG256 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u::@3->div8u::@1#2] -- register_copy //SEG257 [117] phi (byte) div8u::rem#4 = (byte) div8u::rem#8 [phi:div8u::@3->div8u::@1#3] -- register_copy jmp b1 //SEG258 div8u::@1 @@ -5129,19 +5128,19 @@ div8u: { jmp b2 //SEG266 div8u::@2 b2: - //SEG267 [123] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 + //SEG267 [123] (byte) div8u::dividend#0 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 asl dividend - //SEG268 [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 + //SEG268 [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 asl quotient - //SEG269 [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuyy_lt_vbuz1_then_la1 + //SEG269 [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) -- vbuyy_lt_vbuz1_then_la1 cpy divisor bcc b3_from_b2 jmp b5 //SEG270 div8u::@5 b5: - //SEG271 [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 + //SEG271 [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 inc quotient - //SEG272 [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) -- vbuyy=vbuyy_minus_vbuz1 + //SEG272 [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ) -- vbuyy=vbuyy_minus_vbuz1 tya sec sbc divisor @@ -5149,25 +5148,25 @@ div8u: { //SEG273 [128] phi from div8u::@2 div8u::@5 to div8u::@3 [phi:div8u::@2/div8u::@5->div8u::@3] b3_from_b2: b3_from_b5: - //SEG274 [128] phi (byte) div8u::return#1 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy + //SEG274 [128] phi (byte) div8u::return#0 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy //SEG275 [128] phi (byte) div8u::rem#8 = (byte) div8u::rem#5 [phi:div8u::@2/div8u::@5->div8u::@3#1] -- register_copy jmp b3 //SEG276 div8u::@3 b3: - //SEG277 [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG277 [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG278 [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG278 [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne b1_from_b3 jmp b6 //SEG279 div8u::@6 b6: - //SEG280 [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) -- _deref_pbuc1=vbuyy + //SEG280 [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) -- _deref_pbuc1=vbuyy sty test_8u.rem jmp breturn //SEG281 div8u::@return breturn: - //SEG282 [132] return [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + //SEG282 [132] return [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) rts } //SEG283 print_cls @@ -5422,8 +5421,8 @@ FINAL SYMBOL TABLE (label) div16u::@5 (label) div16u::@return (word) div16u::dividend -(word) div16u::dividend#0 dividend zp ZP_WORD:13 4.333333333333333 -(word) div16u::dividend#1 dividend zp ZP_WORD:13 25.25 +(word) div16u::dividend#0 dividend zp ZP_WORD:13 25.25 +(word) div16u::dividend#1 dividend zp ZP_WORD:13 4.333333333333333 (word) div16u::dividend#2 dividend zp ZP_WORD:13 43.57142857142858 (word) div16u::divisor (word) div16u::divisor#0 divisor zp ZP_WORD:22 12.529411764705884 @@ -5442,8 +5441,8 @@ FINAL SYMBOL TABLE (word) div16u::rem#5 rem zp ZP_WORD:11 101.0 (word) div16u::rem#8 rem zp ZP_WORD:11 12.5 (word) div16u::return -(word) div16u::return#0 return zp ZP_WORD:15 22.0 -(word) div16u::return#1 return zp ZP_WORD:15 62.8 +(word) div16u::return#0 return zp ZP_WORD:15 62.8 +(word) div16u::return#2 return zp ZP_WORD:15 22.0 (byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) (byte~) div8u::$1 reg byte a 202.0 (label) div8u::@1 @@ -5454,8 +5453,8 @@ FINAL SYMBOL TABLE (label) div8u::@6 (label) div8u::@return (byte) div8u::dividend -(byte) div8u::dividend#0 dividend zp ZP_BYTE:18 4.333333333333333 -(byte) div8u::dividend#1 dividend zp ZP_BYTE:18 25.25 +(byte) div8u::dividend#0 dividend zp ZP_BYTE:18 25.25 +(byte) div8u::dividend#1 dividend zp ZP_BYTE:18 4.333333333333333 (byte) div8u::dividend#2 dividend zp ZP_BYTE:18 50.83333333333333 (byte) div8u::divisor (byte) div8u::divisor#0 divisor zp ZP_BYTE:25 13.3125 @@ -5475,8 +5474,8 @@ FINAL SYMBOL TABLE (byte) div8u::rem#8 reg byte y 101.66666666666667 (byte*) div8u::remainder (byte) div8u::return -(byte) div8u::return#0 reg byte a 22.0 -(byte) div8u::return#1 return zp ZP_BYTE:19 52.33333333333333 +(byte) div8u::return#0 return zp ZP_BYTE:19 52.33333333333333 +(byte) div8u::return#2 reg byte a 22.0 (byte*) line_cursor (byte*) line_cursor#1 line_cursor zp ZP_WORD:3 9.131578947368421 (byte*) line_cursor#11 line_cursor zp ZP_WORD:3 204.0 @@ -5603,13 +5602,13 @@ reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:7 [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] zp ZP_WORD:9 [ print_str::str#7 print_str::str#9 print_str::str#0 ] zp ZP_WORD:11 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] -zp ZP_WORD:13 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] -zp ZP_WORD:15 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 div16u::return#0 test_16u::res#0 ] +zp ZP_WORD:13 [ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] +zp ZP_WORD:15 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 div16u::return#2 test_16u::res#0 ] reg byte x [ div16u::i#2 div16u::i#1 ] zp ZP_BYTE:17 [ test_8u::i#10 test_8u::i#1 ] reg byte y [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] -zp ZP_BYTE:18 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -zp ZP_BYTE:19 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +zp ZP_BYTE:18 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +zp ZP_BYTE:19 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] reg byte x [ div8u::i#2 div8u::i#1 ] zp ZP_WORD:20 [ print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:22 [ test_16u::divisor#0 div16u::divisor#0 ] @@ -5619,7 +5618,7 @@ reg byte a [ div16u::$1 ] reg byte a [ div16u::$2 ] zp ZP_BYTE:24 [ test_8u::dividend#0 ] zp ZP_BYTE:25 [ test_8u::divisor#0 div8u::divisor#0 ] -reg byte a [ div8u::return#0 ] +reg byte a [ div8u::return#2 ] zp ZP_BYTE:26 [ test_8u::res#0 ] reg byte a [ div8u::$1 ] @@ -5691,21 +5690,21 @@ test_16u: { sta divisor lda divisors+1,y sta divisor+1 - //SEG32 [15] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 line_cursor#1 ] ) -- vwuz1=vwuz2 + //SEG32 [15] (word) div16u::dividend#1 ← (word) test_16u::dividend#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 line_cursor#1 ] ) -- vwuz1=vwuz2 lda dividend sta div16u.dividend lda dividend+1 sta div16u.dividend+1 - //SEG33 [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#0 div16u::divisor#0 line_cursor#1 ] ) + //SEG33 [16] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#1 div16u::divisor#0 line_cursor#1 ] ) // (word) div16u::divisor#0 = (word) test_16u::divisor#0 // register copy zp ZP_WORD:22 - //SEG34 [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#1 line_cursor#1 ] ) + //SEG34 [17] call div16u param-assignment [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) //SEG35 [70] phi from test_16u::@1 to div16u [phi:test_16u::@1->div16u] jsr div16u - //SEG36 [18] (word) div16u::return#0 ← (word) div16u::return#1 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 line_cursor#1 ] ) - // (word) div16u::return#0 = (word) div16u::return#1 // register copy zp ZP_WORD:15 + //SEG36 [18] (word) div16u::return#2 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 div16u::return#2 line_cursor#1 ] ) + // (word) div16u::return#2 = (word) div16u::return#0 // register copy zp ZP_WORD:15 //SEG37 test_16u::@3 - //SEG38 [19] (word) test_16u::res#0 ← (word) div16u::return#0 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) - // (word) test_16u::res#0 = (word) div16u::return#0 // register copy zp ZP_WORD:15 + //SEG38 [19] (word) test_16u::res#0 ← (word) div16u::return#2 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::dividend#0 test_16u::divisor#0 test_16u::res#0 line_cursor#1 ] ) + // (word) test_16u::res#0 = (word) div16u::return#2 // register copy zp ZP_WORD:15 //SEG39 [20] (word) print_word::w#0 ← (word) test_16u::dividend#0 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 line_cursor#1 ] ) // (word) print_word::w#0 = (word) test_16u::dividend#0 // register copy zp ZP_WORD:5 //SEG40 [21] (byte*~) char_cursor#84 ← (byte*) line_cursor#1 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ( main:2::test_16u:9 [ test_16u::i#10 div16u::rem#8 test_16u::divisor#0 test_16u::res#0 print_word::w#0 char_cursor#84 line_cursor#1 ] ) -- pbuz1=pbuz2 @@ -5939,11 +5938,11 @@ print_str: { } //SEG143 div16u div16u: { - .label dividend = $d - .label divisor = $16 - .label return = $f .label rem = $b + .label dividend = $d .label quotient = $f + .label return = $f + .label divisor = $16 //SEG144 [71] phi from div16u to div16u::@1 [phi:div16u->div16u::@1] //SEG145 [71] phi (byte) div16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#0] -- vbuxx=vbuc1 ldx #0 @@ -5951,14 +5950,14 @@ div16u: { txa sta quotient sta quotient+1 - //SEG147 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#0 [phi:div16u->div16u::@1#2] -- register_copy + //SEG147 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#1 [phi:div16u->div16u::@1#2] -- register_copy //SEG148 [71] phi (word) div16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#3] -- vwuz1=vbuc1 sta rem sta rem+1 //SEG149 [71] phi from div16u::@3 to div16u::@1 [phi:div16u::@3->div16u::@1] //SEG150 [71] phi (byte) div16u::i#2 = (byte) div16u::i#1 [phi:div16u::@3->div16u::@1#0] -- register_copy - //SEG151 [71] phi (word) div16u::quotient#3 = (word) div16u::return#1 [phi:div16u::@3->div16u::@1#1] -- register_copy - //SEG152 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#1 [phi:div16u::@3->div16u::@1#2] -- register_copy + //SEG151 [71] phi (word) div16u::quotient#3 = (word) div16u::return#0 [phi:div16u::@3->div16u::@1#1] -- register_copy + //SEG152 [71] phi (word) div16u::dividend#2 = (word) div16u::dividend#0 [phi:div16u::@3->div16u::@1#2] -- register_copy //SEG153 [71] phi (word) div16u::rem#4 = (word) div16u::rem#8 [phi:div16u::@3->div16u::@1#3] -- register_copy //SEG154 div16u::@1 b1: @@ -5982,13 +5981,13 @@ div16u: { //SEG162 [77] phi (word) div16u::rem#5 = (word) div16u::rem#1 [phi:div16u::@1/div16u::@4->div16u::@2#0] -- register_copy //SEG163 div16u::@2 b2: - //SEG164 [78] (word) div16u::dividend#1 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#1 div16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG164 [78] (word) div16u::dividend#0 ← (word) div16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::quotient#3 div16u::i#2 div16u::dividend#0 div16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG165 [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG165 [79] (word) div16u::quotient#1 ← (word) div16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG166 [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG166 [80] if((word) div16u::rem#5<(word) div16u::divisor#0) goto div16u::@3 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3 @@ -5998,12 +5997,12 @@ div16u: { bcc b3 !: //SEG167 div16u::@5 - //SEG168 [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::rem#5 div16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG168 [81] (word) div16u::quotient#2 ← ++ (word) div16u::quotient#1 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::rem#5 div16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG169 [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#1 div16u::quotient#2 div16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG169 [82] (word) div16u::rem#3 ← (word) div16u::rem#5 - (word) div16u::divisor#0 [ div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::divisor#0 div16u::i#2 div16u::dividend#0 div16u::quotient#2 div16u::rem#3 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -6012,17 +6011,17 @@ div16u: { sbc divisor+1 sta rem+1 //SEG170 [83] phi from div16u::@2 div16u::@5 to div16u::@3 [phi:div16u::@2/div16u::@5->div16u::@3] - //SEG171 [83] phi (word) div16u::return#1 = (word) div16u::quotient#1 [phi:div16u::@2/div16u::@5->div16u::@3#0] -- register_copy + //SEG171 [83] phi (word) div16u::return#0 = (word) div16u::quotient#1 [phi:div16u::@2/div16u::@5->div16u::@3#0] -- register_copy //SEG172 [83] phi (word) div16u::rem#8 = (word) div16u::rem#5 [phi:div16u::@2/div16u::@5->div16u::@3#1] -- register_copy //SEG173 div16u::@3 b3: - //SEG174 [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG174 [84] (byte) div16u::i#1 ← ++ (byte) div16u::i#2 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG175 [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#1 div16u::dividend#1 div16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG175 [85] if((byte) div16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto div16u::@1 [ div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::divisor#0 div16u::return#0 div16u::dividend#0 div16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1 //SEG176 div16u::@return - //SEG177 [86] return [ div16u::rem#8 div16u::return#1 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#1 ] ) + //SEG177 [86] return [ div16u::rem#8 div16u::return#0 ] ( main:2::test_16u:9::div16u:17 [ test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 line_cursor#1 div16u::rem#8 div16u::return#0 ] ) rts } //SEG178 test_8u @@ -6055,18 +6054,18 @@ test_8u: { //SEG185 [90] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 lda divisors,y sta divisor - //SEG186 [91] (byte) div8u::dividend#0 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 ] ) -- vbuz1=vbuz2 + //SEG186 [91] (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 ] ) -- vbuz1=vbuz2 lda dividend sta div8u.dividend - //SEG187 [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + //SEG187 [92] (byte) div8u::divisor#0 ← (byte) test_8u::divisor#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::dividend#1 div8u::divisor#0 ] ) // (byte) div8u::divisor#0 = (byte) test_8u::divisor#0 // register copy zp ZP_BYTE:25 - //SEG188 [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + //SEG188 [93] call div8u param-assignment [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) //SEG189 [116] phi from test_8u::@1 to div8u [phi:test_8u::@1->div8u] jsr div8u - //SEG190 [94] (byte) div8u::return#0 ← (byte) div8u::return#1 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) -- vbuaa=vbuz1 + //SEG190 [94] (byte) div8u::return#2 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#2 ] ) -- vbuaa=vbuz1 lda div8u.return //SEG191 test_8u::@3 - //SEG192 [95] (byte) test_8u::res#0 ← (byte) div8u::return#0 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuz1=vbuaa + //SEG192 [95] (byte) test_8u::res#0 ← (byte) div8u::return#2 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuz1=vbuaa sta res //SEG193 [96] (byte) print_byte::b#2 ← (byte) test_8u::dividend#0 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ( main:2::test_8u:7 [ line_cursor#25 print_byte::b#2 char_cursor#75 test_8u::i#10 test_8u::divisor#0 test_8u::res#0 ] ) -- vbuxx=vbuz1 ldx dividend @@ -6166,22 +6165,22 @@ test_8u: { //SEG247 div8u div8u: { .label dividend = $12 - .label divisor = $19 .label quotient = $13 .label return = $13 + .label divisor = $19 //SEG248 [117] phi from div8u to div8u::@1 [phi:div8u->div8u::@1] //SEG249 [117] phi (byte) div8u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#0] -- vbuxx=vbuc1 ldx #0 //SEG250 [117] phi (byte) div8u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#1] -- vbuz1=vbuc1 txa sta quotient - //SEG251 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u->div8u::@1#2] -- register_copy + //SEG251 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u->div8u::@1#2] -- register_copy //SEG252 [117] phi (byte) div8u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#3] -- vbuyy=vbuc1 tay //SEG253 [117] phi from div8u::@3 to div8u::@1 [phi:div8u::@3->div8u::@1] //SEG254 [117] phi (byte) div8u::i#2 = (byte) div8u::i#1 [phi:div8u::@3->div8u::@1#0] -- register_copy - //SEG255 [117] phi (byte) div8u::quotient#3 = (byte) div8u::return#1 [phi:div8u::@3->div8u::@1#1] -- register_copy - //SEG256 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u::@3->div8u::@1#2] -- register_copy + //SEG255 [117] phi (byte) div8u::quotient#3 = (byte) div8u::return#0 [phi:div8u::@3->div8u::@1#1] -- register_copy + //SEG256 [117] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u::@3->div8u::@1#2] -- register_copy //SEG257 [117] phi (byte) div8u::rem#4 = (byte) div8u::rem#8 [phi:div8u::@3->div8u::@1#3] -- register_copy //SEG258 div8u::@1 b1: @@ -6202,36 +6201,36 @@ div8u: { //SEG265 [122] phi (byte) div8u::rem#5 = (byte) div8u::rem#1 [phi:div8u::@1/div8u::@4->div8u::@2#0] -- register_copy //SEG266 div8u::@2 b2: - //SEG267 [123] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 + //SEG267 [123] (byte) div8u::dividend#0 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#0 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 asl dividend - //SEG268 [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 + //SEG268 [124] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 asl quotient - //SEG269 [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuyy_lt_vbuz1_then_la1 + //SEG269 [125] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#1 ] ) -- vbuyy_lt_vbuz1_then_la1 cpy divisor bcc b3 //SEG270 div8u::@5 - //SEG271 [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 + //SEG271 [126] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 inc quotient - //SEG272 [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) -- vbuyy=vbuyy_minus_vbuz1 + //SEG272 [127] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#0 div8u::quotient#2 div8u::rem#3 ] ) -- vbuyy=vbuyy_minus_vbuz1 tya sec sbc divisor tay //SEG273 [128] phi from div8u::@2 div8u::@5 to div8u::@3 [phi:div8u::@2/div8u::@5->div8u::@3] - //SEG274 [128] phi (byte) div8u::return#1 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy + //SEG274 [128] phi (byte) div8u::return#0 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy //SEG275 [128] phi (byte) div8u::rem#8 = (byte) div8u::rem#5 [phi:div8u::@2/div8u::@5->div8u::@3#1] -- register_copy //SEG276 div8u::@3 b3: - //SEG277 [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG277 [129] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG278 [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG278 [130] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::divisor#0 div8u::return#0 div8u::rem#8 div8u::dividend#0 div8u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne b1 //SEG279 div8u::@6 - //SEG280 [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) -- _deref_pbuc1=vbuyy + //SEG280 [131] *((const byte*) test_8u::rem#0) ← (byte) div8u::rem#8 [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) -- _deref_pbuc1=vbuyy sty test_8u.rem //SEG281 div8u::@return - //SEG282 [132] return [ div8u::return#1 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#1 ] ) + //SEG282 [132] return [ div8u::return#0 ] ( main:2::test_8u:7::div8u:93 [ line_cursor#25 char_cursor#75 test_8u::i#10 test_8u::dividend#0 test_8u::divisor#0 div8u::return#0 ] ) rts } //SEG283 print_cls diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.sym b/src/test/java/dk/camelot64/kickc/test/ref/test-division.sym similarity index 91% rename from src/test/java/dk/camelot64/kickc/test/ref/division.sym rename to src/test/java/dk/camelot64/kickc/test/ref/test-division.sym index 1c3d5f48e..f41d7023c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/division.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.sym @@ -21,8 +21,8 @@ (label) div16u::@5 (label) div16u::@return (word) div16u::dividend -(word) div16u::dividend#0 dividend zp ZP_WORD:13 4.333333333333333 -(word) div16u::dividend#1 dividend zp ZP_WORD:13 25.25 +(word) div16u::dividend#0 dividend zp ZP_WORD:13 25.25 +(word) div16u::dividend#1 dividend zp ZP_WORD:13 4.333333333333333 (word) div16u::dividend#2 dividend zp ZP_WORD:13 43.57142857142858 (word) div16u::divisor (word) div16u::divisor#0 divisor zp ZP_WORD:22 12.529411764705884 @@ -41,8 +41,8 @@ (word) div16u::rem#5 rem zp ZP_WORD:11 101.0 (word) div16u::rem#8 rem zp ZP_WORD:11 12.5 (word) div16u::return -(word) div16u::return#0 return zp ZP_WORD:15 22.0 -(word) div16u::return#1 return zp ZP_WORD:15 62.8 +(word) div16u::return#0 return zp ZP_WORD:15 62.8 +(word) div16u::return#2 return zp ZP_WORD:15 22.0 (byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) (byte~) div8u::$1 reg byte a 202.0 (label) div8u::@1 @@ -53,8 +53,8 @@ (label) div8u::@6 (label) div8u::@return (byte) div8u::dividend -(byte) div8u::dividend#0 dividend zp ZP_BYTE:18 4.333333333333333 -(byte) div8u::dividend#1 dividend zp ZP_BYTE:18 25.25 +(byte) div8u::dividend#0 dividend zp ZP_BYTE:18 25.25 +(byte) div8u::dividend#1 dividend zp ZP_BYTE:18 4.333333333333333 (byte) div8u::dividend#2 dividend zp ZP_BYTE:18 50.83333333333333 (byte) div8u::divisor (byte) div8u::divisor#0 divisor zp ZP_BYTE:25 13.3125 @@ -74,8 +74,8 @@ (byte) div8u::rem#8 reg byte y 101.66666666666667 (byte*) div8u::remainder (byte) div8u::return -(byte) div8u::return#0 reg byte a 22.0 -(byte) div8u::return#1 return zp ZP_BYTE:19 52.33333333333333 +(byte) div8u::return#0 return zp ZP_BYTE:19 52.33333333333333 +(byte) div8u::return#2 reg byte a 22.0 (byte*) line_cursor (byte*) line_cursor#1 line_cursor zp ZP_WORD:3 9.131578947368421 (byte*) line_cursor#11 line_cursor zp ZP_WORD:3 204.0 @@ -202,13 +202,13 @@ reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:7 [ char_cursor#45 char_cursor#72 char_cursor#71 char_cursor#84 char_cursor#2 char_cursor#11 char_cursor#75 char_cursor#1 char_cursor#98 ] zp ZP_WORD:9 [ print_str::str#7 print_str::str#9 print_str::str#0 ] zp ZP_WORD:11 [ div16u::rem#4 rem16u#16 div16u::rem#8 div16u::rem#5 div16u::rem#1 div16u::rem#2 div16u::rem#3 ] -zp ZP_WORD:13 [ div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 ] -zp ZP_WORD:15 [ div16u::quotient#3 div16u::return#1 div16u::quotient#1 div16u::quotient#2 div16u::return#0 test_16u::res#0 ] +zp ZP_WORD:13 [ div16u::dividend#2 div16u::dividend#1 div16u::dividend#0 ] +zp ZP_WORD:15 [ div16u::quotient#3 div16u::return#0 div16u::quotient#1 div16u::quotient#2 div16u::return#2 test_16u::res#0 ] reg byte x [ div16u::i#2 div16u::i#1 ] zp ZP_BYTE:17 [ test_8u::i#10 test_8u::i#1 ] reg byte y [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] -zp ZP_BYTE:18 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] -zp ZP_BYTE:19 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +zp ZP_BYTE:18 [ div8u::dividend#2 div8u::dividend#1 div8u::dividend#0 ] +zp ZP_BYTE:19 [ div8u::quotient#3 div8u::return#0 div8u::quotient#1 div8u::quotient#2 ] reg byte x [ div8u::i#2 div8u::i#1 ] zp ZP_WORD:20 [ print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:22 [ test_16u::divisor#0 div16u::divisor#0 ] @@ -218,6 +218,6 @@ reg byte a [ div16u::$1 ] reg byte a [ div16u::$2 ] zp ZP_BYTE:24 [ test_8u::dividend#0 ] zp ZP_BYTE:25 [ test_8u::divisor#0 div8u::divisor#0 ] -reg byte a [ div8u::return#0 ] +reg byte a [ div8u::return#2 ] zp ZP_BYTE:26 [ test_8u::res#0 ] reg byte a [ div8u::$1 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log index 20b06c1c7..0dadbcefb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log @@ -1,8 +1,5 @@ PARSING src/test/java/dk/camelot64/kickc/test/kc/test-multiply.kc -// Implementation of the Seriously Fast Multiplication -// See http://codebase64.org/doku.php?id=base:seriously_fast_multiplication -// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 - +// Test the fast multiplication library import "print.kc" import "multiply.kc"