From b95c7e20f5bb682a4249c6bdd92268dd5898368a Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Fri, 29 Dec 2017 22:45:19 +0100 Subject: [PATCH] Moved multiply into a library --- .../dk/camelot64/kickc/test/TestPrograms.java | 2 +- .../java/dk/camelot64/kickc/test/multiply.kc | 139 +- .../dk/camelot64/kickc/test/ref/multiply.cfg | 303 - .../dk/camelot64/kickc/test/ref/multiply.log | 7130 ---------------- .../dk/camelot64/kickc/test/ref/multiply.sym | 230 - .../ref/{multiply.asm => test-multiply.asm} | 32 +- .../kickc/test/ref/test-multiply.cfg | 303 + .../kickc/test/ref/test-multiply.log | 7134 +++++++++++++++++ .../kickc/test/ref/test-multiply.sym | 230 + .../dk/camelot64/kickc/test/test-multiply.kc | 127 + 10 files changed, 7819 insertions(+), 7811 deletions(-) delete mode 100644 src/test/java/dk/camelot64/kickc/test/ref/multiply.cfg delete mode 100644 src/test/java/dk/camelot64/kickc/test/ref/multiply.log delete mode 100644 src/test/java/dk/camelot64/kickc/test/ref/multiply.sym rename src/test/java/dk/camelot64/kickc/test/ref/{multiply.asm => test-multiply.asm} (95%) create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-multiply.cfg create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-multiply.sym create mode 100644 src/test/java/dk/camelot64/kickc/test/test-multiply.kc diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 90db216f1..d763a1d59 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -27,7 +27,7 @@ public class TestPrograms extends TestCase { } public void testMultiply() throws IOException, URISyntaxException { - compileAndCompare("multiply"); + compileAndCompare("test-multiply"); } public void testArraysInit() throws IOException, URISyntaxException { diff --git a/src/test/java/dk/camelot64/kickc/test/multiply.kc b/src/test/java/dk/camelot64/kickc/test/multiply.kc index c608f88f9..7672cc188 100644 --- a/src/test/java/dk/camelot64/kickc/test/multiply.kc +++ b/src/test/java/dk/camelot64/kickc/test/multiply.kc @@ -1,31 +1,7 @@ -// Implementation of the Seriously Fast Multiplication +// Library 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 -import "print.kc" - -byte* BGCOL = $d021; - -void main() { - *BGCOL = 5; - print_cls(); - init_mul_tables(); - init_mul_tables_asm(); - mul_tables_compare(); - mul_results_compare(); -} - -// Perform a slow multiplication by repeated addition -word slow_multiply(byte a, byte b) { - word m = 0; - if(a>0) { - for(byte i = 0; i!=a; i++) { - m = m + b; - } - } - return m; -} - // mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). // (( x * x )/4) -byte[512] align($100) asm_mul_sqr1_hi; -// <((( x - 255) * ( x - 255 ))/4) -byte[512] align($100) asm_mul_sqr2_lo; -// >((( x - 255) * ( x - 255 ))/4) -byte[512] align($100) asm_mul_sqr2_hi; -// Initialize the multiplication tables using ASM code from -// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication -void init_mul_tables_asm() { - asm{ - ldx #$00 - txa - .byte $c9 - lb1: - tya - adc #$00 - ml1: - sta asm_mul_sqr1_hi,x - tay - cmp #$40 - txa - ror - ml9: - adc #$00 - sta ml9+1 - inx - ml0: - sta asm_mul_sqr1_lo,x - bne lb1 - inc ml0+2 - inc ml1+2 - clc - iny - bne lb1 - ldx #$00 - ldy #$ff - !: - lda asm_mul_sqr1_hi+1,x - sta asm_mul_sqr2_hi+$100,x - lda asm_mul_sqr1_hi,x - sta asm_mul_sqr2_hi,y - lda asm_mul_sqr1_lo+1,x - sta asm_mul_sqr2_lo+$100,x - lda asm_mul_sqr1_lo,x - sta asm_mul_sqr2_lo,y - dey - inx - bne !- - } - // Ensure the ASM tables are not detected as unused by the optimizer - byte* mem = $ff; - *mem = *asm_mul_sqr1_lo; - *mem = *asm_mul_sqr1_hi; - *mem = *asm_mul_sqr2_lo; - *mem = *asm_mul_sqr2_hi; -} - -// Fast multiply two bytes using ASM -word asm_multiply(byte a, byte b) { +// Fast multiply two unsigned bytes to a word result +word multiply(byte a, byte b) { const byte* memA = $fe; const byte* memB = $ff; *memA = a; @@ -146,54 +62,15 @@ word asm_multiply(byte a, byte b) { ldx memB sec sm1: - lda asm_mul_sqr1_lo,x + lda mul_sqr1_lo,x sm2: - sbc asm_mul_sqr2_lo,x + sbc mul_sqr2_lo,x sta memA sm3: - lda asm_mul_sqr1_hi,x + lda mul_sqr1_hi,x sm4: - sbc asm_mul_sqr2_hi,x + sbc mul_sqr2_hi,x sta memB } return { *memB, *memA }; -} - -// Compare the ASM-based mul tables with the KC-based mul tables -// Red screen on failure - green on success -void mul_tables_compare() { - byte* asm_sqr = asm_mul_sqr1_lo; - for( byte* kc_sqr=mul_sqr1_lo; kc_sqr (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) - [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) - to:print_word::@1 -print_word::@1: scope:[print_word] from print_word - [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) - [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - to:print_word::@return -print_word::@return: scope:[print_word] from print_word::@1 - [65] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - to:@return -print_byte: scope:[print_byte] from print_word print_word::@1 - [66] (byte*) char_cursor#64 ← phi( print_word/(byte*) char_cursor#2 print_word::@1/(byte*) char_cursor#11 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) - [66] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) - [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) - [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) - [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) - to:print_byte::@1 -print_byte::@1: scope:[print_byte] from print_byte - [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) - [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) - [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@1 - [73] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 - [74] (byte*) char_cursor#41 ← phi( print_byte/(byte*) char_cursor#64 print_byte::@1/(byte*) char_cursor#11 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) - [74] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) - [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) - [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - [77] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) - to:@return -asm_multiply: scope:[asm_multiply] from mul_results_compare::@8 - [78] *((const byte*) asm_multiply::memA#0) ← (byte) asm_multiply::a#0 [ asm_multiply::b#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::b#0 ] ) - [79] *((const byte*) asm_multiply::memB#0) ← (byte) asm_multiply::b#0 [ ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) - asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - [81] (word) asm_multiply::return#0 ← *((const byte*) asm_multiply::memB#0) w= *((const byte*) asm_multiply::memA#0) [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) - to:asm_multiply::@return -asm_multiply::@return: scope:[asm_multiply] from asm_multiply - [82] return [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) - to:@return -slow_multiply: scope:[slow_multiply] from mul_results_compare::@2 - [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) - to:slow_multiply::@2 -slow_multiply::@2: scope:[slow_multiply] from slow_multiply slow_multiply::@2 - [84] (byte) slow_multiply::i#2 ← phi( slow_multiply::@2/(byte) slow_multiply::i#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) - [84] (word) slow_multiply::m#3 ← phi( slow_multiply::@2/(word) slow_multiply::m#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) - [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) - [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) - [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) - to:slow_multiply::@1 -slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@2 - [88] (word) slow_multiply::return#0 ← phi( slow_multiply/(byte/signed byte/word/signed word) 0 slow_multiply::@2/(word) slow_multiply::m#1 ) [ slow_multiply::return#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) - to:slow_multiply::@return -slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 - [89] return [ slow_multiply::return#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) - to:@return -mul_tables_compare: scope:[mul_tables_compare] from main::@3 - [90] phi() [ ] ( main:2::mul_tables_compare:11 [ ] ) - to:mul_tables_compare::@1 -mul_tables_compare::@1: scope:[mul_tables_compare] from mul_tables_compare mul_tables_compare::@2 - [91] (byte*) mul_tables_compare::asm_sqr#2 ← phi( mul_tables_compare/(const byte[512]) asm_mul_sqr1_lo#0 mul_tables_compare::@2/(byte*) mul_tables_compare::asm_sqr#1 ) [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - [91] (byte*) mul_tables_compare::kc_sqr#2 ← phi( mul_tables_compare/(const byte[512]) mul_sqr1_lo#0 mul_tables_compare::@2/(byte*) mul_tables_compare::kc_sqr#1 ) [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - [92] if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - to:mul_tables_compare::@3 -mul_tables_compare::@3: scope:[mul_tables_compare] from mul_tables_compare::@1 - [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - [94] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - to:mul_tables_compare::@6 -mul_tables_compare::@6: scope:[mul_tables_compare] from mul_tables_compare::@3 - [95] (word) print_word::w#0 ← ((word)) (byte*) mul_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ) - [96] call print_word param-assignment [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ) - to:mul_tables_compare::@7 -mul_tables_compare::@7: scope:[mul_tables_compare] from mul_tables_compare::@6 - [97] phi() [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ) - [98] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ) - to:mul_tables_compare::@8 -mul_tables_compare::@8: scope:[mul_tables_compare] from mul_tables_compare::@7 - [99] (word) print_word::w#1 ← ((word)) (byte*) mul_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) - [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 ] ) - to:mul_tables_compare::@return -mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare::@10 mul_tables_compare::@8 - [101] (byte*) line_cursor#17 ← phi( mul_tables_compare::@10/(byte*) line_cursor#1 mul_tables_compare::@8/((byte*))(word/signed word) 1024 ) [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - [101] (byte*) char_cursor#20 ← phi( mul_tables_compare::@10/(byte*~) char_cursor#100 mul_tables_compare::@8/(byte*) char_cursor#11 ) [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - to:@return -mul_tables_compare::@2: scope:[mul_tables_compare] from mul_tables_compare::@1 - [103] (byte*) mul_tables_compare::asm_sqr#1 ← ++ (byte*) mul_tables_compare::asm_sqr#2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ) - [104] (byte*) mul_tables_compare::kc_sqr#1 ← ++ (byte*) mul_tables_compare::kc_sqr#2 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) - [105] if((byte*) mul_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto mul_tables_compare::@1 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) - to:mul_tables_compare::@5 -mul_tables_compare::@5: scope:[mul_tables_compare] from mul_tables_compare::@2 - [106] phi() [ ] ( main:2::mul_tables_compare:11 [ ] ) - [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 ] ) - to:mul_tables_compare::@10 -mul_tables_compare::@10: scope:[mul_tables_compare] from mul_tables_compare::@5 - [108] phi() [ char_cursor#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 ] ) - [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 ] ) - [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) - to:mul_tables_compare::@return -init_mul_tables_asm: scope:[init_mul_tables_asm] from main::@2 - asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - [112] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - [113] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - [114] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - [115] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - to:init_mul_tables_asm::@return -init_mul_tables_asm::@return: scope:[init_mul_tables_asm] from init_mul_tables_asm - [116] return [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - to:@return -init_mul_tables: scope:[init_mul_tables] from main::@1 - [117] phi() [ ] ( main:2::init_mul_tables:7 [ ] ) - to:init_mul_tables::@1 -init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 - [118] (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::x_2#2 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (byte*) init_mul_tables::sqr1_hi#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr1_hi#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (byte*) init_mul_tables::sqr1_lo#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr1_lo#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (byte) init_mul_tables::c#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::c#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [119] (byte) init_mul_tables::c#1 ← ++ (byte) init_mul_tables::c#2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) - [120] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ) - [121] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) - to:init_mul_tables::@5 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - [122] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ) - [123] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) - to:init_mul_tables::@2 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - [124] (byte) init_mul_tables::x_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#3 init_mul_tables::@5/(byte) init_mul_tables::x_2#1 ) [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [124] (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#4 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [125] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) - [126] *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [127] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) - [128] *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [129] (byte*) init_mul_tables::sqr1_hi#1 ← ++ (byte*) init_mul_tables::sqr1_hi#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [130] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) - [131] (byte*) init_mul_tables::sqr1_lo#1 ← ++ (byte*) init_mul_tables::sqr1_lo#2 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) - [132] if((byte*) init_mul_tables::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@4 - [133] (byte) init_mul_tables::dir#2 ← phi( init_mul_tables::@4/(byte) init_mul_tables::dir#3 init_mul_tables::@2/(byte/word/signed word) 255 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [133] (byte*) init_mul_tables::sqr2_hi#2 ← phi( init_mul_tables::@4/(byte*) init_mul_tables::sqr2_hi#1 init_mul_tables::@2/(const byte[512]) mul_sqr2_hi#0 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [133] (byte*) init_mul_tables::sqr2_lo#2 ← phi( init_mul_tables::@4/(byte*) init_mul_tables::sqr2_lo#1 init_mul_tables::@2/(const byte[512]) mul_sqr2_lo#0 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [133] (byte) init_mul_tables::x_255#2 ← phi( init_mul_tables::@4/(byte) init_mul_tables::x_255#1 init_mul_tables::@2/((byte))-(byte/signed byte/word/signed word) 1 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [134] *((byte*) init_mul_tables::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [135] *((byte*) init_mul_tables::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [136] (byte*) init_mul_tables::sqr2_hi#1 ← ++ (byte*) init_mul_tables::sqr2_hi#2 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ) - [137] (byte) init_mul_tables::x_255#1 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) - [138] if((byte) init_mul_tables::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@12 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) - to:init_mul_tables::@4 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@12 init_mul_tables::@3 - [139] (byte) init_mul_tables::dir#3 ← phi( init_mul_tables::@12/(byte) init_mul_tables::dir#2 init_mul_tables::@3/(byte/signed byte/word/signed word) 1 ) [ init_mul_tables::sqr2_lo#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) - [140] (byte*) init_mul_tables::sqr2_lo#1 ← ++ (byte*) init_mul_tables::sqr2_lo#2 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) - [141] if((byte*) init_mul_tables::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_mul_tables::@3 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) - to:init_mul_tables::@8 -init_mul_tables::@8: scope:[init_mul_tables] from init_mul_tables::@4 - [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) - [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) - to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@8 - [144] return [ ] ( main:2::init_mul_tables:7 [ ] ) - to:@return -init_mul_tables::@12: scope:[init_mul_tables] from init_mul_tables::@3 - [145] phi() [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) - to:init_mul_tables::@4 -print_cls: scope:[print_cls] from main - [146] phi() [ ] ( main:2::print_cls:5 [ ] ) - to:print_cls::@1 -print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - [147] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) - [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) - [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) - [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@1 - [151] return [ ] ( main:2::print_cls:5 [ ] ) - to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/multiply.log b/src/test/java/dk/camelot64/kickc/test/ref/multiply.log deleted file mode 100644 index da17aa58a..000000000 --- a/src/test/java/dk/camelot64/kickc/test/ref/multiply.log +++ /dev/null @@ -1,7130 +0,0 @@ -PARSING src/test/java/dk/camelot64/kickc/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 - -import "print.kc" - -byte* BGCOL = $d021; - -void main() { - *BGCOL = 5; - print_cls(); - init_mul_tables(); - init_mul_tables_asm(); - mul_tables_compare(); - mul_results_compare(); -} - -// Perform a slow multiplication by repeated addition -word slow_multiply(byte a, byte b) { - word m = 0; - if(a>0) { - for(byte i = 0; i!=a; i++) { - m = m + b; - } - } - return m; -} - -// mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). -// f(x) = >(( x * x )/4) -byte[512] align($100) mul_sqr1_hi; -// g(x) = >((( x - 255) * ( x - 255 ))/4) -byte[512] align($100) mul_sqr2_hi; - -// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4) -void init_mul_tables() { - // Fill mul_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - word sqr = 0; // sqr = (x*x)/4 - byte x_2 = 0; // x/2 - byte c = 0; // Counter used for determining x%2==0 - byte* sqr1_hi = mul_sqr1_hi+1; - for(byte* sqr1_lo = mul_sqr1_lo+1; sqr1_lo!=mul_sqr1_lo+512; sqr1_lo++) { - if((++c&1)==0) { - x_2++; // increase i/2 on even numbers - sqr++; // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number) - } - *sqr1_lo = sqr; - sqr = sqr + x_2; // sqr = sqr + i/2 (when uneven the 1/2 is not added here - see above) - } - // Fill mul_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x) - // g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256) - byte x_255 = (byte)-1; //Start with g(0)=f(255) - byte dir = $ff; // Decrease or increase x_255 - initially we decrease - byte* sqr2_hi = mul_sqr2_hi; - for(byte* sqr2_lo = mul_sqr2_lo; sqr2_lo!=mul_sqr2_lo+511; sqr2_lo++) { - *sqr2_lo = mul_sqr1_lo[x_255]; - *sqr2_hi++ = mul_sqr1_hi[x_255]; - x_255 = x_255 + dir; - if(x_255==0) { - dir = 1; // when x_255=0 then start counting up - } - } - // Set the very last value g(511) = f(256) - *(mul_sqr2_lo+511) = *(mul_sqr1_lo+256); - *(mul_sqr2_hi+511) = *(mul_sqr1_hi+256); -} - -// ASM based multiplication tables -// <(( x * x )/4) -byte[512] align($100) asm_mul_sqr1_lo; -// >(( x * x )/4) -byte[512] align($100) asm_mul_sqr1_hi; -// <((( x - 255) * ( x - 255 ))/4) -byte[512] align($100) asm_mul_sqr2_lo; -// >((( x - 255) * ( x - 255 ))/4) -byte[512] align($100) asm_mul_sqr2_hi; -// Initialize the multiplication tables using ASM code from -// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication -void init_mul_tables_asm() { - asm{ - ldx #$00 - txa - .byte $c9 - lb1: - tya - adc #$00 - ml1: - sta asm_mul_sqr1_hi,x - tay - cmp #$40 - txa - ror - ml9: - adc #$00 - sta ml9+1 - inx - ml0: - sta asm_mul_sqr1_lo,x - bne lb1 - inc ml0+2 - inc ml1+2 - clc - iny - bne lb1 - ldx #$00 - ldy #$ff - !: - lda asm_mul_sqr1_hi+1,x - sta asm_mul_sqr2_hi+$100,x - lda asm_mul_sqr1_hi,x - sta asm_mul_sqr2_hi,y - lda asm_mul_sqr1_lo+1,x - sta asm_mul_sqr2_lo+$100,x - lda asm_mul_sqr1_lo,x - sta asm_mul_sqr2_lo,y - dey - inx - bne !- - } - // Ensure the ASM tables are not detected as unused by the optimizer - byte* mem = $ff; - *mem = *asm_mul_sqr1_lo; - *mem = *asm_mul_sqr1_hi; - *mem = *asm_mul_sqr2_lo; - *mem = *asm_mul_sqr2_hi; -} - -// Fast multiply two bytes using ASM -word asm_multiply(byte a, byte b) { - const byte* memA = $fe; - const byte* memB = $ff; - *memA = a; - *memB = b; - asm { - lda memA - sta sm1+1 - sta sm3+1 - eor #$ff - sta sm2+1 - sta sm4+1 - ldx memB - sec - sm1: - lda asm_mul_sqr1_lo,x - sm2: - sbc asm_mul_sqr2_lo,x - sta memA - sm3: - lda asm_mul_sqr1_hi,x - sm4: - sbc asm_mul_sqr2_hi,x - sta memB - } - return { *memB, *memA }; -} - -// Compare the ASM-based mul tables with the KC-based mul tables -// Red screen on failure - green on success -void mul_tables_compare() { - byte* asm_sqr = asm_mul_sqr1_lo; - for( byte* kc_sqr=mul_sqr1_lo; kc_sqrw); - print_byte(>4]); - print_char(hextab[b&$f]); -} - -// Print a single char -void print_char(byte ch) { - *(char_cursor++) = ch; -} - -// Clear the screen -void print_cls() { - for(byte* sc=$0400; sc!=$0400+1000; sc++) { - *sc = ' '; - } -} - - - -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 -Adding pre/post-modifier (byte) slow_multiply::i ← ++ (byte) slow_multiply::i -Adding pre/post-modifier (byte) init_mul_tables::c ← ++ (byte) init_mul_tables::c -Adding pre/post-modifier (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 -Adding pre/post-modifier (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr -Adding pre/post-modifier (byte*) init_mul_tables::sqr1_hi ← ++ (byte*) init_mul_tables::sqr1_hi -Adding pre/post-modifier (byte*) init_mul_tables::sqr1_lo ← ++ (byte*) init_mul_tables::sqr1_lo -Adding pre/post-modifier (byte*) init_mul_tables::sqr2_hi ← ++ (byte*) init_mul_tables::sqr2_hi -Adding pre/post-modifier (byte*) init_mul_tables::sqr2_lo ← ++ (byte*) init_mul_tables::sqr2_lo -Adding pre/post-modifier (byte*) mul_tables_compare::asm_sqr ← ++ (byte*) mul_tables_compare::asm_sqr -Adding pre/post-modifier (byte*) mul_tables_compare::kc_sqr ← ++ (byte*) mul_tables_compare::kc_sqr - -STATEMENTS - (byte*) line_cursor ← (word/signed word) 1024 - (byte*) char_cursor ← (byte*) line_cursor -proc (void()) print_str((byte*) print_str::str) -print_str::@1: - (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' - if((boolean~) print_str::$0) goto print_str::@2 - goto print_str::@3 -print_str::@2: - *((byte*) char_cursor) ← *((byte*) print_str::str) - (byte*) char_cursor ← ++ (byte*) char_cursor - (byte*) print_str::str ← ++ (byte*) print_str::str - goto print_str::@1 -print_str::@3: -print_str::@return: - return -endproc // print_str() -proc (void()) print_ln() -print_ln::@1: - (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word) 40 - (byte*) line_cursor ← (byte*~) print_ln::$0 - (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor - if((boolean~) print_ln::$1) goto print_ln::@1 - (byte*) char_cursor ← (byte*) line_cursor -print_ln::@return: - return -endproc // print_ln() -proc (void()) print_word((word) print_word::w) - (byte~) print_word::$0 ← > (word) print_word::w - (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 - (byte~) print_word::$2 ← < (word) print_word::w - (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 -print_word::@return: - return -endproc // print_word() -proc (void()) print_byte((byte) print_byte::b) - (byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } - (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4 - (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) - (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15 - (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) -print_byte::@return: - return -endproc // print_byte() -proc (void()) print_char((byte) print_char::ch) - *((byte*) char_cursor) ← (byte) print_char::ch - (byte*) char_cursor ← ++ (byte*) char_cursor -print_char::@return: - return -endproc // print_char() -proc (void()) print_cls() - (byte*) print_cls::sc ← (word/signed word) 1024 -print_cls::@1: - *((byte*) print_cls::sc) ← (byte) ' ' - (byte*) print_cls::sc ← ++ (byte*) print_cls::sc - (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 - (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word~) print_cls::$0 - if((boolean~) print_cls::$1) goto print_cls::@1 -print_cls::@return: - return -endproc // print_cls() - (byte*) BGCOL ← (word) 53281 -proc (void()) main() - *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 5 - (void~) main::$0 ← call print_cls - (void~) main::$1 ← call init_mul_tables - (void~) main::$2 ← call init_mul_tables_asm - (void~) main::$3 ← call mul_tables_compare - (void~) main::$4 ← call mul_results_compare -main::@return: - return -endproc // main() -proc (word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) - (word) slow_multiply::m ← (byte/signed byte/word/signed word) 0 - (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a > (byte/signed byte/word/signed word) 0 - (boolean~) slow_multiply::$1 ← ! (boolean~) slow_multiply::$0 - if((boolean~) slow_multiply::$1) goto slow_multiply::@1 - (byte) slow_multiply::i ← (byte/signed byte/word/signed word) 0 -slow_multiply::@2: - (word~) slow_multiply::$2 ← (word) slow_multiply::m + (byte) slow_multiply::b - (word) slow_multiply::m ← (word~) slow_multiply::$2 - (byte) slow_multiply::i ← ++ (byte) slow_multiply::i - (boolean~) slow_multiply::$3 ← (byte) slow_multiply::i != (byte) slow_multiply::a - if((boolean~) slow_multiply::$3) goto slow_multiply::@2 -slow_multiply::@1: - (word) slow_multiply::return ← (word) slow_multiply::m - goto slow_multiply::@return -slow_multiply::@return: - (word) slow_multiply::return ← (word) slow_multiply::return - return (word) slow_multiply::return -endproc // slow_multiply() - (byte[512]) mul_sqr1_lo ← { fill( 512, 0) } - (byte[512]) mul_sqr1_hi ← { fill( 512, 0) } - (byte[512]) mul_sqr2_lo ← { fill( 512, 0) } - (byte[512]) mul_sqr2_hi ← { fill( 512, 0) } -proc (void()) init_mul_tables() - (word) init_mul_tables::sqr ← (byte/signed byte/word/signed word) 0 - (byte) init_mul_tables::x_2 ← (byte/signed byte/word/signed word) 0 - (byte) init_mul_tables::c ← (byte/signed byte/word/signed word) 0 - (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr1_hi + (byte/signed byte/word/signed word) 1 - (byte*) init_mul_tables::sqr1_hi ← (byte*~) init_mul_tables::$0 - (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr1_lo + (byte/signed byte/word/signed word) 1 - (byte*) init_mul_tables::sqr1_lo ← (byte*~) init_mul_tables::$1 -init_mul_tables::@1: - (byte) init_mul_tables::c ← ++ (byte) init_mul_tables::c - (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 - if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 - (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr -init_mul_tables::@2: - (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr - *((byte*) init_mul_tables::sqr1_lo) ← (byte~) init_mul_tables::$5 - (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr - *((byte*) init_mul_tables::sqr1_hi) ← (byte~) init_mul_tables::$6 - (byte*) init_mul_tables::sqr1_hi ← ++ (byte*) init_mul_tables::sqr1_hi - (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr + (byte) init_mul_tables::x_2 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$7 - (byte*) init_mul_tables::sqr1_lo ← ++ (byte*) init_mul_tables::sqr1_lo - (byte*~) init_mul_tables::$8 ← (byte[512]) mul_sqr1_lo + (word/signed word) 512 - (boolean~) init_mul_tables::$9 ← (byte*) init_mul_tables::sqr1_lo != (byte*~) init_mul_tables::$8 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 - (signed byte/signed word~) init_mul_tables::$10 ← - (byte/signed byte/word/signed word) 1 - (byte~) init_mul_tables::$11 ← ((byte)) (signed byte/signed word~) init_mul_tables::$10 - (byte) init_mul_tables::x_255 ← (byte~) init_mul_tables::$11 - (byte) init_mul_tables::dir ← (byte/word/signed word) 255 - (byte*) init_mul_tables::sqr2_hi ← (byte[512]) mul_sqr2_hi - (byte*) init_mul_tables::sqr2_lo ← (byte[512]) mul_sqr2_lo -init_mul_tables::@3: - *((byte*) init_mul_tables::sqr2_lo) ← *((byte[512]) mul_sqr1_lo + (byte) init_mul_tables::x_255) - *((byte*) init_mul_tables::sqr2_hi) ← *((byte[512]) mul_sqr1_hi + (byte) init_mul_tables::x_255) - (byte*) init_mul_tables::sqr2_hi ← ++ (byte*) init_mul_tables::sqr2_hi - (byte/word~) init_mul_tables::$12 ← (byte) init_mul_tables::x_255 + (byte) init_mul_tables::dir - (byte) init_mul_tables::x_255 ← (byte/word~) init_mul_tables::$12 - (boolean~) init_mul_tables::$13 ← (byte) init_mul_tables::x_255 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$14 ← ! (boolean~) init_mul_tables::$13 - if((boolean~) init_mul_tables::$14) goto init_mul_tables::@4 - (byte) init_mul_tables::dir ← (byte/signed byte/word/signed word) 1 -init_mul_tables::@4: - (byte*) init_mul_tables::sqr2_lo ← ++ (byte*) init_mul_tables::sqr2_lo - (byte*~) init_mul_tables::$15 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 - (boolean~) init_mul_tables::$16 ← (byte*) init_mul_tables::sqr2_lo != (byte*~) init_mul_tables::$15 - if((boolean~) init_mul_tables::$16) goto init_mul_tables::@3 - (byte*~) init_mul_tables::$17 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 - (byte*~) init_mul_tables::$18 ← (byte[512]) mul_sqr1_lo + (word/signed word) 256 - *((byte*~) init_mul_tables::$17) ← *((byte*~) init_mul_tables::$18) - (byte*~) init_mul_tables::$19 ← (byte[512]) mul_sqr2_hi + (word/signed word) 511 - (byte*~) init_mul_tables::$20 ← (byte[512]) mul_sqr1_hi + (word/signed word) 256 - *((byte*~) init_mul_tables::$19) ← *((byte*~) init_mul_tables::$20) -init_mul_tables::@return: - return -endproc // init_mul_tables() - (byte[512]) asm_mul_sqr1_lo ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr1_hi ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr2_lo ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr2_hi ← { fill( 512, 0) } -proc (void()) init_mul_tables_asm() - asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - (byte*) init_mul_tables_asm::mem ← (byte/word/signed word) 255 - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr1_lo) - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr1_hi) - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr2_lo) - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr2_hi) -init_mul_tables_asm::@return: - return -endproc // init_mul_tables_asm() -proc (word()) asm_multiply((byte) asm_multiply::a , (byte) asm_multiply::b) - (byte*) asm_multiply::memA ← (byte/word/signed word) 254 - (byte*) asm_multiply::memB ← (byte/word/signed word) 255 - *((byte*) asm_multiply::memA) ← (byte) asm_multiply::a - *((byte*) asm_multiply::memB) ← (byte) asm_multiply::b - asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - (word) asm_multiply::return ← { *((byte*) asm_multiply::memB), *((byte*) asm_multiply::memA) } - goto asm_multiply::@return -asm_multiply::@return: - (word) asm_multiply::return ← (word) asm_multiply::return - return (word) asm_multiply::return -endproc // asm_multiply() -proc (void()) mul_tables_compare() - (byte*) mul_tables_compare::asm_sqr ← (byte[512]) asm_mul_sqr1_lo - (byte*) mul_tables_compare::kc_sqr ← (byte[512]) mul_sqr1_lo -mul_tables_compare::@1: - (boolean~) mul_tables_compare::$0 ← *((byte*) mul_tables_compare::kc_sqr) != *((byte*) mul_tables_compare::asm_sqr) - (boolean~) mul_tables_compare::$1 ← ! (boolean~) mul_tables_compare::$0 - if((boolean~) mul_tables_compare::$1) goto mul_tables_compare::@2 - *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 - (void~) mul_tables_compare::$2 ← call print_str (string) "multiply table mismatch at @" - (word~) mul_tables_compare::$3 ← ((word)) (byte*) mul_tables_compare::asm_sqr - (void~) mul_tables_compare::$4 ← call print_word (word~) mul_tables_compare::$3 - (void~) mul_tables_compare::$5 ← call print_str (string) " / @" - (word~) mul_tables_compare::$6 ← ((word)) (byte*) mul_tables_compare::kc_sqr - (void~) mul_tables_compare::$7 ← call print_word (word~) mul_tables_compare::$6 - goto mul_tables_compare::@return -mul_tables_compare::@2: - (byte*) mul_tables_compare::asm_sqr ← ++ (byte*) mul_tables_compare::asm_sqr - (byte*) mul_tables_compare::kc_sqr ← ++ (byte*) mul_tables_compare::kc_sqr - (word/signed word~) mul_tables_compare::$8 ← (word/signed word) 512 * (byte/signed byte/word/signed word) 4 - (byte*~) mul_tables_compare::$9 ← (byte[512]) mul_sqr1_lo + (word/signed word~) mul_tables_compare::$8 - (boolean~) mul_tables_compare::$10 ← (byte*) mul_tables_compare::kc_sqr < (byte*~) mul_tables_compare::$9 - if((boolean~) mul_tables_compare::$10) goto mul_tables_compare::@1 - (void~) mul_tables_compare::$11 ← call print_str (string) "multiply tables match!@" - (void~) mul_tables_compare::$12 ← call print_ln -mul_tables_compare::@return: - return -endproc // mul_tables_compare() -proc (void()) mul_results_compare() - (byte) mul_results_compare::a ← (byte/signed byte/word/signed word) 0 -mul_results_compare::@1: - (byte) mul_results_compare::b ← (byte/signed byte/word/signed word) 0 -mul_results_compare::@2: - (word~) mul_results_compare::$0 ← call slow_multiply (byte) mul_results_compare::a (byte) mul_results_compare::b - (word) mul_results_compare::ms ← (word~) mul_results_compare::$0 - (word~) mul_results_compare::$1 ← call asm_multiply (byte) mul_results_compare::a (byte) mul_results_compare::b - (word) mul_results_compare::ma ← (word~) mul_results_compare::$1 - (boolean~) mul_results_compare::$2 ← (word) mul_results_compare::ms != (word) mul_results_compare::ma - (boolean~) mul_results_compare::$3 ← ! (boolean~) mul_results_compare::$2 - if((boolean~) mul_results_compare::$3) goto mul_results_compare::@3 - *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 - (void~) mul_results_compare::$4 ← call print_str (string) "multiply mismatch slow:@" - (void~) mul_results_compare::$5 ← call print_word (word) mul_results_compare::ms - (void~) mul_results_compare::$6 ← call print_str (string) " / fast asm:" - (void~) mul_results_compare::$7 ← call print_word (word) mul_results_compare::ma - goto mul_results_compare::@return -mul_results_compare::@3: - (byte) mul_results_compare::b ← ++ (byte) mul_results_compare::b - (boolean~) mul_results_compare::$8 ← (byte) mul_results_compare::b != (byte/signed byte/word/signed word) 0 - if((boolean~) mul_results_compare::$8) goto mul_results_compare::@2 - (byte) mul_results_compare::a ← ++ (byte) mul_results_compare::a - (boolean~) mul_results_compare::$9 ← (byte) mul_results_compare::a != (byte/signed byte/word/signed word) 0 - if((boolean~) mul_results_compare::$9) goto mul_results_compare::@1 - (void~) mul_results_compare::$10 ← call print_str (string) "multiply results match!@" - (void~) mul_results_compare::$11 ← call print_ln -mul_results_compare::@return: - return -endproc // mul_results_compare() - call main - -SYMBOLS -(byte*) BGCOL -(byte[512]) asm_mul_sqr1_hi -(byte[512]) asm_mul_sqr1_lo -(byte[512]) asm_mul_sqr2_hi -(byte[512]) asm_mul_sqr2_lo -(word()) asm_multiply((byte) asm_multiply::a , (byte) asm_multiply::b) -(label) asm_multiply::@return -(byte) asm_multiply::a -(byte) asm_multiply::b -(byte*) asm_multiply::memA -(byte*) asm_multiply::memB -(word) asm_multiply::return -(byte*) char_cursor -(void()) init_mul_tables() -(byte*~) init_mul_tables::$0 -(byte*~) init_mul_tables::$1 -(signed byte/signed word~) init_mul_tables::$10 -(byte~) init_mul_tables::$11 -(byte/word~) init_mul_tables::$12 -(boolean~) init_mul_tables::$13 -(boolean~) init_mul_tables::$14 -(byte*~) init_mul_tables::$15 -(boolean~) init_mul_tables::$16 -(byte*~) init_mul_tables::$17 -(byte*~) init_mul_tables::$18 -(byte*~) init_mul_tables::$19 -(byte~) init_mul_tables::$2 -(byte*~) init_mul_tables::$20 -(boolean~) init_mul_tables::$3 -(boolean~) init_mul_tables::$4 -(byte~) init_mul_tables::$5 -(byte~) init_mul_tables::$6 -(word~) init_mul_tables::$7 -(byte*~) init_mul_tables::$8 -(boolean~) init_mul_tables::$9 -(label) init_mul_tables::@1 -(label) init_mul_tables::@2 -(label) init_mul_tables::@3 -(label) init_mul_tables::@4 -(label) init_mul_tables::@return -(byte) init_mul_tables::c -(byte) init_mul_tables::dir -(word) init_mul_tables::sqr -(byte*) init_mul_tables::sqr1_hi -(byte*) init_mul_tables::sqr1_lo -(byte*) init_mul_tables::sqr2_hi -(byte*) init_mul_tables::sqr2_lo -(byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_255 -(void()) init_mul_tables_asm() -(label) init_mul_tables_asm::@return -(byte*) init_mul_tables_asm::mem -(byte*) line_cursor -(void()) main() -(void~) main::$0 -(void~) main::$1 -(void~) main::$2 -(void~) main::$3 -(void~) main::$4 -(label) main::@return -(void()) mul_results_compare() -(word~) mul_results_compare::$0 -(word~) mul_results_compare::$1 -(void~) mul_results_compare::$10 -(void~) mul_results_compare::$11 -(boolean~) mul_results_compare::$2 -(boolean~) mul_results_compare::$3 -(void~) mul_results_compare::$4 -(void~) mul_results_compare::$5 -(void~) mul_results_compare::$6 -(void~) mul_results_compare::$7 -(boolean~) mul_results_compare::$8 -(boolean~) mul_results_compare::$9 -(label) mul_results_compare::@1 -(label) mul_results_compare::@2 -(label) mul_results_compare::@3 -(label) mul_results_compare::@return -(byte) mul_results_compare::a -(byte) mul_results_compare::b -(word) mul_results_compare::ma -(word) mul_results_compare::ms -(byte[512]) mul_sqr1_hi -(byte[512]) mul_sqr1_lo -(byte[512]) mul_sqr2_hi -(byte[512]) mul_sqr2_lo -(void()) mul_tables_compare() -(boolean~) mul_tables_compare::$0 -(boolean~) mul_tables_compare::$1 -(boolean~) mul_tables_compare::$10 -(void~) mul_tables_compare::$11 -(void~) mul_tables_compare::$12 -(void~) mul_tables_compare::$2 -(word~) mul_tables_compare::$3 -(void~) mul_tables_compare::$4 -(void~) mul_tables_compare::$5 -(word~) mul_tables_compare::$6 -(void~) mul_tables_compare::$7 -(word/signed word~) mul_tables_compare::$8 -(byte*~) mul_tables_compare::$9 -(label) mul_tables_compare::@1 -(label) mul_tables_compare::@2 -(label) mul_tables_compare::@return -(byte*) mul_tables_compare::asm_sqr -(byte*) mul_tables_compare::kc_sqr -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 -(void~) print_byte::$1 -(byte~) print_byte::$2 -(void~) print_byte::$3 -(label) print_byte::@return -(byte) print_byte::b -(byte[]) print_byte::hextab -(void()) print_char((byte) print_char::ch) -(label) print_char::@return -(byte) print_char::ch -(void()) print_cls() -(word/signed word~) print_cls::$0 -(boolean~) print_cls::$1 -(label) print_cls::@1 -(label) print_cls::@return -(byte*) print_cls::sc -(void()) print_ln() -(byte*~) print_ln::$0 -(boolean~) print_ln::$1 -(label) print_ln::@1 -(label) print_ln::@return -(void()) print_str((byte*) print_str::str) -(boolean~) print_str::$0 -(label) print_str::@1 -(label) print_str::@2 -(label) print_str::@3 -(label) print_str::@return -(byte*) print_str::str -(void()) print_word((word) print_word::w) -(byte~) print_word::$0 -(void~) print_word::$1 -(byte~) print_word::$2 -(void~) print_word::$3 -(label) print_word::@return -(word) print_word::w -(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) -(boolean~) slow_multiply::$0 -(boolean~) slow_multiply::$1 -(word~) slow_multiply::$2 -(boolean~) slow_multiply::$3 -(label) slow_multiply::@1 -(label) slow_multiply::@2 -(label) slow_multiply::@return -(byte) slow_multiply::a -(byte) slow_multiply::b -(byte) slow_multiply::i -(word) slow_multiply::m -(word) slow_multiply::return - -Promoting word/signed word to byte* in line_cursor ← ((byte*)) 1024 -Promoting word/signed word to byte* in print_cls::sc ← ((byte*)) 1024 -Promoting word to byte* in BGCOL ← ((byte*)) 53281 -Promoting byte/word/signed word to byte* in init_mul_tables_asm::mem ← ((byte*)) 255 -Promoting byte/word/signed word to byte* in asm_multiply::memA ← ((byte*)) 254 -Promoting byte/word/signed word to byte* in asm_multiply::memB ← ((byte*)) 255 -INITIAL CONTROL FLOW GRAPH -@begin: scope:[] from - (byte*) line_cursor ← ((byte*)) (word/signed word) 1024 - (byte*) char_cursor ← (byte*) line_cursor - to:@1 -print_str: scope:[print_str] from - to:print_str::@1 -print_str::@1: scope:[print_str] from print_str print_str::@2 - (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' - if((boolean~) print_str::$0) goto print_str::@2 - to:print_str::@4 -print_str::@2: scope:[print_str] from print_str::@1 print_str::@5 - *((byte*) char_cursor) ← *((byte*) print_str::str) - (byte*) char_cursor ← ++ (byte*) char_cursor - (byte*) print_str::str ← ++ (byte*) print_str::str - to:print_str::@1 -print_str::@4: scope:[print_str] from print_str::@1 - to:print_str::@3 -print_str::@3: scope:[print_str] from print_str::@4 print_str::@6 - to:print_str::@return -print_str::@5: scope:[print_str] from - to:print_str::@2 -print_str::@6: scope:[print_str] from - to:print_str::@3 -print_str::@return: scope:[print_str] from print_str::@3 - return - to:@return -@1: scope:[] from @begin - to:@2 -print_ln: scope:[print_ln] from - to:print_ln::@1 -print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word) 40 - (byte*) line_cursor ← (byte*~) print_ln::$0 - (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor - if((boolean~) print_ln::$1) goto print_ln::@1 - to:print_ln::@2 -print_ln::@2: scope:[print_ln] from print_ln::@1 - (byte*) char_cursor ← (byte*) line_cursor - to:print_ln::@return -print_ln::@return: scope:[print_ln] from print_ln::@2 - return - to:@return -@2: scope:[] from @1 - to:@3 -print_word: scope:[print_word] from - (byte~) print_word::$0 ← > (word) print_word::w - (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 - (byte~) print_word::$2 ← < (word) print_word::w - (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 - to:print_word::@return -print_word::@return: scope:[print_word] from print_word - return - to:@return -@3: scope:[] from @2 - to:@4 -print_byte: scope:[print_byte] from - (byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } - (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4 - (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) - (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15 - (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte - return - to:@return -@4: scope:[] from @3 - to:@5 -print_char: scope:[print_char] from - *((byte*) char_cursor) ← (byte) print_char::ch - (byte*) char_cursor ← ++ (byte*) char_cursor - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - return - to:@return -@5: scope:[] from @4 - to:@6 -print_cls: scope:[print_cls] from - (byte*) print_cls::sc ← ((byte*)) (word/signed word) 1024 - to:print_cls::@1 -print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - *((byte*) print_cls::sc) ← (byte) ' ' - (byte*) print_cls::sc ← ++ (byte*) print_cls::sc - (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 - (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word~) print_cls::$0 - if((boolean~) print_cls::$1) goto print_cls::@1 - to:print_cls::@2 -print_cls::@2: scope:[print_cls] from print_cls::@1 - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@2 - return - to:@return -@6: scope:[] from @5 - (byte*) BGCOL ← ((byte*)) (word) 53281 - to:@7 -main: scope:[main] from - *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 5 - (void~) main::$0 ← call print_cls - (void~) main::$1 ← call init_mul_tables - (void~) main::$2 ← call init_mul_tables_asm - (void~) main::$3 ← call mul_tables_compare - (void~) main::$4 ← call mul_results_compare - to:main::@return -main::@return: scope:[main] from main - return - to:@return -@7: scope:[] from @6 - to:@8 -slow_multiply: scope:[slow_multiply] from - (word) slow_multiply::m ← (byte/signed byte/word/signed word) 0 - (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a > (byte/signed byte/word/signed word) 0 - (boolean~) slow_multiply::$1 ← ! (boolean~) slow_multiply::$0 - if((boolean~) slow_multiply::$1) goto slow_multiply::@1 - to:slow_multiply::@3 -slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@4 - (word) slow_multiply::return ← (word) slow_multiply::m - to:slow_multiply::@return -slow_multiply::@3: scope:[slow_multiply] from slow_multiply - (byte) slow_multiply::i ← (byte/signed byte/word/signed word) 0 - to:slow_multiply::@2 -slow_multiply::@2: scope:[slow_multiply] from slow_multiply::@2 slow_multiply::@3 - (word~) slow_multiply::$2 ← (word) slow_multiply::m + (byte) slow_multiply::b - (word) slow_multiply::m ← (word~) slow_multiply::$2 - (byte) slow_multiply::i ← ++ (byte) slow_multiply::i - (boolean~) slow_multiply::$3 ← (byte) slow_multiply::i != (byte) slow_multiply::a - if((boolean~) slow_multiply::$3) goto slow_multiply::@2 - to:slow_multiply::@4 -slow_multiply::@4: scope:[slow_multiply] from slow_multiply::@2 - to:slow_multiply::@1 -slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 slow_multiply::@5 - (word) slow_multiply::return ← (word) slow_multiply::return - return (word) slow_multiply::return - to:@return -slow_multiply::@5: scope:[slow_multiply] from - to:slow_multiply::@return -@8: scope:[] from @7 - (byte[512]) mul_sqr1_lo ← { fill( 512, 0) } - (byte[512]) mul_sqr1_hi ← { fill( 512, 0) } - (byte[512]) mul_sqr2_lo ← { fill( 512, 0) } - (byte[512]) mul_sqr2_hi ← { fill( 512, 0) } - to:@9 -init_mul_tables: scope:[init_mul_tables] from - (word) init_mul_tables::sqr ← (byte/signed byte/word/signed word) 0 - (byte) init_mul_tables::x_2 ← (byte/signed byte/word/signed word) 0 - (byte) init_mul_tables::c ← (byte/signed byte/word/signed word) 0 - (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr1_hi + (byte/signed byte/word/signed word) 1 - (byte*) init_mul_tables::sqr1_hi ← (byte*~) init_mul_tables::$0 - (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr1_lo + (byte/signed byte/word/signed word) 1 - (byte*) init_mul_tables::sqr1_lo ← (byte*~) init_mul_tables::$1 - to:init_mul_tables::@1 -init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 - (byte) init_mul_tables::c ← ++ (byte) init_mul_tables::c - (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 - if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr - *((byte*) init_mul_tables::sqr1_lo) ← (byte~) init_mul_tables::$5 - (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr - *((byte*) init_mul_tables::sqr1_hi) ← (byte~) init_mul_tables::$6 - (byte*) init_mul_tables::sqr1_hi ← ++ (byte*) init_mul_tables::sqr1_hi - (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr + (byte) init_mul_tables::x_2 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$7 - (byte*) init_mul_tables::sqr1_lo ← ++ (byte*) init_mul_tables::sqr1_lo - (byte*~) init_mul_tables::$8 ← (byte[512]) mul_sqr1_lo + (word/signed word) 512 - (boolean~) init_mul_tables::$9 ← (byte*) init_mul_tables::sqr1_lo != (byte*~) init_mul_tables::$8 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (signed byte/signed word~) init_mul_tables::$10 ← - (byte/signed byte/word/signed word) 1 - (byte~) init_mul_tables::$11 ← ((byte)) (signed byte/signed word~) init_mul_tables::$10 - (byte) init_mul_tables::x_255 ← (byte~) init_mul_tables::$11 - (byte) init_mul_tables::dir ← (byte/word/signed word) 255 - (byte*) init_mul_tables::sqr2_hi ← (byte[512]) mul_sqr2_hi - (byte*) init_mul_tables::sqr2_lo ← (byte[512]) mul_sqr2_lo - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - *((byte*) init_mul_tables::sqr2_lo) ← *((byte[512]) mul_sqr1_lo + (byte) init_mul_tables::x_255) - *((byte*) init_mul_tables::sqr2_hi) ← *((byte[512]) mul_sqr1_hi + (byte) init_mul_tables::x_255) - (byte*) init_mul_tables::sqr2_hi ← ++ (byte*) init_mul_tables::sqr2_hi - (byte/word~) init_mul_tables::$12 ← (byte) init_mul_tables::x_255 + (byte) init_mul_tables::dir - (byte) init_mul_tables::x_255 ← (byte/word~) init_mul_tables::$12 - (boolean~) init_mul_tables::$13 ← (byte) init_mul_tables::x_255 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$14 ← ! (boolean~) init_mul_tables::$13 - if((boolean~) init_mul_tables::$14) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte*) init_mul_tables::sqr2_lo ← ++ (byte*) init_mul_tables::sqr2_lo - (byte*~) init_mul_tables::$15 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 - (boolean~) init_mul_tables::$16 ← (byte*) init_mul_tables::sqr2_lo != (byte*~) init_mul_tables::$15 - if((boolean~) init_mul_tables::$16) goto init_mul_tables::@3 - to:init_mul_tables::@8 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (byte) init_mul_tables::dir ← (byte/signed byte/word/signed word) 1 - to:init_mul_tables::@4 -init_mul_tables::@8: scope:[init_mul_tables] from init_mul_tables::@4 - (byte*~) init_mul_tables::$17 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 - (byte*~) init_mul_tables::$18 ← (byte[512]) mul_sqr1_lo + (word/signed word) 256 - *((byte*~) init_mul_tables::$17) ← *((byte*~) init_mul_tables::$18) - (byte*~) init_mul_tables::$19 ← (byte[512]) mul_sqr2_hi + (word/signed word) 511 - (byte*~) init_mul_tables::$20 ← (byte[512]) mul_sqr1_hi + (word/signed word) 256 - *((byte*~) init_mul_tables::$19) ← *((byte*~) init_mul_tables::$20) - to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@8 - return - to:@return -@9: scope:[] from @8 - (byte[512]) asm_mul_sqr1_lo ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr1_hi ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr2_lo ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr2_hi ← { fill( 512, 0) } - to:@10 -init_mul_tables_asm: scope:[init_mul_tables_asm] from - asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - (byte*) init_mul_tables_asm::mem ← ((byte*)) (byte/word/signed word) 255 - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr1_lo) - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr1_hi) - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr2_lo) - *((byte*) init_mul_tables_asm::mem) ← *((byte[512]) asm_mul_sqr2_hi) - to:init_mul_tables_asm::@return -init_mul_tables_asm::@return: scope:[init_mul_tables_asm] from init_mul_tables_asm - return - to:@return -@10: scope:[] from @9 - to:@11 -asm_multiply: scope:[asm_multiply] from - (byte*) asm_multiply::memA ← ((byte*)) (byte/word/signed word) 254 - (byte*) asm_multiply::memB ← ((byte*)) (byte/word/signed word) 255 - *((byte*) asm_multiply::memA) ← (byte) asm_multiply::a - *((byte*) asm_multiply::memB) ← (byte) asm_multiply::b - asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - (word) asm_multiply::return ← { *((byte*) asm_multiply::memB), *((byte*) asm_multiply::memA) } - to:asm_multiply::@return -asm_multiply::@return: scope:[asm_multiply] from asm_multiply asm_multiply::@1 - (word) asm_multiply::return ← (word) asm_multiply::return - return (word) asm_multiply::return - to:@return -asm_multiply::@1: scope:[asm_multiply] from - to:asm_multiply::@return -@11: scope:[] from @10 - to:@12 -mul_tables_compare: scope:[mul_tables_compare] from - (byte*) mul_tables_compare::asm_sqr ← (byte[512]) asm_mul_sqr1_lo - (byte*) mul_tables_compare::kc_sqr ← (byte[512]) mul_sqr1_lo - to:mul_tables_compare::@1 -mul_tables_compare::@1: scope:[mul_tables_compare] from mul_tables_compare mul_tables_compare::@2 - (boolean~) mul_tables_compare::$0 ← *((byte*) mul_tables_compare::kc_sqr) != *((byte*) mul_tables_compare::asm_sqr) - (boolean~) mul_tables_compare::$1 ← ! (boolean~) mul_tables_compare::$0 - if((boolean~) mul_tables_compare::$1) goto mul_tables_compare::@2 - to:mul_tables_compare::@3 -mul_tables_compare::@2: scope:[mul_tables_compare] from mul_tables_compare::@1 mul_tables_compare::@4 - (byte*) mul_tables_compare::asm_sqr ← ++ (byte*) mul_tables_compare::asm_sqr - (byte*) mul_tables_compare::kc_sqr ← ++ (byte*) mul_tables_compare::kc_sqr - (word/signed word~) mul_tables_compare::$8 ← (word/signed word) 512 * (byte/signed byte/word/signed word) 4 - (byte*~) mul_tables_compare::$9 ← (byte[512]) mul_sqr1_lo + (word/signed word~) mul_tables_compare::$8 - (boolean~) mul_tables_compare::$10 ← (byte*) mul_tables_compare::kc_sqr < (byte*~) mul_tables_compare::$9 - if((boolean~) mul_tables_compare::$10) goto mul_tables_compare::@1 - to:mul_tables_compare::@5 -mul_tables_compare::@3: scope:[mul_tables_compare] from mul_tables_compare::@1 - *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 - (void~) mul_tables_compare::$2 ← call print_str (string) "multiply table mismatch at @" - (word~) mul_tables_compare::$3 ← ((word)) (byte*) mul_tables_compare::asm_sqr - (void~) mul_tables_compare::$4 ← call print_word (word~) mul_tables_compare::$3 - (void~) mul_tables_compare::$5 ← call print_str (string) " / @" - (word~) mul_tables_compare::$6 ← ((word)) (byte*) mul_tables_compare::kc_sqr - (void~) mul_tables_compare::$7 ← call print_word (word~) mul_tables_compare::$6 - to:mul_tables_compare::@return -mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare::@3 mul_tables_compare::@5 - return - to:@return -mul_tables_compare::@4: scope:[mul_tables_compare] from - to:mul_tables_compare::@2 -mul_tables_compare::@5: scope:[mul_tables_compare] from mul_tables_compare::@2 - (void~) mul_tables_compare::$11 ← call print_str (string) "multiply tables match!@" - (void~) mul_tables_compare::$12 ← call print_ln - to:mul_tables_compare::@return -@12: scope:[] from @11 - to:@13 -mul_results_compare: scope:[mul_results_compare] from - (byte) mul_results_compare::a ← (byte/signed byte/word/signed word) 0 - to:mul_results_compare::@1 -mul_results_compare::@1: scope:[mul_results_compare] from mul_results_compare mul_results_compare::@6 - (byte) mul_results_compare::b ← (byte/signed byte/word/signed word) 0 - to:mul_results_compare::@2 -mul_results_compare::@2: scope:[mul_results_compare] from mul_results_compare::@1 mul_results_compare::@3 - (word~) mul_results_compare::$0 ← call slow_multiply (byte) mul_results_compare::a (byte) mul_results_compare::b - (word) mul_results_compare::ms ← (word~) mul_results_compare::$0 - (word~) mul_results_compare::$1 ← call asm_multiply (byte) mul_results_compare::a (byte) mul_results_compare::b - (word) mul_results_compare::ma ← (word~) mul_results_compare::$1 - (boolean~) mul_results_compare::$2 ← (word) mul_results_compare::ms != (word) mul_results_compare::ma - (boolean~) mul_results_compare::$3 ← ! (boolean~) mul_results_compare::$2 - if((boolean~) mul_results_compare::$3) goto mul_results_compare::@3 - to:mul_results_compare::@4 -mul_results_compare::@3: scope:[mul_results_compare] from mul_results_compare::@2 mul_results_compare::@5 - (byte) mul_results_compare::b ← ++ (byte) mul_results_compare::b - (boolean~) mul_results_compare::$8 ← (byte) mul_results_compare::b != (byte/signed byte/word/signed word) 0 - if((boolean~) mul_results_compare::$8) goto mul_results_compare::@2 - to:mul_results_compare::@6 -mul_results_compare::@4: scope:[mul_results_compare] from mul_results_compare::@2 - *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 - (void~) mul_results_compare::$4 ← call print_str (string) "multiply mismatch slow:@" - (void~) mul_results_compare::$5 ← call print_word (word) mul_results_compare::ms - (void~) mul_results_compare::$6 ← call print_str (string) " / fast asm:" - (void~) mul_results_compare::$7 ← call print_word (word) mul_results_compare::ma - to:mul_results_compare::@return -mul_results_compare::@return: scope:[mul_results_compare] from mul_results_compare::@4 mul_results_compare::@7 - return - to:@return -mul_results_compare::@5: scope:[mul_results_compare] from - to:mul_results_compare::@3 -mul_results_compare::@6: scope:[mul_results_compare] from mul_results_compare::@3 - (byte) mul_results_compare::a ← ++ (byte) mul_results_compare::a - (boolean~) mul_results_compare::$9 ← (byte) mul_results_compare::a != (byte/signed byte/word/signed word) 0 - if((boolean~) mul_results_compare::$9) goto mul_results_compare::@1 - to:mul_results_compare::@7 -mul_results_compare::@7: scope:[mul_results_compare] from mul_results_compare::@6 - (void~) mul_results_compare::$10 ← call print_str (string) "multiply results match!@" - (void~) mul_results_compare::$11 ← call print_ln - to:mul_results_compare::@return -@13: scope:[] from @12 - call main - to:@end -@end: scope:[] from @13 - -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 - keeping the call (void~) main::$0 -Eliminating unused variable - keeping the call (void~) main::$1 -Eliminating unused variable - keeping the call (void~) main::$2 -Eliminating unused variable - keeping the call (void~) main::$3 -Eliminating unused variable - keeping the call (void~) main::$4 -Eliminating unused variable - keeping the call (void~) mul_tables_compare::$2 -Eliminating unused variable - keeping the call (void~) mul_tables_compare::$4 -Eliminating unused variable - keeping the call (void~) mul_tables_compare::$5 -Eliminating unused variable - keeping the call (void~) mul_tables_compare::$7 -Eliminating unused variable - keeping the call (void~) mul_tables_compare::$11 -Eliminating unused variable - keeping the call (void~) mul_tables_compare::$12 -Eliminating unused variable - keeping the call (void~) mul_results_compare::$4 -Eliminating unused variable - keeping the call (void~) mul_results_compare::$5 -Eliminating unused variable - keeping the call (void~) mul_results_compare::$6 -Eliminating unused variable - keeping the call (void~) mul_results_compare::$7 -Eliminating unused variable - keeping the call (void~) mul_results_compare::$10 -Eliminating unused variable - keeping the call (void~) mul_results_compare::$11 -Creating constant string variable for inline (const string) mul_tables_compare::str "multiply table mismatch at @" -Creating constant string variable for inline (const string) mul_tables_compare::str1 " / @" -Creating constant string variable for inline (const string) mul_tables_compare::str2 "multiply tables match!@" -Creating constant string variable for inline (const string) mul_results_compare::str "multiply mismatch slow:@" -Creating constant string variable for inline (const string) mul_results_compare::str1 " / fast asm:" -Creating constant string variable for inline (const string) mul_results_compare::str2 "multiply results match!@" -Removing empty block print_str::@4 -Removing empty block print_str::@3 -Removing empty block print_str::@5 -Removing empty block print_str::@6 -Removing empty block @1 -Removing empty block @2 -Removing empty block @3 -Removing empty block @4 -Removing empty block @5 -Removing empty block print_cls::@2 -Removing empty block @7 -Removing empty block slow_multiply::@4 -Removing empty block slow_multiply::@5 -Removing empty block @10 -Removing empty block asm_multiply::@1 -Removing empty block @11 -Removing empty block mul_tables_compare::@4 -Removing empty block @12 -Removing empty block mul_results_compare::@5 -PROCEDURE MODIFY VARIABLE ANALYSIS -print_str modifies char_cursor -print_ln modifies line_cursor -print_ln modifies char_cursor -print_word modifies char_cursor -print_byte modifies char_cursor -print_char modifies char_cursor -main modifies char_cursor -main modifies line_cursor -mul_tables_compare modifies char_cursor -mul_tables_compare modifies line_cursor -mul_results_compare modifies char_cursor -mul_results_compare modifies line_cursor - -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... - -CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN -@begin: scope:[] from - (byte*) line_cursor#0 ← ((byte*)) (word/signed word) 1024 - (byte*) char_cursor#0 ← (byte*) line_cursor#0 - to:@6 -print_str: scope:[print_str] from mul_results_compare::@11 mul_results_compare::@4 mul_results_compare::@7 mul_tables_compare::@3 mul_tables_compare::@5 mul_tables_compare::@7 - (byte*) char_cursor#71 ← phi( mul_results_compare::@11/(byte*) char_cursor#24 mul_results_compare::@4/(byte*) char_cursor#68 mul_results_compare::@7/(byte*) char_cursor#69 mul_tables_compare::@3/(byte*) char_cursor#66 mul_tables_compare::@5/(byte*) char_cursor#67 mul_tables_compare::@7/(byte*) char_cursor#17 ) - (byte*) print_str::str#9 ← phi( mul_results_compare::@11/(byte*) print_str::str#5 mul_results_compare::@4/(byte*) print_str::str#4 mul_results_compare::@7/(byte*) print_str::str#6 mul_tables_compare::@3/(byte*) print_str::str#1 mul_tables_compare::@5/(byte*) print_str::str#3 mul_tables_compare::@7/(byte*) print_str::str#2 ) - to:print_str::@1 -print_str::@1: scope:[print_str] from print_str print_str::@2 - (byte*) char_cursor#61 ← phi( print_str/(byte*) char_cursor#71 print_str::@2/(byte*) char_cursor#1 ) - (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 ) - (boolean~) print_str::$0 ← *((byte*) print_str::str#7) != (byte) '@' - if((boolean~) print_str::$0) goto print_str::@2 - to:print_str::@return -print_str::@2: scope:[print_str] from print_str::@1 - (byte*) char_cursor#31 ← phi( print_str::@1/(byte*) char_cursor#61 ) - (byte*) print_str::str#8 ← phi( print_str::@1/(byte*) print_str::str#7 ) - *((byte*) char_cursor#31) ← *((byte*) print_str::str#8) - (byte*) char_cursor#1 ← ++ (byte*) char_cursor#31 - (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 - to:print_str::@1 -print_str::@return: scope:[print_str] from print_str::@1 - (byte*) char_cursor#32 ← phi( print_str::@1/(byte*) char_cursor#61 ) - (byte*) char_cursor#2 ← (byte*) char_cursor#32 - return - to:@return -print_ln: scope:[print_ln] from mul_results_compare::@14 mul_tables_compare::@10 - (byte*) char_cursor#62 ← phi( mul_results_compare::@14/(byte*) char_cursor#28 mul_tables_compare::@10/(byte*) char_cursor#21 ) - (byte*) line_cursor#22 ← phi( mul_results_compare::@14/(byte*) line_cursor#27 mul_tables_compare::@10/(byte*) line_cursor#25 ) - to:print_ln::@1 -print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - (byte*) char_cursor#33 ← phi( print_ln/(byte*) char_cursor#62 print_ln::@1/(byte*) char_cursor#33 ) - (byte*) line_cursor#11 ← phi( print_ln/(byte*) line_cursor#22 print_ln::@1/(byte*) line_cursor#1 ) - (byte*~) print_ln::$0 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 - (byte*) line_cursor#1 ← (byte*~) print_ln::$0 - (boolean~) print_ln::$1 ← (byte*) line_cursor#1 < (byte*) char_cursor#33 - if((boolean~) print_ln::$1) goto print_ln::@1 - to:print_ln::@2 -print_ln::@2: scope:[print_ln] from print_ln::@1 - (byte*) line_cursor#12 ← phi( print_ln::@1/(byte*) line_cursor#1 ) - (byte*) char_cursor#3 ← (byte*) line_cursor#12 - to:print_ln::@return -print_ln::@return: scope:[print_ln] from print_ln::@2 - (byte*) char_cursor#34 ← phi( print_ln::@2/(byte*) char_cursor#3 ) - (byte*) line_cursor#13 ← phi( print_ln::@2/(byte*) line_cursor#12 ) - (byte*) line_cursor#2 ← (byte*) line_cursor#13 - (byte*) char_cursor#4 ← (byte*) char_cursor#34 - return - to:@return -print_word: scope:[print_word] from mul_results_compare::@10 mul_results_compare::@12 mul_tables_compare::@6 mul_tables_compare::@8 - (byte*) char_cursor#63 ← phi( mul_results_compare::@10/(byte*) char_cursor#23 mul_results_compare::@12/(byte*) char_cursor#25 mul_tables_compare::@6/(byte*) char_cursor#16 mul_tables_compare::@8/(byte*) char_cursor#18 ) - (word) print_word::w#4 ← phi( mul_results_compare::@10/(word) print_word::w#2 mul_results_compare::@12/(word) print_word::w#3 mul_tables_compare::@6/(word) print_word::w#0 mul_tables_compare::@8/(word) print_word::w#1 ) - (byte~) print_word::$0 ← > (word) print_word::w#4 - (byte) print_byte::b#0 ← (byte~) print_word::$0 - call print_byte param-assignment - to:print_word::@1 -print_word::@1: scope:[print_word] from print_word - (word) print_word::w#5 ← phi( print_word/(word) print_word::w#4 ) - (byte*) char_cursor#35 ← phi( print_word/(byte*) char_cursor#10 ) - (byte*) char_cursor#5 ← (byte*) char_cursor#35 - (byte~) print_word::$2 ← < (word) print_word::w#5 - (byte) print_byte::b#1 ← (byte~) print_word::$2 - call print_byte param-assignment - to:print_word::@2 -print_word::@2: scope:[print_word] from print_word::@1 - (byte*) char_cursor#36 ← phi( print_word::@1/(byte*) char_cursor#10 ) - (byte*) char_cursor#6 ← (byte*) char_cursor#36 - to:print_word::@return -print_word::@return: scope:[print_word] from print_word::@2 - (byte*) char_cursor#37 ← phi( print_word::@2/(byte*) char_cursor#6 ) - (byte*) char_cursor#7 ← (byte*) char_cursor#37 - return - to:@return -print_byte: scope:[print_byte] from print_word print_word::@1 - (byte*) char_cursor#64 ← phi( print_word/(byte*) char_cursor#63 print_word::@1/(byte*) char_cursor#5 ) - (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) - (byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } - (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 - (byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) - call print_char param-assignment - to:print_byte::@1 -print_byte::@1: scope:[print_byte] from print_byte - (byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 ) - (byte*) char_cursor#38 ← phi( print_byte/(byte*) char_cursor#12 ) - (byte*) char_cursor#8 ← (byte*) char_cursor#38 - (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word) 15 - (byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) - call print_char param-assignment - to:print_byte::@2 -print_byte::@2: scope:[print_byte] from print_byte::@1 - (byte*) char_cursor#39 ← phi( print_byte::@1/(byte*) char_cursor#12 ) - (byte*) char_cursor#9 ← (byte*) char_cursor#39 - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@2 - (byte*) char_cursor#40 ← phi( print_byte::@2/(byte*) char_cursor#9 ) - (byte*) char_cursor#10 ← (byte*) char_cursor#40 - return - to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 - (byte*) char_cursor#41 ← phi( print_byte/(byte*) char_cursor#64 print_byte::@1/(byte*) char_cursor#8 ) - (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) - *((byte*) char_cursor#41) ← (byte) print_char::ch#2 - (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - (byte*) char_cursor#42 ← phi( print_char/(byte*) char_cursor#11 ) - (byte*) char_cursor#12 ← (byte*) char_cursor#42 - return - to:@return -print_cls: scope:[print_cls] from main - (byte*) print_cls::sc#0 ← ((byte*)) (word/signed word) 1024 - to:print_cls::@1 -print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 ) - *((byte*) print_cls::sc#2) ← (byte) ' ' - (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 - (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 - (boolean~) print_cls::$1 ← (byte*) print_cls::sc#1 != (word/signed word~) print_cls::$0 - if((boolean~) print_cls::$1) goto print_cls::@1 - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@1 - return - to:@return -@6: scope:[] from @begin - (byte*) line_cursor#42 ← phi( @begin/(byte*) line_cursor#0 ) - (byte*) char_cursor#84 ← phi( @begin/(byte*) char_cursor#0 ) - (byte*) BGCOL#0 ← ((byte*)) (word) 53281 - to:@8 -main: scope:[main] from @13 - (byte*) line_cursor#41 ← phi( @13/(byte*) line_cursor#28 ) - (byte*) char_cursor#83 ← phi( @13/(byte*) char_cursor#70 ) - (byte*) BGCOL#1 ← phi( @13/(byte*) BGCOL#4 ) - *((byte*) BGCOL#1) ← (byte/signed byte/word/signed word) 5 - call print_cls param-assignment - to:main::@1 -main::@1: scope:[main] from main - (byte*) BGCOL#17 ← phi( main/(byte*) BGCOL#1 ) - (byte*) line_cursor#35 ← phi( main/(byte*) line_cursor#41 ) - (byte*) char_cursor#78 ← phi( main/(byte*) char_cursor#83 ) - call init_mul_tables param-assignment - to:main::@2 -main::@2: scope:[main] from main::@1 - (byte*) BGCOL#14 ← phi( main::@1/(byte*) BGCOL#17 ) - (byte*) line_cursor#29 ← phi( main::@1/(byte*) line_cursor#35 ) - (byte*) char_cursor#72 ← phi( main::@1/(byte*) char_cursor#78 ) - call init_mul_tables_asm param-assignment - to:main::@3 -main::@3: scope:[main] from main::@2 - (byte*) BGCOL#12 ← phi( main::@2/(byte*) BGCOL#14 ) - (byte*) line_cursor#23 ← phi( main::@2/(byte*) line_cursor#29 ) - (byte*) char_cursor#65 ← phi( main::@2/(byte*) char_cursor#72 ) - call mul_tables_compare param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - (byte*) BGCOL#20 ← phi( main::@3/(byte*) BGCOL#12 ) - (byte*) line_cursor#14 ← phi( main::@3/(byte*) line_cursor#6 ) - (byte*) char_cursor#43 ← phi( main::@3/(byte*) char_cursor#20 ) - (byte*) char_cursor#13 ← (byte*) char_cursor#43 - (byte*) line_cursor#3 ← (byte*) line_cursor#14 - call mul_results_compare param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - (byte*) line_cursor#15 ← phi( main::@4/(byte*) line_cursor#8 ) - (byte*) char_cursor#44 ← phi( main::@4/(byte*) char_cursor#27 ) - (byte*) char_cursor#14 ← (byte*) char_cursor#44 - (byte*) line_cursor#4 ← (byte*) line_cursor#15 - to:main::@return -main::@return: scope:[main] from main::@5 - (byte*) line_cursor#16 ← phi( main::@5/(byte*) line_cursor#4 ) - (byte*) char_cursor#45 ← phi( main::@5/(byte*) char_cursor#14 ) - (byte*) char_cursor#15 ← (byte*) char_cursor#45 - (byte*) line_cursor#5 ← (byte*) line_cursor#16 - return - to:@return -slow_multiply: scope:[slow_multiply] from mul_results_compare::@2 - (byte) slow_multiply::b#3 ← phi( mul_results_compare::@2/(byte) slow_multiply::b#0 ) - (byte) slow_multiply::a#1 ← phi( mul_results_compare::@2/(byte) slow_multiply::a#0 ) - (word) slow_multiply::m#0 ← (byte/signed byte/word/signed word) 0 - (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a#1 > (byte/signed byte/word/signed word) 0 - (boolean~) slow_multiply::$1 ← ! (boolean~) slow_multiply::$0 - if((boolean~) slow_multiply::$1) goto slow_multiply::@1 - to:slow_multiply::@3 -slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@2 - (word) slow_multiply::m#2 ← phi( slow_multiply/(word) slow_multiply::m#0 slow_multiply::@2/(word) slow_multiply::m#1 ) - (word) slow_multiply::return#0 ← (word) slow_multiply::m#2 - to:slow_multiply::@return -slow_multiply::@3: scope:[slow_multiply] from slow_multiply - (byte) slow_multiply::a#3 ← phi( slow_multiply/(byte) slow_multiply::a#1 ) - (byte) slow_multiply::b#2 ← phi( slow_multiply/(byte) slow_multiply::b#3 ) - (word) slow_multiply::m#4 ← phi( slow_multiply/(word) slow_multiply::m#0 ) - (byte) slow_multiply::i#0 ← (byte/signed byte/word/signed word) 0 - to:slow_multiply::@2 -slow_multiply::@2: scope:[slow_multiply] from slow_multiply::@2 slow_multiply::@3 - (byte) slow_multiply::a#2 ← phi( slow_multiply::@2/(byte) slow_multiply::a#2 slow_multiply::@3/(byte) slow_multiply::a#3 ) - (byte) slow_multiply::i#2 ← phi( slow_multiply::@2/(byte) slow_multiply::i#1 slow_multiply::@3/(byte) slow_multiply::i#0 ) - (byte) slow_multiply::b#1 ← phi( slow_multiply::@2/(byte) slow_multiply::b#1 slow_multiply::@3/(byte) slow_multiply::b#2 ) - (word) slow_multiply::m#3 ← phi( slow_multiply::@2/(word) slow_multiply::m#1 slow_multiply::@3/(word) slow_multiply::m#4 ) - (word~) slow_multiply::$2 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#1 - (word) slow_multiply::m#1 ← (word~) slow_multiply::$2 - (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 - (boolean~) slow_multiply::$3 ← (byte) slow_multiply::i#1 != (byte) slow_multiply::a#2 - if((boolean~) slow_multiply::$3) goto slow_multiply::@2 - to:slow_multiply::@1 -slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 - (word) slow_multiply::return#3 ← phi( slow_multiply::@1/(word) slow_multiply::return#0 ) - (word) slow_multiply::return#1 ← (word) slow_multiply::return#3 - return - to:@return -@8: scope:[] from @6 - (byte*) line_cursor#36 ← phi( @6/(byte*) line_cursor#42 ) - (byte*) char_cursor#79 ← phi( @6/(byte*) char_cursor#84 ) - (byte*) BGCOL#11 ← phi( @6/(byte*) BGCOL#0 ) - (byte[512]) mul_sqr1_lo#0 ← { fill( 512, 0) } - (byte[512]) mul_sqr1_hi#0 ← { fill( 512, 0) } - (byte[512]) mul_sqr2_lo#0 ← { fill( 512, 0) } - (byte[512]) mul_sqr2_hi#0 ← { fill( 512, 0) } - to:@9 -init_mul_tables: scope:[init_mul_tables] from main::@1 - (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 - (byte) init_mul_tables::x_2#0 ← (byte/signed byte/word/signed word) 0 - (byte) init_mul_tables::c#0 ← (byte/signed byte/word/signed word) 0 - (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr1_hi#0 + (byte/signed byte/word/signed word) 1 - (byte*) init_mul_tables::sqr1_hi#0 ← (byte*~) init_mul_tables::$0 - (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr1_lo#0 + (byte/signed byte/word/signed word) 1 - (byte*) init_mul_tables::sqr1_lo#0 ← (byte*~) init_mul_tables::$1 - to:init_mul_tables::@1 -init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 - (byte) init_mul_tables::x_2#4 ← phi( init_mul_tables/(byte) init_mul_tables::x_2#0 init_mul_tables::@2/(byte) init_mul_tables::x_2#2 ) - (byte*) init_mul_tables::sqr1_hi#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr1_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr1_hi#1 ) - (byte*) init_mul_tables::sqr1_lo#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr1_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr1_lo#1 ) - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::c#2 ← phi( init_mul_tables/(byte) init_mul_tables::c#0 init_mul_tables::@2/(byte) init_mul_tables::c#3 ) - (byte) init_mul_tables::c#1 ← ++ (byte) init_mul_tables::c#2 - (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 - if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte) init_mul_tables::c#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::c#1 init_mul_tables::@5/(byte) init_mul_tables::c#4 ) - (byte) init_mul_tables::x_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 init_mul_tables::@5/(byte) init_mul_tables::x_2#1 ) - (byte*) init_mul_tables::sqr1_hi#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr1_hi#3 init_mul_tables::@5/(byte*) init_mul_tables::sqr1_hi#4 ) - (byte*) init_mul_tables::sqr1_lo#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr1_lo#3 init_mul_tables::@5/(byte*) init_mul_tables::sqr1_lo#4 ) - (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 - *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 - (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 - *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 - (byte*) init_mul_tables::sqr1_hi#1 ← ++ (byte*) init_mul_tables::sqr1_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$7 - (byte*) init_mul_tables::sqr1_lo#1 ← ++ (byte*) init_mul_tables::sqr1_lo#2 - (byte*~) init_mul_tables::$8 ← (byte[512]) mul_sqr1_lo#0 + (word/signed word) 512 - (boolean~) init_mul_tables::$9 ← (byte*) init_mul_tables::sqr1_lo#1 != (byte*~) init_mul_tables::$8 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (byte) init_mul_tables::c#4 ← phi( init_mul_tables::@1/(byte) init_mul_tables::c#1 ) - (byte*) init_mul_tables::sqr1_hi#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr1_hi#3 ) - (byte*) init_mul_tables::sqr1_lo#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr1_lo#3 ) - (word) init_mul_tables::sqr#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 ) - (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) - (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (signed byte/signed word~) init_mul_tables::$10 ← - (byte/signed byte/word/signed word) 1 - (byte~) init_mul_tables::$11 ← ((byte)) (signed byte/signed word~) init_mul_tables::$10 - (byte) init_mul_tables::x_255#0 ← (byte~) init_mul_tables::$11 - (byte) init_mul_tables::dir#0 ← (byte/word/signed word) 255 - (byte*) init_mul_tables::sqr2_hi#0 ← (byte[512]) mul_sqr2_hi#0 - (byte*) init_mul_tables::sqr2_lo#0 ← (byte[512]) mul_sqr2_lo#0 - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (byte) init_mul_tables::dir#2 ← phi( init_mul_tables::@4/(byte) init_mul_tables::dir#3 init_mul_tables::@6/(byte) init_mul_tables::dir#0 ) - (byte*) init_mul_tables::sqr2_hi#2 ← phi( init_mul_tables::@4/(byte*) init_mul_tables::sqr2_hi#3 init_mul_tables::@6/(byte*) init_mul_tables::sqr2_hi#0 ) - (byte*) init_mul_tables::sqr2_lo#2 ← phi( init_mul_tables::@4/(byte*) init_mul_tables::sqr2_lo#1 init_mul_tables::@6/(byte*) init_mul_tables::sqr2_lo#0 ) - (byte) init_mul_tables::x_255#2 ← phi( init_mul_tables::@4/(byte) init_mul_tables::x_255#3 init_mul_tables::@6/(byte) init_mul_tables::x_255#0 ) - *((byte*) init_mul_tables::sqr2_lo#2) ← *((byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) - *((byte*) init_mul_tables::sqr2_hi#2) ← *((byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) - (byte*) init_mul_tables::sqr2_hi#1 ← ++ (byte*) init_mul_tables::sqr2_hi#2 - (byte/word~) init_mul_tables::$12 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 - (byte) init_mul_tables::x_255#1 ← (byte/word~) init_mul_tables::$12 - (boolean~) init_mul_tables::$13 ← (byte) init_mul_tables::x_255#1 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$14 ← ! (boolean~) init_mul_tables::$13 - if((boolean~) init_mul_tables::$14) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte) init_mul_tables::dir#3 ← phi( init_mul_tables::@3/(byte) init_mul_tables::dir#2 init_mul_tables::@7/(byte) init_mul_tables::dir#1 ) - (byte*) init_mul_tables::sqr2_hi#3 ← phi( init_mul_tables::@3/(byte*) init_mul_tables::sqr2_hi#1 init_mul_tables::@7/(byte*) init_mul_tables::sqr2_hi#4 ) - (byte) init_mul_tables::x_255#3 ← phi( init_mul_tables::@3/(byte) init_mul_tables::x_255#1 init_mul_tables::@7/(byte) init_mul_tables::x_255#4 ) - (byte*) init_mul_tables::sqr2_lo#3 ← phi( init_mul_tables::@3/(byte*) init_mul_tables::sqr2_lo#2 init_mul_tables::@7/(byte*) init_mul_tables::sqr2_lo#4 ) - (byte*) init_mul_tables::sqr2_lo#1 ← ++ (byte*) init_mul_tables::sqr2_lo#3 - (byte*~) init_mul_tables::$15 ← (byte[512]) mul_sqr2_lo#0 + (word/signed word) 511 - (boolean~) init_mul_tables::$16 ← (byte*) init_mul_tables::sqr2_lo#1 != (byte*~) init_mul_tables::$15 - if((boolean~) init_mul_tables::$16) goto init_mul_tables::@3 - to:init_mul_tables::@8 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (byte*) init_mul_tables::sqr2_hi#4 ← phi( init_mul_tables::@3/(byte*) init_mul_tables::sqr2_hi#1 ) - (byte) init_mul_tables::x_255#4 ← phi( init_mul_tables::@3/(byte) init_mul_tables::x_255#1 ) - (byte*) init_mul_tables::sqr2_lo#4 ← phi( init_mul_tables::@3/(byte*) init_mul_tables::sqr2_lo#2 ) - (byte) init_mul_tables::dir#1 ← (byte/signed byte/word/signed word) 1 - to:init_mul_tables::@4 -init_mul_tables::@8: scope:[init_mul_tables] from init_mul_tables::@4 - (byte*~) init_mul_tables::$17 ← (byte[512]) mul_sqr2_lo#0 + (word/signed word) 511 - (byte*~) init_mul_tables::$18 ← (byte[512]) mul_sqr1_lo#0 + (word/signed word) 256 - *((byte*~) init_mul_tables::$17) ← *((byte*~) init_mul_tables::$18) - (byte*~) init_mul_tables::$19 ← (byte[512]) mul_sqr2_hi#0 + (word/signed word) 511 - (byte*~) init_mul_tables::$20 ← (byte[512]) mul_sqr1_hi#0 + (word/signed word) 256 - *((byte*~) init_mul_tables::$19) ← *((byte*~) init_mul_tables::$20) - to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@8 - return - to:@return -@9: scope:[] from @8 - (byte*) line_cursor#34 ← phi( @8/(byte*) line_cursor#36 ) - (byte*) char_cursor#77 ← phi( @8/(byte*) char_cursor#79 ) - (byte*) BGCOL#10 ← phi( @8/(byte*) BGCOL#11 ) - (byte[512]) asm_mul_sqr1_lo#0 ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr1_hi#0 ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr2_lo#0 ← { fill( 512, 0) } - (byte[512]) asm_mul_sqr2_hi#0 ← { fill( 512, 0) } - to:@13 -init_mul_tables_asm: scope:[init_mul_tables_asm] from main::@2 - asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - (byte*) init_mul_tables_asm::mem#0 ← ((byte*)) (byte/word/signed word) 255 - *((byte*) init_mul_tables_asm::mem#0) ← *((byte[512]) asm_mul_sqr1_lo#0) - *((byte*) init_mul_tables_asm::mem#0) ← *((byte[512]) asm_mul_sqr1_hi#0) - *((byte*) init_mul_tables_asm::mem#0) ← *((byte[512]) asm_mul_sqr2_lo#0) - *((byte*) init_mul_tables_asm::mem#0) ← *((byte[512]) asm_mul_sqr2_hi#0) - to:init_mul_tables_asm::@return -init_mul_tables_asm::@return: scope:[init_mul_tables_asm] from init_mul_tables_asm - return - to:@return -asm_multiply: scope:[asm_multiply] from mul_results_compare::@8 - (byte) asm_multiply::b#1 ← phi( mul_results_compare::@8/(byte) asm_multiply::b#0 ) - (byte) asm_multiply::a#1 ← phi( mul_results_compare::@8/(byte) asm_multiply::a#0 ) - (byte*) asm_multiply::memA#0 ← ((byte*)) (byte/word/signed word) 254 - (byte*) asm_multiply::memB#0 ← ((byte*)) (byte/word/signed word) 255 - *((byte*) asm_multiply::memA#0) ← (byte) asm_multiply::a#1 - *((byte*) asm_multiply::memB#0) ← (byte) asm_multiply::b#1 - asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - (word) asm_multiply::return#0 ← { *((byte*) asm_multiply::memB#0), *((byte*) asm_multiply::memA#0) } - to:asm_multiply::@return -asm_multiply::@return: scope:[asm_multiply] from asm_multiply - (word) asm_multiply::return#3 ← phi( asm_multiply/(word) asm_multiply::return#0 ) - (word) asm_multiply::return#1 ← (word) asm_multiply::return#3 - return - to:@return -mul_tables_compare: scope:[mul_tables_compare] from main::@3 - (byte*) line_cursor#47 ← phi( main::@3/(byte*) line_cursor#23 ) - (byte*) char_cursor#80 ← phi( main::@3/(byte*) char_cursor#65 ) - (byte*) BGCOL#7 ← phi( main::@3/(byte*) BGCOL#12 ) - (byte*) mul_tables_compare::asm_sqr#0 ← (byte[512]) asm_mul_sqr1_lo#0 - (byte*) mul_tables_compare::kc_sqr#0 ← (byte[512]) mul_sqr1_lo#0 - to:mul_tables_compare::@1 -mul_tables_compare::@1: scope:[mul_tables_compare] from mul_tables_compare mul_tables_compare::@2 - (byte*) line_cursor#43 ← phi( mul_tables_compare/(byte*) line_cursor#47 mul_tables_compare::@2/(byte*) line_cursor#38 ) - (byte*) char_cursor#73 ← phi( mul_tables_compare/(byte*) char_cursor#80 mul_tables_compare::@2/(byte*) char_cursor#74 ) - (byte*) BGCOL#5 ← phi( mul_tables_compare/(byte*) BGCOL#7 mul_tables_compare::@2/(byte*) BGCOL#8 ) - (byte*) mul_tables_compare::asm_sqr#2 ← phi( mul_tables_compare/(byte*) mul_tables_compare::asm_sqr#0 mul_tables_compare::@2/(byte*) mul_tables_compare::asm_sqr#1 ) - (byte*) mul_tables_compare::kc_sqr#2 ← phi( mul_tables_compare/(byte*) mul_tables_compare::kc_sqr#0 mul_tables_compare::@2/(byte*) mul_tables_compare::kc_sqr#1 ) - (boolean~) mul_tables_compare::$0 ← *((byte*) mul_tables_compare::kc_sqr#2) != *((byte*) mul_tables_compare::asm_sqr#2) - (boolean~) mul_tables_compare::$1 ← ! (boolean~) mul_tables_compare::$0 - if((boolean~) mul_tables_compare::$1) goto mul_tables_compare::@2 - to:mul_tables_compare::@3 -mul_tables_compare::@2: scope:[mul_tables_compare] from mul_tables_compare::@1 - (byte*) line_cursor#38 ← phi( mul_tables_compare::@1/(byte*) line_cursor#43 ) - (byte*) char_cursor#74 ← phi( mul_tables_compare::@1/(byte*) char_cursor#73 ) - (byte*) BGCOL#8 ← phi( mul_tables_compare::@1/(byte*) BGCOL#5 ) - (byte*) mul_tables_compare::kc_sqr#3 ← phi( mul_tables_compare::@1/(byte*) mul_tables_compare::kc_sqr#2 ) - (byte*) mul_tables_compare::asm_sqr#3 ← phi( mul_tables_compare::@1/(byte*) mul_tables_compare::asm_sqr#2 ) - (byte*) mul_tables_compare::asm_sqr#1 ← ++ (byte*) mul_tables_compare::asm_sqr#3 - (byte*) mul_tables_compare::kc_sqr#1 ← ++ (byte*) mul_tables_compare::kc_sqr#3 - (word/signed word~) mul_tables_compare::$8 ← (word/signed word) 512 * (byte/signed byte/word/signed word) 4 - (byte*~) mul_tables_compare::$9 ← (byte[512]) mul_sqr1_lo#0 + (word/signed word~) mul_tables_compare::$8 - (boolean~) mul_tables_compare::$10 ← (byte*) mul_tables_compare::kc_sqr#1 < (byte*~) mul_tables_compare::$9 - if((boolean~) mul_tables_compare::$10) goto mul_tables_compare::@1 - to:mul_tables_compare::@5 -mul_tables_compare::@3: scope:[mul_tables_compare] from mul_tables_compare::@1 - (byte*) line_cursor#48 ← phi( mul_tables_compare::@1/(byte*) line_cursor#43 ) - (byte*) mul_tables_compare::kc_sqr#7 ← phi( mul_tables_compare::@1/(byte*) mul_tables_compare::kc_sqr#2 ) - (byte*) mul_tables_compare::asm_sqr#5 ← phi( mul_tables_compare::@1/(byte*) mul_tables_compare::asm_sqr#2 ) - (byte*) char_cursor#66 ← phi( mul_tables_compare::@1/(byte*) char_cursor#73 ) - (byte*) BGCOL#2 ← phi( mul_tables_compare::@1/(byte*) BGCOL#5 ) - *((byte*) BGCOL#2) ← (byte/signed byte/word/signed word) 2 - (byte*) print_str::str#1 ← (const string) mul_tables_compare::str - call print_str param-assignment - to:mul_tables_compare::@6 -mul_tables_compare::@6: scope:[mul_tables_compare] from mul_tables_compare::@3 - (byte*) line_cursor#44 ← phi( mul_tables_compare::@3/(byte*) line_cursor#48 ) - (byte*) mul_tables_compare::kc_sqr#6 ← phi( mul_tables_compare::@3/(byte*) mul_tables_compare::kc_sqr#7 ) - (byte*) mul_tables_compare::asm_sqr#4 ← phi( mul_tables_compare::@3/(byte*) mul_tables_compare::asm_sqr#5 ) - (byte*) char_cursor#46 ← phi( mul_tables_compare::@3/(byte*) char_cursor#2 ) - (byte*) char_cursor#16 ← (byte*) char_cursor#46 - (word~) mul_tables_compare::$3 ← ((word)) (byte*) mul_tables_compare::asm_sqr#4 - (word) print_word::w#0 ← (word~) mul_tables_compare::$3 - call print_word param-assignment - to:mul_tables_compare::@7 -mul_tables_compare::@7: scope:[mul_tables_compare] from mul_tables_compare::@6 - (byte*) line_cursor#37 ← phi( mul_tables_compare::@6/(byte*) line_cursor#44 ) - (byte*) mul_tables_compare::kc_sqr#5 ← phi( mul_tables_compare::@6/(byte*) mul_tables_compare::kc_sqr#6 ) - (byte*) char_cursor#47 ← phi( mul_tables_compare::@6/(byte*) char_cursor#7 ) - (byte*) char_cursor#17 ← (byte*) char_cursor#47 - (byte*) print_str::str#2 ← (const string) mul_tables_compare::str1 - call print_str param-assignment - to:mul_tables_compare::@8 -mul_tables_compare::@8: scope:[mul_tables_compare] from mul_tables_compare::@7 - (byte*) line_cursor#30 ← phi( mul_tables_compare::@7/(byte*) line_cursor#37 ) - (byte*) mul_tables_compare::kc_sqr#4 ← phi( mul_tables_compare::@7/(byte*) mul_tables_compare::kc_sqr#5 ) - (byte*) char_cursor#48 ← phi( mul_tables_compare::@7/(byte*) char_cursor#2 ) - (byte*) char_cursor#18 ← (byte*) char_cursor#48 - (word~) mul_tables_compare::$6 ← ((word)) (byte*) mul_tables_compare::kc_sqr#4 - (word) print_word::w#1 ← (word~) mul_tables_compare::$6 - call print_word param-assignment - to:mul_tables_compare::@9 -mul_tables_compare::@9: scope:[mul_tables_compare] from mul_tables_compare::@8 - (byte*) line_cursor#24 ← phi( mul_tables_compare::@8/(byte*) line_cursor#30 ) - (byte*) char_cursor#49 ← phi( mul_tables_compare::@8/(byte*) char_cursor#7 ) - (byte*) char_cursor#19 ← (byte*) char_cursor#49 - to:mul_tables_compare::@return -mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare::@11 mul_tables_compare::@9 - (byte*) line_cursor#17 ← phi( mul_tables_compare::@11/(byte*) line_cursor#7 mul_tables_compare::@9/(byte*) line_cursor#24 ) - (byte*) char_cursor#50 ← phi( mul_tables_compare::@11/(byte*) char_cursor#22 mul_tables_compare::@9/(byte*) char_cursor#19 ) - (byte*) char_cursor#20 ← (byte*) char_cursor#50 - (byte*) line_cursor#6 ← (byte*) line_cursor#17 - return - to:@return -mul_tables_compare::@5: scope:[mul_tables_compare] from mul_tables_compare::@2 - (byte*) line_cursor#31 ← phi( mul_tables_compare::@2/(byte*) line_cursor#38 ) - (byte*) char_cursor#67 ← phi( mul_tables_compare::@2/(byte*) char_cursor#74 ) - (byte*) print_str::str#3 ← (const string) mul_tables_compare::str2 - call print_str param-assignment - to:mul_tables_compare::@10 -mul_tables_compare::@10: scope:[mul_tables_compare] from mul_tables_compare::@5 - (byte*) line_cursor#25 ← phi( mul_tables_compare::@5/(byte*) line_cursor#31 ) - (byte*) char_cursor#51 ← phi( mul_tables_compare::@5/(byte*) char_cursor#2 ) - (byte*) char_cursor#21 ← (byte*) char_cursor#51 - call print_ln param-assignment - to:mul_tables_compare::@11 -mul_tables_compare::@11: scope:[mul_tables_compare] from mul_tables_compare::@10 - (byte*) char_cursor#52 ← phi( mul_tables_compare::@10/(byte*) char_cursor#4 ) - (byte*) line_cursor#18 ← phi( mul_tables_compare::@10/(byte*) line_cursor#2 ) - (byte*) line_cursor#7 ← (byte*) line_cursor#18 - (byte*) char_cursor#22 ← (byte*) char_cursor#52 - to:mul_tables_compare::@return -mul_results_compare: scope:[mul_results_compare] from main::@4 - (byte*) line_cursor#54 ← phi( main::@4/(byte*) line_cursor#3 ) - (byte*) char_cursor#87 ← phi( main::@4/(byte*) char_cursor#13 ) - (byte*) BGCOL#18 ← phi( main::@4/(byte*) BGCOL#20 ) - (byte) mul_results_compare::a#0 ← (byte/signed byte/word/signed word) 0 - to:mul_results_compare::@1 -mul_results_compare::@1: scope:[mul_results_compare] from mul_results_compare mul_results_compare::@6 - (byte*) line_cursor#53 ← phi( mul_results_compare/(byte*) line_cursor#54 mul_results_compare::@6/(byte*) line_cursor#40 ) - (byte*) char_cursor#86 ← phi( mul_results_compare/(byte*) char_cursor#87 mul_results_compare::@6/(byte*) char_cursor#76 ) - (byte*) BGCOL#15 ← phi( mul_results_compare/(byte*) BGCOL#18 mul_results_compare::@6/(byte*) BGCOL#19 ) - (byte) mul_results_compare::a#5 ← phi( mul_results_compare/(byte) mul_results_compare::a#0 mul_results_compare::@6/(byte) mul_results_compare::a#1 ) - (byte) mul_results_compare::b#0 ← (byte/signed byte/word/signed word) 0 - to:mul_results_compare::@2 -mul_results_compare::@2: scope:[mul_results_compare] from mul_results_compare::@1 mul_results_compare::@3 - (byte*) line_cursor#52 ← phi( mul_results_compare::@1/(byte*) line_cursor#53 mul_results_compare::@3/(byte*) line_cursor#46 ) - (byte*) char_cursor#85 ← phi( mul_results_compare::@1/(byte*) char_cursor#86 mul_results_compare::@3/(byte*) char_cursor#82 ) - (byte*) BGCOL#13 ← phi( mul_results_compare::@1/(byte*) BGCOL#15 mul_results_compare::@3/(byte*) BGCOL#16 ) - (byte) mul_results_compare::b#2 ← phi( mul_results_compare::@1/(byte) mul_results_compare::b#0 mul_results_compare::@3/(byte) mul_results_compare::b#1 ) - (byte) mul_results_compare::a#2 ← phi( mul_results_compare::@1/(byte) mul_results_compare::a#5 mul_results_compare::@3/(byte) mul_results_compare::a#6 ) - (byte) slow_multiply::a#0 ← (byte) mul_results_compare::a#2 - (byte) slow_multiply::b#0 ← (byte) mul_results_compare::b#2 - call slow_multiply param-assignment - (word) slow_multiply::return#2 ← (word) slow_multiply::return#1 - to:mul_results_compare::@8 -mul_results_compare::@8: scope:[mul_results_compare] from mul_results_compare::@2 - (byte*) line_cursor#51 ← phi( mul_results_compare::@2/(byte*) line_cursor#52 ) - (byte*) char_cursor#81 ← phi( mul_results_compare::@2/(byte*) char_cursor#85 ) - (byte*) BGCOL#9 ← phi( mul_results_compare::@2/(byte*) BGCOL#13 ) - (byte) mul_results_compare::b#3 ← phi( mul_results_compare::@2/(byte) mul_results_compare::b#2 ) - (byte) mul_results_compare::a#3 ← phi( mul_results_compare::@2/(byte) mul_results_compare::a#2 ) - (word) slow_multiply::return#4 ← phi( mul_results_compare::@2/(word) slow_multiply::return#2 ) - (word~) mul_results_compare::$0 ← (word) slow_multiply::return#4 - (word) mul_results_compare::ms#0 ← (word~) mul_results_compare::$0 - (byte) asm_multiply::a#0 ← (byte) mul_results_compare::a#3 - (byte) asm_multiply::b#0 ← (byte) mul_results_compare::b#3 - call asm_multiply param-assignment - (word) asm_multiply::return#2 ← (word) asm_multiply::return#1 - to:mul_results_compare::@9 -mul_results_compare::@9: scope:[mul_results_compare] from mul_results_compare::@8 - (byte*) line_cursor#49 ← phi( mul_results_compare::@8/(byte*) line_cursor#51 ) - (byte*) char_cursor#75 ← phi( mul_results_compare::@8/(byte*) char_cursor#81 ) - (byte) mul_results_compare::a#7 ← phi( mul_results_compare::@8/(byte) mul_results_compare::a#3 ) - (byte*) BGCOL#6 ← phi( mul_results_compare::@8/(byte*) BGCOL#9 ) - (byte) mul_results_compare::b#5 ← phi( mul_results_compare::@8/(byte) mul_results_compare::b#3 ) - (word) mul_results_compare::ms#1 ← phi( mul_results_compare::@8/(word) mul_results_compare::ms#0 ) - (word) asm_multiply::return#4 ← phi( mul_results_compare::@8/(word) asm_multiply::return#2 ) - (word~) mul_results_compare::$1 ← (word) asm_multiply::return#4 - (word) mul_results_compare::ma#0 ← (word~) mul_results_compare::$1 - (boolean~) mul_results_compare::$2 ← (word) mul_results_compare::ms#1 != (word) mul_results_compare::ma#0 - (boolean~) mul_results_compare::$3 ← ! (boolean~) mul_results_compare::$2 - if((boolean~) mul_results_compare::$3) goto mul_results_compare::@3 - to:mul_results_compare::@4 -mul_results_compare::@3: scope:[mul_results_compare] from mul_results_compare::@9 - (byte*) line_cursor#46 ← phi( mul_results_compare::@9/(byte*) line_cursor#49 ) - (byte*) BGCOL#16 ← phi( mul_results_compare::@9/(byte*) BGCOL#6 ) - (byte*) char_cursor#82 ← phi( mul_results_compare::@9/(byte*) char_cursor#75 ) - (byte) mul_results_compare::a#6 ← phi( mul_results_compare::@9/(byte) mul_results_compare::a#7 ) - (byte) mul_results_compare::b#4 ← phi( mul_results_compare::@9/(byte) mul_results_compare::b#5 ) - (byte) mul_results_compare::b#1 ← ++ (byte) mul_results_compare::b#4 - (boolean~) mul_results_compare::$8 ← (byte) mul_results_compare::b#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) mul_results_compare::$8) goto mul_results_compare::@2 - to:mul_results_compare::@6 -mul_results_compare::@4: scope:[mul_results_compare] from mul_results_compare::@9 - (byte*) line_cursor#50 ← phi( mul_results_compare::@9/(byte*) line_cursor#49 ) - (word) mul_results_compare::ma#4 ← phi( mul_results_compare::@9/(word) mul_results_compare::ma#0 ) - (word) mul_results_compare::ms#3 ← phi( mul_results_compare::@9/(word) mul_results_compare::ms#1 ) - (byte*) char_cursor#68 ← phi( mul_results_compare::@9/(byte*) char_cursor#75 ) - (byte*) BGCOL#3 ← phi( mul_results_compare::@9/(byte*) BGCOL#6 ) - *((byte*) BGCOL#3) ← (byte/signed byte/word/signed word) 2 - (byte*) print_str::str#4 ← (const string) mul_results_compare::str - call print_str param-assignment - to:mul_results_compare::@10 -mul_results_compare::@10: scope:[mul_results_compare] from mul_results_compare::@4 - (byte*) line_cursor#45 ← phi( mul_results_compare::@4/(byte*) line_cursor#50 ) - (word) mul_results_compare::ma#3 ← phi( mul_results_compare::@4/(word) mul_results_compare::ma#4 ) - (word) mul_results_compare::ms#2 ← phi( mul_results_compare::@4/(word) mul_results_compare::ms#3 ) - (byte*) char_cursor#53 ← phi( mul_results_compare::@4/(byte*) char_cursor#2 ) - (byte*) char_cursor#23 ← (byte*) char_cursor#53 - (word) print_word::w#2 ← (word) mul_results_compare::ms#2 - call print_word param-assignment - to:mul_results_compare::@11 -mul_results_compare::@11: scope:[mul_results_compare] from mul_results_compare::@10 - (byte*) line_cursor#39 ← phi( mul_results_compare::@10/(byte*) line_cursor#45 ) - (word) mul_results_compare::ma#2 ← phi( mul_results_compare::@10/(word) mul_results_compare::ma#3 ) - (byte*) char_cursor#54 ← phi( mul_results_compare::@10/(byte*) char_cursor#7 ) - (byte*) char_cursor#24 ← (byte*) char_cursor#54 - (byte*) print_str::str#5 ← (const string) mul_results_compare::str1 - call print_str param-assignment - to:mul_results_compare::@12 -mul_results_compare::@12: scope:[mul_results_compare] from mul_results_compare::@11 - (byte*) line_cursor#32 ← phi( mul_results_compare::@11/(byte*) line_cursor#39 ) - (word) mul_results_compare::ma#1 ← phi( mul_results_compare::@11/(word) mul_results_compare::ma#2 ) - (byte*) char_cursor#55 ← phi( mul_results_compare::@11/(byte*) char_cursor#2 ) - (byte*) char_cursor#25 ← (byte*) char_cursor#55 - (word) print_word::w#3 ← (word) mul_results_compare::ma#1 - call print_word param-assignment - to:mul_results_compare::@13 -mul_results_compare::@13: scope:[mul_results_compare] from mul_results_compare::@12 - (byte*) line_cursor#26 ← phi( mul_results_compare::@12/(byte*) line_cursor#32 ) - (byte*) char_cursor#56 ← phi( mul_results_compare::@12/(byte*) char_cursor#7 ) - (byte*) char_cursor#26 ← (byte*) char_cursor#56 - to:mul_results_compare::@return -mul_results_compare::@return: scope:[mul_results_compare] from mul_results_compare::@13 mul_results_compare::@15 - (byte*) line_cursor#19 ← phi( mul_results_compare::@13/(byte*) line_cursor#26 mul_results_compare::@15/(byte*) line_cursor#9 ) - (byte*) char_cursor#57 ← phi( mul_results_compare::@13/(byte*) char_cursor#26 mul_results_compare::@15/(byte*) char_cursor#29 ) - (byte*) char_cursor#27 ← (byte*) char_cursor#57 - (byte*) line_cursor#8 ← (byte*) line_cursor#19 - return - to:@return -mul_results_compare::@6: scope:[mul_results_compare] from mul_results_compare::@3 - (byte*) BGCOL#19 ← phi( mul_results_compare::@3/(byte*) BGCOL#16 ) - (byte*) line_cursor#40 ← phi( mul_results_compare::@3/(byte*) line_cursor#46 ) - (byte*) char_cursor#76 ← phi( mul_results_compare::@3/(byte*) char_cursor#82 ) - (byte) mul_results_compare::a#4 ← phi( mul_results_compare::@3/(byte) mul_results_compare::a#6 ) - (byte) mul_results_compare::a#1 ← ++ (byte) mul_results_compare::a#4 - (boolean~) mul_results_compare::$9 ← (byte) mul_results_compare::a#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) mul_results_compare::$9) goto mul_results_compare::@1 - to:mul_results_compare::@7 -mul_results_compare::@7: scope:[mul_results_compare] from mul_results_compare::@6 - (byte*) line_cursor#33 ← phi( mul_results_compare::@6/(byte*) line_cursor#40 ) - (byte*) char_cursor#69 ← phi( mul_results_compare::@6/(byte*) char_cursor#76 ) - (byte*) print_str::str#6 ← (const string) mul_results_compare::str2 - call print_str param-assignment - to:mul_results_compare::@14 -mul_results_compare::@14: scope:[mul_results_compare] from mul_results_compare::@7 - (byte*) line_cursor#27 ← phi( mul_results_compare::@7/(byte*) line_cursor#33 ) - (byte*) char_cursor#58 ← phi( mul_results_compare::@7/(byte*) char_cursor#2 ) - (byte*) char_cursor#28 ← (byte*) char_cursor#58 - call print_ln param-assignment - to:mul_results_compare::@15 -mul_results_compare::@15: scope:[mul_results_compare] from mul_results_compare::@14 - (byte*) char_cursor#59 ← phi( mul_results_compare::@14/(byte*) char_cursor#4 ) - (byte*) line_cursor#20 ← phi( mul_results_compare::@14/(byte*) line_cursor#2 ) - (byte*) line_cursor#9 ← (byte*) line_cursor#20 - (byte*) char_cursor#29 ← (byte*) char_cursor#59 - to:mul_results_compare::@return -@13: scope:[] from @9 - (byte*) line_cursor#28 ← phi( @9/(byte*) line_cursor#34 ) - (byte*) char_cursor#70 ← phi( @9/(byte*) char_cursor#77 ) - (byte*) BGCOL#4 ← phi( @9/(byte*) BGCOL#10 ) - call main param-assignment - to:@14 -@14: scope:[] from @13 - (byte*) line_cursor#21 ← phi( @13/(byte*) line_cursor#5 ) - (byte*) char_cursor#60 ← phi( @13/(byte*) char_cursor#15 ) - (byte*) char_cursor#30 ← (byte*) char_cursor#60 - (byte*) line_cursor#10 ← (byte*) line_cursor#21 - to:@end -@end: scope:[] from @14 - -SYMBOL TABLE SSA -(label) @13 -(label) @14 -(label) @6 -(label) @8 -(label) @9 -(label) @begin -(label) @end -(byte*) BGCOL -(byte*) BGCOL#0 -(byte*) BGCOL#1 -(byte*) BGCOL#10 -(byte*) BGCOL#11 -(byte*) BGCOL#12 -(byte*) BGCOL#13 -(byte*) BGCOL#14 -(byte*) BGCOL#15 -(byte*) BGCOL#16 -(byte*) BGCOL#17 -(byte*) BGCOL#18 -(byte*) BGCOL#19 -(byte*) BGCOL#2 -(byte*) BGCOL#20 -(byte*) BGCOL#3 -(byte*) BGCOL#4 -(byte*) BGCOL#5 -(byte*) BGCOL#6 -(byte*) BGCOL#7 -(byte*) BGCOL#8 -(byte*) BGCOL#9 -(byte[512]) asm_mul_sqr1_hi -(byte[512]) asm_mul_sqr1_hi#0 -(byte[512]) asm_mul_sqr1_lo -(byte[512]) asm_mul_sqr1_lo#0 -(byte[512]) asm_mul_sqr2_hi -(byte[512]) asm_mul_sqr2_hi#0 -(byte[512]) asm_mul_sqr2_lo -(byte[512]) asm_mul_sqr2_lo#0 -(word()) asm_multiply((byte) asm_multiply::a , (byte) asm_multiply::b) -(label) asm_multiply::@return -(byte) asm_multiply::a -(byte) asm_multiply::a#0 -(byte) asm_multiply::a#1 -(byte) asm_multiply::b -(byte) asm_multiply::b#0 -(byte) asm_multiply::b#1 -(byte*) asm_multiply::memA -(byte*) asm_multiply::memA#0 -(byte*) asm_multiply::memB -(byte*) asm_multiply::memB#0 -(word) asm_multiply::return -(word) asm_multiply::return#0 -(word) asm_multiply::return#1 -(word) asm_multiply::return#2 -(word) asm_multiply::return#3 -(word) asm_multiply::return#4 -(byte*) char_cursor -(byte*) char_cursor#0 -(byte*) char_cursor#1 -(byte*) char_cursor#10 -(byte*) char_cursor#11 -(byte*) char_cursor#12 -(byte*) char_cursor#13 -(byte*) char_cursor#14 -(byte*) char_cursor#15 -(byte*) char_cursor#16 -(byte*) char_cursor#17 -(byte*) char_cursor#18 -(byte*) char_cursor#19 -(byte*) char_cursor#2 -(byte*) char_cursor#20 -(byte*) char_cursor#21 -(byte*) char_cursor#22 -(byte*) char_cursor#23 -(byte*) char_cursor#24 -(byte*) char_cursor#25 -(byte*) char_cursor#26 -(byte*) char_cursor#27 -(byte*) char_cursor#28 -(byte*) char_cursor#29 -(byte*) char_cursor#3 -(byte*) char_cursor#30 -(byte*) char_cursor#31 -(byte*) char_cursor#32 -(byte*) char_cursor#33 -(byte*) char_cursor#34 -(byte*) char_cursor#35 -(byte*) char_cursor#36 -(byte*) char_cursor#37 -(byte*) char_cursor#38 -(byte*) char_cursor#39 -(byte*) char_cursor#4 -(byte*) char_cursor#40 -(byte*) char_cursor#41 -(byte*) char_cursor#42 -(byte*) char_cursor#43 -(byte*) char_cursor#44 -(byte*) char_cursor#45 -(byte*) char_cursor#46 -(byte*) char_cursor#47 -(byte*) char_cursor#48 -(byte*) char_cursor#49 -(byte*) char_cursor#5 -(byte*) char_cursor#50 -(byte*) char_cursor#51 -(byte*) char_cursor#52 -(byte*) char_cursor#53 -(byte*) char_cursor#54 -(byte*) char_cursor#55 -(byte*) char_cursor#56 -(byte*) char_cursor#57 -(byte*) char_cursor#58 -(byte*) char_cursor#59 -(byte*) char_cursor#6 -(byte*) char_cursor#60 -(byte*) char_cursor#61 -(byte*) char_cursor#62 -(byte*) char_cursor#63 -(byte*) char_cursor#64 -(byte*) char_cursor#65 -(byte*) char_cursor#66 -(byte*) char_cursor#67 -(byte*) char_cursor#68 -(byte*) char_cursor#69 -(byte*) char_cursor#7 -(byte*) char_cursor#70 -(byte*) char_cursor#71 -(byte*) char_cursor#72 -(byte*) char_cursor#73 -(byte*) char_cursor#74 -(byte*) char_cursor#75 -(byte*) char_cursor#76 -(byte*) char_cursor#77 -(byte*) char_cursor#78 -(byte*) char_cursor#79 -(byte*) char_cursor#8 -(byte*) char_cursor#80 -(byte*) char_cursor#81 -(byte*) char_cursor#82 -(byte*) char_cursor#83 -(byte*) char_cursor#84 -(byte*) char_cursor#85 -(byte*) char_cursor#86 -(byte*) char_cursor#87 -(byte*) char_cursor#9 -(void()) init_mul_tables() -(byte*~) init_mul_tables::$0 -(byte*~) init_mul_tables::$1 -(signed byte/signed word~) init_mul_tables::$10 -(byte~) init_mul_tables::$11 -(byte/word~) init_mul_tables::$12 -(boolean~) init_mul_tables::$13 -(boolean~) init_mul_tables::$14 -(byte*~) init_mul_tables::$15 -(boolean~) init_mul_tables::$16 -(byte*~) init_mul_tables::$17 -(byte*~) init_mul_tables::$18 -(byte*~) init_mul_tables::$19 -(byte~) init_mul_tables::$2 -(byte*~) init_mul_tables::$20 -(boolean~) init_mul_tables::$3 -(boolean~) init_mul_tables::$4 -(byte~) init_mul_tables::$5 -(byte~) init_mul_tables::$6 -(word~) init_mul_tables::$7 -(byte*~) init_mul_tables::$8 -(boolean~) init_mul_tables::$9 -(label) init_mul_tables::@1 -(label) init_mul_tables::@2 -(label) init_mul_tables::@3 -(label) init_mul_tables::@4 -(label) init_mul_tables::@5 -(label) init_mul_tables::@6 -(label) init_mul_tables::@7 -(label) init_mul_tables::@8 -(label) init_mul_tables::@return -(byte) init_mul_tables::c -(byte) init_mul_tables::c#0 -(byte) init_mul_tables::c#1 -(byte) init_mul_tables::c#2 -(byte) init_mul_tables::c#3 -(byte) init_mul_tables::c#4 -(byte) init_mul_tables::dir -(byte) init_mul_tables::dir#0 -(byte) init_mul_tables::dir#1 -(byte) init_mul_tables::dir#2 -(byte) init_mul_tables::dir#3 -(word) init_mul_tables::sqr -(word) init_mul_tables::sqr#0 -(word) init_mul_tables::sqr#1 -(word) init_mul_tables::sqr#2 -(word) init_mul_tables::sqr#3 -(word) init_mul_tables::sqr#4 -(word) init_mul_tables::sqr#5 -(byte*) init_mul_tables::sqr1_hi -(byte*) init_mul_tables::sqr1_hi#0 -(byte*) init_mul_tables::sqr1_hi#1 -(byte*) init_mul_tables::sqr1_hi#2 -(byte*) init_mul_tables::sqr1_hi#3 -(byte*) init_mul_tables::sqr1_hi#4 -(byte*) init_mul_tables::sqr1_lo -(byte*) init_mul_tables::sqr1_lo#0 -(byte*) init_mul_tables::sqr1_lo#1 -(byte*) init_mul_tables::sqr1_lo#2 -(byte*) init_mul_tables::sqr1_lo#3 -(byte*) init_mul_tables::sqr1_lo#4 -(byte*) init_mul_tables::sqr2_hi -(byte*) init_mul_tables::sqr2_hi#0 -(byte*) init_mul_tables::sqr2_hi#1 -(byte*) init_mul_tables::sqr2_hi#2 -(byte*) init_mul_tables::sqr2_hi#3 -(byte*) init_mul_tables::sqr2_hi#4 -(byte*) init_mul_tables::sqr2_lo -(byte*) init_mul_tables::sqr2_lo#0 -(byte*) init_mul_tables::sqr2_lo#1 -(byte*) init_mul_tables::sqr2_lo#2 -(byte*) init_mul_tables::sqr2_lo#3 -(byte*) init_mul_tables::sqr2_lo#4 -(byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_2#0 -(byte) init_mul_tables::x_2#1 -(byte) init_mul_tables::x_2#2 -(byte) init_mul_tables::x_2#3 -(byte) init_mul_tables::x_2#4 -(byte) init_mul_tables::x_255 -(byte) init_mul_tables::x_255#0 -(byte) init_mul_tables::x_255#1 -(byte) init_mul_tables::x_255#2 -(byte) init_mul_tables::x_255#3 -(byte) init_mul_tables::x_255#4 -(void()) init_mul_tables_asm() -(label) init_mul_tables_asm::@return -(byte*) init_mul_tables_asm::mem -(byte*) init_mul_tables_asm::mem#0 -(byte*) line_cursor -(byte*) line_cursor#0 -(byte*) line_cursor#1 -(byte*) line_cursor#10 -(byte*) line_cursor#11 -(byte*) line_cursor#12 -(byte*) line_cursor#13 -(byte*) line_cursor#14 -(byte*) line_cursor#15 -(byte*) line_cursor#16 -(byte*) line_cursor#17 -(byte*) line_cursor#18 -(byte*) line_cursor#19 -(byte*) line_cursor#2 -(byte*) line_cursor#20 -(byte*) line_cursor#21 -(byte*) line_cursor#22 -(byte*) line_cursor#23 -(byte*) line_cursor#24 -(byte*) line_cursor#25 -(byte*) line_cursor#26 -(byte*) line_cursor#27 -(byte*) line_cursor#28 -(byte*) line_cursor#29 -(byte*) line_cursor#3 -(byte*) line_cursor#30 -(byte*) line_cursor#31 -(byte*) line_cursor#32 -(byte*) line_cursor#33 -(byte*) line_cursor#34 -(byte*) line_cursor#35 -(byte*) line_cursor#36 -(byte*) line_cursor#37 -(byte*) line_cursor#38 -(byte*) line_cursor#39 -(byte*) line_cursor#4 -(byte*) line_cursor#40 -(byte*) line_cursor#41 -(byte*) line_cursor#42 -(byte*) line_cursor#43 -(byte*) line_cursor#44 -(byte*) line_cursor#45 -(byte*) line_cursor#46 -(byte*) line_cursor#47 -(byte*) line_cursor#48 -(byte*) line_cursor#49 -(byte*) line_cursor#5 -(byte*) line_cursor#50 -(byte*) line_cursor#51 -(byte*) line_cursor#52 -(byte*) line_cursor#53 -(byte*) line_cursor#54 -(byte*) line_cursor#6 -(byte*) line_cursor#7 -(byte*) line_cursor#8 -(byte*) line_cursor#9 -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@3 -(label) main::@4 -(label) main::@5 -(label) main::@return -(void()) mul_results_compare() -(word~) mul_results_compare::$0 -(word~) mul_results_compare::$1 -(boolean~) mul_results_compare::$2 -(boolean~) mul_results_compare::$3 -(boolean~) mul_results_compare::$8 -(boolean~) mul_results_compare::$9 -(label) mul_results_compare::@1 -(label) mul_results_compare::@10 -(label) mul_results_compare::@11 -(label) mul_results_compare::@12 -(label) mul_results_compare::@13 -(label) mul_results_compare::@14 -(label) mul_results_compare::@15 -(label) mul_results_compare::@2 -(label) mul_results_compare::@3 -(label) mul_results_compare::@4 -(label) mul_results_compare::@6 -(label) mul_results_compare::@7 -(label) mul_results_compare::@8 -(label) mul_results_compare::@9 -(label) mul_results_compare::@return -(byte) mul_results_compare::a -(byte) mul_results_compare::a#0 -(byte) mul_results_compare::a#1 -(byte) mul_results_compare::a#2 -(byte) mul_results_compare::a#3 -(byte) mul_results_compare::a#4 -(byte) mul_results_compare::a#5 -(byte) mul_results_compare::a#6 -(byte) mul_results_compare::a#7 -(byte) mul_results_compare::b -(byte) mul_results_compare::b#0 -(byte) mul_results_compare::b#1 -(byte) mul_results_compare::b#2 -(byte) mul_results_compare::b#3 -(byte) mul_results_compare::b#4 -(byte) mul_results_compare::b#5 -(word) mul_results_compare::ma -(word) mul_results_compare::ma#0 -(word) mul_results_compare::ma#1 -(word) mul_results_compare::ma#2 -(word) mul_results_compare::ma#3 -(word) mul_results_compare::ma#4 -(word) mul_results_compare::ms -(word) mul_results_compare::ms#0 -(word) mul_results_compare::ms#1 -(word) mul_results_compare::ms#2 -(word) mul_results_compare::ms#3 -(const string) mul_results_compare::str = (string) "multiply mismatch slow:@" -(const string) mul_results_compare::str1 = (string) " / fast asm:" -(const string) mul_results_compare::str2 = (string) "multiply results match!@" -(byte[512]) mul_sqr1_hi -(byte[512]) mul_sqr1_hi#0 -(byte[512]) mul_sqr1_lo -(byte[512]) mul_sqr1_lo#0 -(byte[512]) mul_sqr2_hi -(byte[512]) mul_sqr2_hi#0 -(byte[512]) mul_sqr2_lo -(byte[512]) mul_sqr2_lo#0 -(void()) mul_tables_compare() -(boolean~) mul_tables_compare::$0 -(boolean~) mul_tables_compare::$1 -(boolean~) mul_tables_compare::$10 -(word~) mul_tables_compare::$3 -(word~) mul_tables_compare::$6 -(word/signed word~) mul_tables_compare::$8 -(byte*~) mul_tables_compare::$9 -(label) mul_tables_compare::@1 -(label) mul_tables_compare::@10 -(label) mul_tables_compare::@11 -(label) mul_tables_compare::@2 -(label) mul_tables_compare::@3 -(label) mul_tables_compare::@5 -(label) mul_tables_compare::@6 -(label) mul_tables_compare::@7 -(label) mul_tables_compare::@8 -(label) mul_tables_compare::@9 -(label) mul_tables_compare::@return -(byte*) mul_tables_compare::asm_sqr -(byte*) mul_tables_compare::asm_sqr#0 -(byte*) mul_tables_compare::asm_sqr#1 -(byte*) mul_tables_compare::asm_sqr#2 -(byte*) mul_tables_compare::asm_sqr#3 -(byte*) mul_tables_compare::asm_sqr#4 -(byte*) mul_tables_compare::asm_sqr#5 -(byte*) mul_tables_compare::kc_sqr -(byte*) mul_tables_compare::kc_sqr#0 -(byte*) mul_tables_compare::kc_sqr#1 -(byte*) mul_tables_compare::kc_sqr#2 -(byte*) mul_tables_compare::kc_sqr#3 -(byte*) mul_tables_compare::kc_sqr#4 -(byte*) mul_tables_compare::kc_sqr#5 -(byte*) mul_tables_compare::kc_sqr#6 -(byte*) mul_tables_compare::kc_sqr#7 -(const string) mul_tables_compare::str = (string) "multiply table mismatch at @" -(const string) mul_tables_compare::str1 = (string) " / @" -(const string) mul_tables_compare::str2 = (string) "multiply tables match!@" -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 -(byte~) print_byte::$2 -(label) print_byte::@1 -(label) print_byte::@2 -(label) print_byte::@return -(byte) print_byte::b -(byte) print_byte::b#0 -(byte) print_byte::b#1 -(byte) print_byte::b#2 -(byte) print_byte::b#3 -(byte[]) print_byte::hextab -(byte[]) print_byte::hextab#0 -(void()) print_char((byte) print_char::ch) -(label) print_char::@return -(byte) print_char::ch -(byte) print_char::ch#0 -(byte) print_char::ch#1 -(byte) print_char::ch#2 -(void()) print_cls() -(word/signed word~) print_cls::$0 -(boolean~) print_cls::$1 -(label) print_cls::@1 -(label) print_cls::@return -(byte*) print_cls::sc -(byte*) print_cls::sc#0 -(byte*) print_cls::sc#1 -(byte*) print_cls::sc#2 -(void()) print_ln() -(byte*~) print_ln::$0 -(boolean~) print_ln::$1 -(label) print_ln::@1 -(label) print_ln::@2 -(label) print_ln::@return -(void()) print_str((byte*) print_str::str) -(boolean~) print_str::$0 -(label) print_str::@1 -(label) print_str::@2 -(label) print_str::@return -(byte*) print_str::str -(byte*) print_str::str#0 -(byte*) print_str::str#1 -(byte*) print_str::str#2 -(byte*) print_str::str#3 -(byte*) print_str::str#4 -(byte*) print_str::str#5 -(byte*) print_str::str#6 -(byte*) print_str::str#7 -(byte*) print_str::str#8 -(byte*) print_str::str#9 -(void()) print_word((word) print_word::w) -(byte~) print_word::$0 -(byte~) print_word::$2 -(label) print_word::@1 -(label) print_word::@2 -(label) print_word::@return -(word) print_word::w -(word) print_word::w#0 -(word) print_word::w#1 -(word) print_word::w#2 -(word) print_word::w#3 -(word) print_word::w#4 -(word) print_word::w#5 -(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) -(boolean~) slow_multiply::$0 -(boolean~) slow_multiply::$1 -(word~) slow_multiply::$2 -(boolean~) slow_multiply::$3 -(label) slow_multiply::@1 -(label) slow_multiply::@2 -(label) slow_multiply::@3 -(label) slow_multiply::@return -(byte) slow_multiply::a -(byte) slow_multiply::a#0 -(byte) slow_multiply::a#1 -(byte) slow_multiply::a#2 -(byte) slow_multiply::a#3 -(byte) slow_multiply::b -(byte) slow_multiply::b#0 -(byte) slow_multiply::b#1 -(byte) slow_multiply::b#2 -(byte) slow_multiply::b#3 -(byte) slow_multiply::i -(byte) slow_multiply::i#0 -(byte) slow_multiply::i#1 -(byte) slow_multiply::i#2 -(word) slow_multiply::m -(word) slow_multiply::m#0 -(word) slow_multiply::m#1 -(word) slow_multiply::m#2 -(word) slow_multiply::m#3 -(word) slow_multiply::m#4 -(word) slow_multiply::return -(word) slow_multiply::return#0 -(word) slow_multiply::return#1 -(word) slow_multiply::return#2 -(word) slow_multiply::return#3 -(word) slow_multiply::return#4 - -OPTIMIZING CONTROL FLOW GRAPH -Inversing boolean not (boolean~) slow_multiply::$1 ← (byte) slow_multiply::a#1 <= (byte/signed byte/word/signed word) 0 from (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a#1 > (byte/signed byte/word/signed word) 0 -Inversing boolean not (boolean~) init_mul_tables::$4 ← (byte~) init_mul_tables::$2 != (byte/signed byte/word/signed word) 0 from (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 -Inversing boolean not (boolean~) init_mul_tables::$14 ← (byte) init_mul_tables::x_255#1 != (byte/signed byte/word/signed word) 0 from (boolean~) init_mul_tables::$13 ← (byte) init_mul_tables::x_255#1 == (byte/signed byte/word/signed word) 0 -Inversing boolean not (boolean~) mul_tables_compare::$1 ← *((byte*) mul_tables_compare::kc_sqr#2) == *((byte*) mul_tables_compare::asm_sqr#2) from (boolean~) mul_tables_compare::$0 ← *((byte*) mul_tables_compare::kc_sqr#2) != *((byte*) mul_tables_compare::asm_sqr#2) -Inversing boolean not (boolean~) mul_results_compare::$3 ← (word) mul_results_compare::ms#1 == (word) mul_results_compare::ma#0 from (boolean~) mul_results_compare::$2 ← (word) mul_results_compare::ms#1 != (word) mul_results_compare::ma#0 -Succesful SSA optimization Pass2UnaryNotSimplification -Not aliassing across scopes: print_str::str#9 print_str::str#5 -Not aliassing across scopes: char_cursor#71 char_cursor#24 -Not aliassing across scopes: line_cursor#22 line_cursor#27 -Not aliassing across scopes: char_cursor#62 char_cursor#28 -Not aliassing across scopes: print_word::w#4 print_word::w#2 -Not aliassing across scopes: char_cursor#63 char_cursor#23 -Not aliassing across scopes: char_cursor#35 char_cursor#10 -Not aliassing across scopes: char_cursor#36 char_cursor#10 -Not aliassing across scopes: print_byte::b#2 print_byte::b#0 -Not aliassing across scopes: char_cursor#64 char_cursor#63 -Not aliassing across scopes: char_cursor#38 char_cursor#12 -Not aliassing across scopes: char_cursor#39 char_cursor#12 -Not aliassing across scopes: print_char::ch#2 print_char::ch#0 -Not aliassing across scopes: char_cursor#41 char_cursor#64 -Not aliassing across scopes: BGCOL#1 BGCOL#4 -Not aliassing across scopes: char_cursor#83 char_cursor#70 -Not aliassing across scopes: line_cursor#41 line_cursor#28 -Not aliassing across scopes: char_cursor#43 char_cursor#20 -Not aliassing across scopes: line_cursor#14 line_cursor#6 -Not aliassing across scopes: char_cursor#44 char_cursor#27 -Not aliassing across scopes: line_cursor#15 line_cursor#8 -Not aliassing across scopes: slow_multiply::a#1 slow_multiply::a#0 -Not aliassing across scopes: slow_multiply::b#3 slow_multiply::b#0 -Not aliassing identity: slow_multiply::b#1 slow_multiply::b#1 -Not aliassing identity: slow_multiply::a#2 slow_multiply::a#2 -Not aliassing across scopes: init_mul_tables::sqr2_hi#0 mul_sqr2_hi#0 -Not aliassing across scopes: init_mul_tables::sqr2_lo#0 mul_sqr2_lo#0 -Not aliassing across scopes: asm_multiply::a#1 asm_multiply::a#0 -Not aliassing across scopes: asm_multiply::b#1 asm_multiply::b#0 -Not aliassing across scopes: BGCOL#7 BGCOL#12 -Not aliassing across scopes: char_cursor#80 char_cursor#65 -Not aliassing across scopes: line_cursor#47 line_cursor#23 -Not aliassing across scopes: mul_tables_compare::asm_sqr#0 asm_mul_sqr1_lo#0 -Not aliassing across scopes: mul_tables_compare::kc_sqr#0 mul_sqr1_lo#0 -Not aliassing across scopes: char_cursor#46 char_cursor#2 -Not aliassing across scopes: char_cursor#47 char_cursor#7 -Not aliassing across scopes: char_cursor#48 char_cursor#2 -Not aliassing across scopes: char_cursor#49 char_cursor#7 -Not aliassing across scopes: char_cursor#51 char_cursor#2 -Not aliassing across scopes: line_cursor#18 line_cursor#2 -Not aliassing across scopes: char_cursor#52 char_cursor#4 -Not aliassing across scopes: BGCOL#18 BGCOL#20 -Not aliassing across scopes: char_cursor#87 char_cursor#13 -Not aliassing across scopes: line_cursor#54 line_cursor#3 -Not aliassing across scopes: slow_multiply::a#0 mul_results_compare::a#2 -Not aliassing across scopes: slow_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#1 -Not aliassing across scopes: mul_results_compare::$0 slow_multiply::return#4 -Not aliassing across scopes: asm_multiply::a#0 mul_results_compare::a#3 -Not aliassing across scopes: asm_multiply::b#0 mul_results_compare::b#3 -Not aliassing across scopes: asm_multiply::return#2 asm_multiply::return#1 -Not aliassing across scopes: mul_results_compare::$1 asm_multiply::return#4 -Not aliassing across scopes: char_cursor#53 char_cursor#2 -Not aliassing across scopes: print_word::w#2 mul_results_compare::ms#2 -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 mul_results_compare::ma#1 -Not aliassing across scopes: char_cursor#56 char_cursor#7 -Not aliassing across scopes: char_cursor#58 char_cursor#2 -Not aliassing across scopes: line_cursor#20 line_cursor#2 -Not aliassing across scopes: char_cursor#59 char_cursor#4 -Not aliassing across scopes: char_cursor#60 char_cursor#15 -Not aliassing across scopes: line_cursor#21 line_cursor#5 -Alias (byte*) char_cursor#0 = (byte*) line_cursor#0 (byte*) char_cursor#84 (byte*) line_cursor#42 (byte*) char_cursor#79 (byte*) line_cursor#36 (byte*) char_cursor#77 (byte*) line_cursor#34 (byte*) char_cursor#70 (byte*) line_cursor#28 -Alias (byte*) print_str::str#7 = (byte*) print_str::str#8 -Alias (byte*) char_cursor#2 = (byte*) char_cursor#31 (byte*) char_cursor#61 (byte*) char_cursor#32 -Alias (byte*) line_cursor#1 = (byte*~) print_ln::$0 (byte*) line_cursor#12 (byte*) char_cursor#3 (byte*) line_cursor#13 (byte*) char_cursor#34 (byte*) line_cursor#2 (byte*) char_cursor#4 -Alias (byte) print_byte::b#0 = (byte~) print_word::$0 -Alias (word) print_word::w#4 = (word) print_word::w#5 -Alias (byte*) char_cursor#35 = (byte*) char_cursor#5 -Alias (byte) print_byte::b#1 = (byte~) print_word::$2 -Alias (byte*) char_cursor#36 = (byte*) char_cursor#6 (byte*) char_cursor#37 (byte*) char_cursor#7 -Alias (byte) print_byte::b#2 = (byte) print_byte::b#3 -Alias (byte*) char_cursor#38 = (byte*) char_cursor#8 -Alias (byte*) char_cursor#10 = (byte*) char_cursor#9 (byte*) char_cursor#39 (byte*) char_cursor#40 -Alias (byte*) char_cursor#11 = (byte*) char_cursor#42 (byte*) char_cursor#12 -Alias (byte*) char_cursor#65 = (byte*) char_cursor#78 (byte*) char_cursor#83 (byte*) char_cursor#72 -Alias (byte*) line_cursor#23 = (byte*) line_cursor#35 (byte*) line_cursor#41 (byte*) line_cursor#29 -Alias (byte*) BGCOL#1 = (byte*) BGCOL#17 (byte*) BGCOL#14 (byte*) BGCOL#12 (byte*) BGCOL#20 -Alias (byte*) char_cursor#13 = (byte*) char_cursor#43 -Alias (byte*) line_cursor#14 = (byte*) line_cursor#3 -Alias (byte*) char_cursor#14 = (byte*) char_cursor#44 (byte*) char_cursor#45 (byte*) char_cursor#15 -Alias (byte*) line_cursor#15 = (byte*) line_cursor#4 (byte*) line_cursor#16 (byte*) line_cursor#5 -Alias (word) slow_multiply::return#0 = (word) slow_multiply::m#2 (word) slow_multiply::return#3 (word) slow_multiply::return#1 -Alias (word) slow_multiply::m#0 = (word) slow_multiply::m#4 -Alias (byte) slow_multiply::b#2 = (byte) slow_multiply::b#3 -Alias (byte) slow_multiply::a#1 = (byte) slow_multiply::a#3 -Alias (word) slow_multiply::m#1 = (word~) slow_multiply::$2 -Alias (byte*) BGCOL#0 = (byte*) BGCOL#11 (byte*) BGCOL#10 (byte*) BGCOL#4 -Alias (byte*) init_mul_tables::sqr1_hi#0 = (byte*~) init_mul_tables::$0 -Alias (byte*) init_mul_tables::sqr1_lo#0 = (byte*~) init_mul_tables::$1 -Alias (word) init_mul_tables::sqr#1 = (word~) init_mul_tables::$7 -Alias (byte) init_mul_tables::x_2#3 = (byte) init_mul_tables::x_2#4 -Alias (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#5 -Alias (byte*) init_mul_tables::sqr1_lo#3 = (byte*) init_mul_tables::sqr1_lo#4 -Alias (byte*) init_mul_tables::sqr1_hi#3 = (byte*) init_mul_tables::sqr1_hi#4 -Alias (byte) init_mul_tables::c#1 = (byte) init_mul_tables::c#4 -Alias (byte) init_mul_tables::x_255#0 = (byte~) init_mul_tables::$11 -Alias (byte) init_mul_tables::x_255#1 = (byte/word~) init_mul_tables::$12 (byte) init_mul_tables::x_255#4 -Alias (byte*) init_mul_tables::sqr2_lo#2 = (byte*) init_mul_tables::sqr2_lo#4 -Alias (byte*) init_mul_tables::sqr2_hi#1 = (byte*) init_mul_tables::sqr2_hi#4 -Alias (word) asm_multiply::return#0 = (word) asm_multiply::return#3 (word) asm_multiply::return#1 -Alias (byte*) mul_tables_compare::asm_sqr#2 = (byte*) mul_tables_compare::asm_sqr#3 (byte*) mul_tables_compare::asm_sqr#5 (byte*) mul_tables_compare::asm_sqr#4 -Alias (byte*) mul_tables_compare::kc_sqr#2 = (byte*) mul_tables_compare::kc_sqr#3 (byte*) mul_tables_compare::kc_sqr#7 (byte*) mul_tables_compare::kc_sqr#6 (byte*) mul_tables_compare::kc_sqr#5 (byte*) mul_tables_compare::kc_sqr#4 -Alias (byte*) BGCOL#2 = (byte*) BGCOL#8 (byte*) BGCOL#5 -Alias (byte*) char_cursor#66 = (byte*) char_cursor#74 (byte*) char_cursor#73 (byte*) char_cursor#67 -Alias (byte*) line_cursor#24 = (byte*) line_cursor#38 (byte*) line_cursor#43 (byte*) line_cursor#48 (byte*) line_cursor#44 (byte*) line_cursor#37 (byte*) line_cursor#30 (byte*) line_cursor#31 (byte*) line_cursor#25 -Alias (byte*) char_cursor#16 = (byte*) char_cursor#46 -Alias (word) print_word::w#0 = (word~) mul_tables_compare::$3 -Alias (byte*) char_cursor#17 = (byte*) char_cursor#47 -Alias (byte*) char_cursor#18 = (byte*) char_cursor#48 -Alias (word) print_word::w#1 = (word~) mul_tables_compare::$6 -Alias (byte*) char_cursor#19 = (byte*) char_cursor#49 -Alias (byte*) char_cursor#20 = (byte*) char_cursor#50 -Alias (byte*) line_cursor#17 = (byte*) line_cursor#6 -Alias (byte*) char_cursor#21 = (byte*) char_cursor#51 -Alias (byte*) line_cursor#18 = (byte*) line_cursor#7 -Alias (byte*) char_cursor#22 = (byte*) char_cursor#52 -Alias (word) slow_multiply::return#2 = (word) slow_multiply::return#4 -Alias (byte) mul_results_compare::a#2 = (byte) mul_results_compare::a#3 (byte) mul_results_compare::a#7 (byte) mul_results_compare::a#6 (byte) mul_results_compare::a#4 -Alias (byte) mul_results_compare::b#2 = (byte) mul_results_compare::b#3 (byte) mul_results_compare::b#5 (byte) mul_results_compare::b#4 -Alias (byte*) BGCOL#13 = (byte*) BGCOL#9 (byte*) BGCOL#6 (byte*) BGCOL#16 (byte*) BGCOL#3 (byte*) BGCOL#19 -Alias (byte*) char_cursor#68 = (byte*) char_cursor#81 (byte*) char_cursor#85 (byte*) char_cursor#75 (byte*) char_cursor#82 (byte*) char_cursor#76 (byte*) char_cursor#69 -Alias (byte*) line_cursor#26 = (byte*) line_cursor#51 (byte*) line_cursor#52 (byte*) line_cursor#49 (byte*) line_cursor#46 (byte*) line_cursor#50 (byte*) line_cursor#45 (byte*) line_cursor#39 (byte*) line_cursor#32 (byte*) line_cursor#40 (byte*) line_cursor#33 (byte*) line_cursor#27 -Alias (word) mul_results_compare::ms#0 = (word~) mul_results_compare::$0 (word) mul_results_compare::ms#1 (word) mul_results_compare::ms#3 (word) mul_results_compare::ms#2 -Alias (word) asm_multiply::return#2 = (word) asm_multiply::return#4 -Alias (word) mul_results_compare::ma#0 = (word~) mul_results_compare::$1 (word) mul_results_compare::ma#4 (word) mul_results_compare::ma#3 (word) mul_results_compare::ma#2 (word) mul_results_compare::ma#1 -Alias (byte*) char_cursor#23 = (byte*) char_cursor#53 -Alias (byte*) char_cursor#24 = (byte*) char_cursor#54 -Alias (byte*) char_cursor#25 = (byte*) char_cursor#55 -Alias (byte*) char_cursor#26 = (byte*) char_cursor#56 -Alias (byte*) char_cursor#27 = (byte*) char_cursor#57 -Alias (byte*) line_cursor#19 = (byte*) line_cursor#8 -Alias (byte*) char_cursor#28 = (byte*) char_cursor#58 -Alias (byte*) line_cursor#20 = (byte*) line_cursor#9 -Alias (byte*) char_cursor#29 = (byte*) char_cursor#59 -Alias (byte*) char_cursor#30 = (byte*) char_cursor#60 -Alias (byte*) line_cursor#10 = (byte*) line_cursor#21 -Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: print_str::str#9 print_str::str#5 -Not aliassing across scopes: char_cursor#71 char_cursor#24 -Not aliassing across scopes: line_cursor#22 line_cursor#26 -Not aliassing across scopes: char_cursor#62 char_cursor#28 -Not aliassing across scopes: print_word::w#4 print_word::w#2 -Not aliassing across scopes: char_cursor#63 char_cursor#23 -Not aliassing across scopes: char_cursor#35 char_cursor#10 -Not aliassing across scopes: char_cursor#36 char_cursor#10 -Not aliassing across scopes: print_byte::b#2 print_byte::b#0 -Not aliassing across scopes: char_cursor#64 char_cursor#63 -Not aliassing across scopes: char_cursor#38 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#41 char_cursor#64 -Not aliassing across scopes: BGCOL#1 BGCOL#0 -Not aliassing across scopes: char_cursor#65 char_cursor#0 -Not aliassing across scopes: line_cursor#23 char_cursor#0 -Not aliassing across scopes: char_cursor#13 char_cursor#20 -Not aliassing across scopes: line_cursor#14 line_cursor#17 -Not aliassing across scopes: char_cursor#14 char_cursor#27 -Not aliassing across scopes: line_cursor#15 line_cursor#19 -Not aliassing across scopes: slow_multiply::a#1 slow_multiply::a#0 -Not aliassing across scopes: slow_multiply::b#2 slow_multiply::b#0 -Not aliassing identity: slow_multiply::b#1 slow_multiply::b#1 -Not aliassing identity: slow_multiply::a#2 slow_multiply::a#2 -Not aliassing across scopes: init_mul_tables::sqr2_hi#0 mul_sqr2_hi#0 -Not aliassing across scopes: init_mul_tables::sqr2_lo#0 mul_sqr2_lo#0 -Not aliassing across scopes: asm_multiply::a#1 asm_multiply::a#0 -Not aliassing across scopes: asm_multiply::b#1 asm_multiply::b#0 -Not aliassing across scopes: BGCOL#7 BGCOL#1 -Not aliassing across scopes: char_cursor#80 char_cursor#65 -Not aliassing across scopes: line_cursor#47 line_cursor#23 -Not aliassing across scopes: mul_tables_compare::asm_sqr#0 asm_mul_sqr1_lo#0 -Not aliassing across scopes: mul_tables_compare::kc_sqr#0 mul_sqr1_lo#0 -Not aliassing across scopes: char_cursor#16 char_cursor#2 -Not aliassing across scopes: char_cursor#17 char_cursor#36 -Not aliassing across scopes: char_cursor#18 char_cursor#2 -Not aliassing across scopes: char_cursor#19 char_cursor#36 -Not aliassing across scopes: char_cursor#21 char_cursor#2 -Not aliassing across scopes: line_cursor#18 line_cursor#1 -Not aliassing across scopes: char_cursor#22 line_cursor#1 -Not aliassing across scopes: BGCOL#18 BGCOL#1 -Not aliassing across scopes: char_cursor#87 char_cursor#13 -Not aliassing across scopes: line_cursor#54 line_cursor#14 -Not aliassing across scopes: slow_multiply::a#0 mul_results_compare::a#2 -Not aliassing across scopes: slow_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ms#0 slow_multiply::return#2 -Not aliassing across scopes: asm_multiply::a#0 mul_results_compare::a#2 -Not aliassing across scopes: asm_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: asm_multiply::return#2 asm_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ma#0 asm_multiply::return#2 -Not aliassing across scopes: char_cursor#23 char_cursor#2 -Not aliassing across scopes: print_word::w#2 mul_results_compare::ms#0 -Not aliassing across scopes: char_cursor#24 char_cursor#36 -Not aliassing across scopes: char_cursor#25 char_cursor#2 -Not aliassing across scopes: print_word::w#3 mul_results_compare::ma#0 -Not aliassing across scopes: char_cursor#26 char_cursor#36 -Not aliassing across scopes: char_cursor#28 char_cursor#2 -Not aliassing across scopes: line_cursor#20 line_cursor#1 -Not aliassing across scopes: char_cursor#29 line_cursor#1 -Not aliassing across scopes: char_cursor#30 char_cursor#14 -Not aliassing across scopes: line_cursor#10 line_cursor#15 -Alias (byte*) init_mul_tables::sqr1_lo#2 = (byte*) init_mul_tables::sqr1_lo#3 -Alias (byte*) init_mul_tables::sqr1_hi#2 = (byte*) init_mul_tables::sqr1_hi#3 -Alias (byte) init_mul_tables::c#1 = (byte) init_mul_tables::c#3 -Alias (byte*) init_mul_tables::sqr2_lo#2 = (byte*) init_mul_tables::sqr2_lo#3 -Alias (byte) init_mul_tables::x_255#1 = (byte) init_mul_tables::x_255#3 -Alias (byte*) init_mul_tables::sqr2_hi#1 = (byte*) init_mul_tables::sqr2_hi#3 -Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: print_str::str#9 print_str::str#5 -Not aliassing across scopes: char_cursor#71 char_cursor#24 -Not aliassing across scopes: line_cursor#22 line_cursor#26 -Not aliassing across scopes: char_cursor#62 char_cursor#28 -Not aliassing across scopes: print_word::w#4 print_word::w#2 -Not aliassing across scopes: char_cursor#63 char_cursor#23 -Not aliassing across scopes: char_cursor#35 char_cursor#10 -Not aliassing across scopes: char_cursor#36 char_cursor#10 -Not aliassing across scopes: print_byte::b#2 print_byte::b#0 -Not aliassing across scopes: char_cursor#64 char_cursor#63 -Not aliassing across scopes: char_cursor#38 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#41 char_cursor#64 -Not aliassing across scopes: BGCOL#1 BGCOL#0 -Not aliassing across scopes: char_cursor#65 char_cursor#0 -Not aliassing across scopes: line_cursor#23 char_cursor#0 -Not aliassing across scopes: char_cursor#13 char_cursor#20 -Not aliassing across scopes: line_cursor#14 line_cursor#17 -Not aliassing across scopes: char_cursor#14 char_cursor#27 -Not aliassing across scopes: line_cursor#15 line_cursor#19 -Not aliassing across scopes: slow_multiply::a#1 slow_multiply::a#0 -Not aliassing across scopes: slow_multiply::b#2 slow_multiply::b#0 -Not aliassing identity: slow_multiply::b#1 slow_multiply::b#1 -Not aliassing identity: slow_multiply::a#2 slow_multiply::a#2 -Not aliassing across scopes: init_mul_tables::sqr2_hi#0 mul_sqr2_hi#0 -Not aliassing across scopes: init_mul_tables::sqr2_lo#0 mul_sqr2_lo#0 -Not aliassing across scopes: asm_multiply::a#1 asm_multiply::a#0 -Not aliassing across scopes: asm_multiply::b#1 asm_multiply::b#0 -Not aliassing across scopes: BGCOL#7 BGCOL#1 -Not aliassing across scopes: char_cursor#80 char_cursor#65 -Not aliassing across scopes: line_cursor#47 line_cursor#23 -Not aliassing across scopes: mul_tables_compare::asm_sqr#0 asm_mul_sqr1_lo#0 -Not aliassing across scopes: mul_tables_compare::kc_sqr#0 mul_sqr1_lo#0 -Not aliassing across scopes: char_cursor#16 char_cursor#2 -Not aliassing across scopes: char_cursor#17 char_cursor#36 -Not aliassing across scopes: char_cursor#18 char_cursor#2 -Not aliassing across scopes: char_cursor#19 char_cursor#36 -Not aliassing across scopes: char_cursor#21 char_cursor#2 -Not aliassing across scopes: line_cursor#18 line_cursor#1 -Not aliassing across scopes: char_cursor#22 line_cursor#1 -Not aliassing across scopes: BGCOL#18 BGCOL#1 -Not aliassing across scopes: char_cursor#87 char_cursor#13 -Not aliassing across scopes: line_cursor#54 line_cursor#14 -Not aliassing across scopes: slow_multiply::a#0 mul_results_compare::a#2 -Not aliassing across scopes: slow_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ms#0 slow_multiply::return#2 -Not aliassing across scopes: asm_multiply::a#0 mul_results_compare::a#2 -Not aliassing across scopes: asm_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: asm_multiply::return#2 asm_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ma#0 asm_multiply::return#2 -Not aliassing across scopes: char_cursor#23 char_cursor#2 -Not aliassing across scopes: print_word::w#2 mul_results_compare::ms#0 -Not aliassing across scopes: char_cursor#24 char_cursor#36 -Not aliassing across scopes: char_cursor#25 char_cursor#2 -Not aliassing across scopes: print_word::w#3 mul_results_compare::ma#0 -Not aliassing across scopes: char_cursor#26 char_cursor#36 -Not aliassing across scopes: char_cursor#28 char_cursor#2 -Not aliassing across scopes: line_cursor#20 line_cursor#1 -Not aliassing across scopes: char_cursor#29 line_cursor#1 -Not aliassing across scopes: char_cursor#30 char_cursor#14 -Not aliassing across scopes: line_cursor#10 line_cursor#15 -Self Phi Eliminated (byte*) char_cursor#33 -Self Phi Eliminated (byte) slow_multiply::b#1 -Self Phi Eliminated (byte) slow_multiply::a#2 -Self Phi Eliminated (byte*) BGCOL#2 -Self Phi Eliminated (byte*) char_cursor#66 -Self Phi Eliminated (byte*) line_cursor#24 -Self Phi Eliminated (byte) mul_results_compare::a#2 -Self Phi Eliminated (byte*) BGCOL#13 -Self Phi Eliminated (byte*) char_cursor#68 -Self Phi Eliminated (byte*) line_cursor#26 -Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (byte*) char_cursor#33 (byte*) char_cursor#62 -Redundant Phi (byte*) char_cursor#35 (byte*) char_cursor#10 -Redundant Phi (byte*) char_cursor#36 (byte*) char_cursor#10 -Redundant Phi (byte*) char_cursor#38 (byte*) char_cursor#11 -Redundant Phi (byte*) char_cursor#10 (byte*) char_cursor#11 -Redundant Phi (byte*) BGCOL#1 (byte*) BGCOL#0 -Redundant Phi (byte*) char_cursor#65 (byte*) char_cursor#0 -Redundant Phi (byte*) line_cursor#23 (byte*) char_cursor#0 -Redundant Phi (byte*) char_cursor#13 (byte*) char_cursor#20 -Redundant Phi (byte*) line_cursor#14 (byte*) line_cursor#17 -Redundant Phi (byte*) char_cursor#14 (byte*) char_cursor#27 -Redundant Phi (byte*) line_cursor#15 (byte*) line_cursor#19 -Redundant Phi (byte) slow_multiply::a#1 (byte) slow_multiply::a#0 -Redundant Phi (byte) slow_multiply::b#2 (byte) slow_multiply::b#0 -Redundant Phi (byte) slow_multiply::b#1 (byte) slow_multiply::b#2 -Redundant Phi (byte) slow_multiply::a#2 (byte) slow_multiply::a#1 -Redundant Phi (byte) asm_multiply::a#1 (byte) asm_multiply::a#0 -Redundant Phi (byte) asm_multiply::b#1 (byte) asm_multiply::b#0 -Redundant Phi (byte*) BGCOL#7 (byte*) BGCOL#1 -Redundant Phi (byte*) char_cursor#80 (byte*) char_cursor#65 -Redundant Phi (byte*) line_cursor#47 (byte*) line_cursor#23 -Redundant Phi (byte*) BGCOL#2 (byte*) BGCOL#7 -Redundant Phi (byte*) char_cursor#66 (byte*) char_cursor#80 -Redundant Phi (byte*) line_cursor#24 (byte*) line_cursor#47 -Redundant Phi (byte*) char_cursor#16 (byte*) char_cursor#2 -Redundant Phi (byte*) char_cursor#17 (byte*) char_cursor#36 -Redundant Phi (byte*) char_cursor#18 (byte*) char_cursor#2 -Redundant Phi (byte*) char_cursor#19 (byte*) char_cursor#36 -Redundant Phi (byte*) char_cursor#21 (byte*) char_cursor#2 -Redundant Phi (byte*) line_cursor#18 (byte*) line_cursor#1 -Redundant Phi (byte*) char_cursor#22 (byte*) line_cursor#1 -Redundant Phi (byte*) BGCOL#18 (byte*) BGCOL#1 -Redundant Phi (byte*) char_cursor#87 (byte*) char_cursor#13 -Redundant Phi (byte*) line_cursor#54 (byte*) line_cursor#14 -Redundant Phi (byte) mul_results_compare::a#2 (byte) mul_results_compare::a#5 -Redundant Phi (byte*) BGCOL#13 (byte*) BGCOL#15 -Redundant Phi (byte*) char_cursor#68 (byte*) char_cursor#86 -Redundant Phi (byte*) line_cursor#26 (byte*) line_cursor#53 -Redundant Phi (byte*) char_cursor#23 (byte*) char_cursor#2 -Redundant Phi (byte*) char_cursor#24 (byte*) char_cursor#36 -Redundant Phi (byte*) char_cursor#25 (byte*) char_cursor#2 -Redundant Phi (byte*) char_cursor#26 (byte*) char_cursor#36 -Redundant Phi (byte*) char_cursor#28 (byte*) char_cursor#2 -Redundant Phi (byte*) line_cursor#20 (byte*) line_cursor#1 -Redundant Phi (byte*) char_cursor#29 (byte*) line_cursor#1 -Redundant Phi (byte*) char_cursor#30 (byte*) char_cursor#14 -Redundant Phi (byte*) line_cursor#10 (byte*) line_cursor#15 -Succesful SSA optimization Pass2RedundantPhiElimination -Redundant Phi (byte*) char_cursor#62 (byte*) char_cursor#2 -Redundant Phi (byte*) char_cursor#63 (byte*) char_cursor#2 -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#2) goto print_ln::@1 -Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(word/signed word~) print_cls::$0) goto print_cls::@1 -Simple Condition (boolean~) slow_multiply::$1 if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 -Simple Condition (boolean~) slow_multiply::$3 if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 -Simple Condition (boolean~) init_mul_tables::$4 if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 -Simple Condition (boolean~) init_mul_tables::$9 if((byte*) init_mul_tables::sqr1_lo#1!=(byte*~) init_mul_tables::$8) goto init_mul_tables::@1 -Simple Condition (boolean~) init_mul_tables::$14 if((byte) init_mul_tables::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 -Simple Condition (boolean~) init_mul_tables::$16 if((byte*) init_mul_tables::sqr2_lo#1!=(byte*~) init_mul_tables::$15) goto init_mul_tables::@3 -Simple Condition (boolean~) mul_tables_compare::$1 if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 -Simple Condition (boolean~) mul_tables_compare::$10 if((byte*) mul_tables_compare::kc_sqr#1<(byte*~) mul_tables_compare::$9) goto mul_tables_compare::@1 -Simple Condition (boolean~) mul_results_compare::$3 if((word) mul_results_compare::ms#0==(word) mul_results_compare::ma#0) goto mul_results_compare::@3 -Simple Condition (boolean~) mul_results_compare::$8 if((byte) mul_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@2 -Simple Condition (boolean~) mul_results_compare::$9 if((byte) mul_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification -Constant (const byte*) char_cursor#0 = ((byte*))1024 -Constant (const byte[]) print_byte::hextab#0 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' } -Constant (const byte*) print_cls::sc#0 = ((byte*))1024 -Constant (const word/signed word) print_cls::$0 = 1024+1000 -Constant (const byte*) BGCOL#0 = ((byte*))53281 -Constant (const word) slow_multiply::m#0 = 0 -Constant (const byte) slow_multiply::i#0 = 0 -Constant (const byte[512]) mul_sqr1_lo#0 = { fill( 512, 0) } -Constant (const byte[512]) mul_sqr1_hi#0 = { fill( 512, 0) } -Constant (const byte[512]) mul_sqr2_lo#0 = { fill( 512, 0) } -Constant (const byte[512]) mul_sqr2_hi#0 = { fill( 512, 0) } -Constant (const word) init_mul_tables::sqr#0 = 0 -Constant (const byte) init_mul_tables::x_2#0 = 0 -Constant (const byte) init_mul_tables::c#0 = 0 -Constant (const signed byte/signed word) init_mul_tables::$10 = -1 -Constant (const byte) init_mul_tables::dir#0 = 255 -Constant (const byte) init_mul_tables::dir#1 = 1 -Constant (const byte[512]) asm_mul_sqr1_lo#0 = { fill( 512, 0) } -Constant (const byte[512]) asm_mul_sqr1_hi#0 = { fill( 512, 0) } -Constant (const byte[512]) asm_mul_sqr2_lo#0 = { fill( 512, 0) } -Constant (const byte[512]) asm_mul_sqr2_hi#0 = { fill( 512, 0) } -Constant (const byte*) init_mul_tables_asm::mem#0 = ((byte*))255 -Constant (const byte*) asm_multiply::memA#0 = ((byte*))254 -Constant (const byte*) asm_multiply::memB#0 = ((byte*))255 -Constant (const word/signed word) mul_tables_compare::$8 = 512*4 -Constant (const string) print_str::str#1 = mul_tables_compare::str -Constant (const string) print_str::str#2 = mul_tables_compare::str1 -Constant (const string) print_str::str#3 = mul_tables_compare::str2 -Constant (const byte) mul_results_compare::a#0 = 0 -Constant (const byte) mul_results_compare::b#0 = 0 -Constant (const string) print_str::str#4 = mul_results_compare::str -Constant (const string) print_str::str#5 = mul_results_compare::str1 -Constant (const string) print_str::str#6 = mul_results_compare::str2 -Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte*) init_mul_tables::sqr1_hi#0 = mul_sqr1_hi#0+1 -Constant (const byte*) init_mul_tables::sqr1_lo#0 = mul_sqr1_lo#0+1 -Constant (const byte*) init_mul_tables::$8 = mul_sqr1_lo#0+512 -Constant (const byte) init_mul_tables::x_255#0 = ((byte))init_mul_tables::$10 -Constant (const byte[512]) init_mul_tables::sqr2_hi#0 = mul_sqr2_hi#0 -Constant (const byte[512]) init_mul_tables::sqr2_lo#0 = mul_sqr2_lo#0 -Constant (const byte*) init_mul_tables::$15 = mul_sqr2_lo#0+511 -Constant (const byte*) init_mul_tables::$17 = mul_sqr2_lo#0+511 -Constant (const byte*) init_mul_tables::$18 = mul_sqr1_lo#0+256 -Constant (const byte*) init_mul_tables::$19 = mul_sqr2_hi#0+511 -Constant (const byte*) init_mul_tables::$20 = mul_sqr1_hi#0+256 -Constant (const byte[512]) mul_tables_compare::asm_sqr#0 = asm_mul_sqr1_lo#0 -Constant (const byte[512]) mul_tables_compare::kc_sqr#0 = mul_sqr1_lo#0 -Constant (const byte*) mul_tables_compare::$9 = mul_sqr1_lo#0+mul_tables_compare::$8 -Succesful SSA optimization Pass2ConstantIdentification -Fixing word constructor with asm_multiply::$0 ← *(asm_multiply::memB#0) w= *(asm_multiply::memA#0) -Succesful SSA optimization Pass2FixWordConstructors -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) @6 -Culled Empty Block (label) main::@5 -Culled Empty Block (label) slow_multiply::@3 -Culled Empty Block (label) @8 -Culled Empty Block (label) init_mul_tables::@6 -Not culling empty block because it shares successor with its predecessor. (label) init_mul_tables::@7 -Culled Empty Block (label) @9 -Culled Empty Block (label) mul_tables_compare::@9 -Culled Empty Block (label) mul_tables_compare::@11 -Culled Empty Block (label) mul_results_compare::@13 -Culled Empty Block (label) mul_results_compare::@15 -Culled Empty Block (label) @14 -Succesful SSA optimization Pass2CullEmptyBlocks -Not culling empty block because it shares successor with its predecessor. (label) init_mul_tables::@7 -Not aliassing across scopes: char_cursor#71 char_cursor#11 -Not aliassing across scopes: line_cursor#22 line_cursor#53 -Not aliassing across scopes: print_word::w#4 print_word::w#2 -Not aliassing across scopes: print_byte::b#2 print_byte::b#0 -Not aliassing across scopes: char_cursor#64 char_cursor#2 -Not aliassing across scopes: print_char::ch#2 print_char::ch#0 -Not aliassing across scopes: char_cursor#41 char_cursor#64 -Not aliassing across scopes: char_cursor#20 line_cursor#1 -Not aliassing across scopes: line_cursor#17 line_cursor#1 -Not aliassing across scopes: char_cursor#86 char_cursor#20 -Not aliassing across scopes: line_cursor#53 line_cursor#17 -Not aliassing across scopes: slow_multiply::a#0 mul_results_compare::a#5 -Not aliassing across scopes: slow_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ms#0 slow_multiply::return#2 -Not aliassing across scopes: asm_multiply::a#0 mul_results_compare::a#5 -Not aliassing across scopes: asm_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: asm_multiply::return#2 asm_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ma#0 asm_multiply::return#2 -Not aliassing across scopes: print_word::w#2 mul_results_compare::ms#0 -Not aliassing across scopes: print_word::w#3 mul_results_compare::ma#0 -Not aliassing across scopes: char_cursor#27 char_cursor#11 -Alias (word) asm_multiply::return#0 = (word~) asm_multiply::$0 -Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: char_cursor#71 char_cursor#11 -Not aliassing across scopes: line_cursor#22 line_cursor#53 -Not aliassing across scopes: print_word::w#4 print_word::w#2 -Not aliassing across scopes: print_byte::b#2 print_byte::b#0 -Not aliassing across scopes: char_cursor#64 char_cursor#2 -Not aliassing across scopes: print_char::ch#2 print_char::ch#0 -Not aliassing across scopes: char_cursor#41 char_cursor#64 -Not aliassing across scopes: char_cursor#20 line_cursor#1 -Not aliassing across scopes: line_cursor#17 line_cursor#1 -Not aliassing across scopes: char_cursor#86 char_cursor#20 -Not aliassing across scopes: line_cursor#53 line_cursor#17 -Not aliassing across scopes: slow_multiply::a#0 mul_results_compare::a#5 -Not aliassing across scopes: slow_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ms#0 slow_multiply::return#2 -Not aliassing across scopes: asm_multiply::a#0 mul_results_compare::a#5 -Not aliassing across scopes: asm_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: asm_multiply::return#2 asm_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ma#0 asm_multiply::return#2 -Not aliassing across scopes: print_word::w#2 mul_results_compare::ms#0 -Not aliassing across scopes: print_word::w#3 mul_results_compare::ma#0 -Not aliassing across scopes: char_cursor#27 char_cursor#11 -Self Phi Eliminated (byte*) BGCOL#15 -Self Phi Eliminated (byte*) char_cursor#86 -Self Phi Eliminated (byte*) line_cursor#53 -Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (byte*) BGCOL#15 (const byte*) BGCOL#0 -Redundant Phi (byte*) char_cursor#86 (byte*) char_cursor#20 -Redundant Phi (byte*) line_cursor#53 (byte*) line_cursor#17 -Succesful SSA optimization Pass2RedundantPhiElimination -Not culling empty block because it shares successor with its predecessor. (label) init_mul_tables::@7 -Not aliassing across scopes: char_cursor#71 char_cursor#11 -Not aliassing across scopes: line_cursor#22 line_cursor#17 -Not aliassing across scopes: print_word::w#4 print_word::w#2 -Not aliassing across scopes: print_byte::b#2 print_byte::b#0 -Not aliassing across scopes: char_cursor#64 char_cursor#2 -Not aliassing across scopes: print_char::ch#2 print_char::ch#0 -Not aliassing across scopes: char_cursor#41 char_cursor#64 -Not aliassing across scopes: char_cursor#20 line_cursor#1 -Not aliassing across scopes: line_cursor#17 line_cursor#1 -Not aliassing across scopes: slow_multiply::a#0 mul_results_compare::a#5 -Not aliassing across scopes: slow_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ms#0 slow_multiply::return#2 -Not aliassing across scopes: asm_multiply::a#0 mul_results_compare::a#5 -Not aliassing across scopes: asm_multiply::b#0 mul_results_compare::b#2 -Not aliassing across scopes: asm_multiply::return#2 asm_multiply::return#0 -Not aliassing across scopes: mul_results_compare::ma#0 asm_multiply::return#2 -Not aliassing across scopes: print_word::w#2 mul_results_compare::ms#0 -Not aliassing across scopes: print_word::w#3 mul_results_compare::ma#0 -Not aliassing across scopes: char_cursor#27 char_cursor#11 -Not aliassing across scopes: line_cursor#19 line_cursor#17 -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 -Inlining constant with var siblings (const string) print_str::str#1 -Inlining constant with var siblings (const string) print_str::str#2 -Inlining constant with var siblings (const string) print_str::str#2 -Inlining constant with var siblings (const string) print_str::str#2 -Inlining constant with var siblings (const string) print_str::str#3 -Inlining constant with var siblings (const string) print_str::str#3 -Inlining constant with var siblings (const string) print_str::str#3 -Inlining constant with var siblings (const string) print_str::str#4 -Inlining constant with var siblings (const string) print_str::str#4 -Inlining constant with var siblings (const string) print_str::str#4 -Inlining constant with var siblings (const string) print_str::str#5 -Inlining constant with var siblings (const string) print_str::str#5 -Inlining constant with var siblings (const string) print_str::str#5 -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 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 word) slow_multiply::m#0 -Inlining constant with var siblings (const word) slow_multiply::m#0 -Inlining constant with var siblings (const byte) slow_multiply::i#0 -Inlining constant with var siblings (const byte) slow_multiply::i#0 -Inlining constant with var siblings (const word) init_mul_tables::sqr#0 -Inlining constant with var siblings (const word) init_mul_tables::sqr#0 -Inlining constant with var siblings (const word) init_mul_tables::sqr#0 -Inlining constant with var siblings (const word) init_mul_tables::sqr#0 -Inlining constant with var siblings (const byte) init_mul_tables::x_2#0 -Inlining constant with var siblings (const byte) init_mul_tables::x_2#0 -Inlining constant with var siblings (const byte) init_mul_tables::x_2#0 -Inlining constant with var siblings (const byte) init_mul_tables::c#0 -Inlining constant with var siblings (const byte) init_mul_tables::c#0 -Inlining constant with var siblings (const byte) init_mul_tables::dir#0 -Inlining constant with var siblings (const byte) init_mul_tables::dir#0 -Inlining constant with different constant siblings (const byte) init_mul_tables::dir#0 -Inlining constant with var siblings (const byte) init_mul_tables::dir#1 -Inlining constant with var siblings (const byte) init_mul_tables::dir#1 -Inlining constant with different constant siblings (const byte) init_mul_tables::dir#1 -Inlining constant with var siblings (const byte*) init_mul_tables::sqr1_hi#0 -Inlining constant with var siblings (const byte*) init_mul_tables::sqr1_hi#0 -Inlining constant with var siblings (const byte*) init_mul_tables::sqr1_lo#0 -Inlining constant with var siblings (const byte*) init_mul_tables::sqr1_lo#0 -Inlining constant with var siblings (const byte) init_mul_tables::x_255#0 -Inlining constant with var siblings (const byte) init_mul_tables::x_255#0 -Inlining constant with var siblings (const byte[512]) init_mul_tables::sqr2_hi#0 -Inlining constant with var siblings (const byte[512]) init_mul_tables::sqr2_hi#0 -Inlining constant with var siblings (const byte[512]) init_mul_tables::sqr2_lo#0 -Inlining constant with var siblings (const byte[512]) init_mul_tables::sqr2_lo#0 -Inlining constant with var siblings (const byte[512]) mul_tables_compare::asm_sqr#0 -Inlining constant with var siblings (const byte[512]) mul_tables_compare::asm_sqr#0 -Inlining constant with var siblings (const byte[512]) mul_tables_compare::kc_sqr#0 -Inlining constant with var siblings (const byte[512]) mul_tables_compare::kc_sqr#0 -Inlining constant with var siblings (const byte) mul_results_compare::a#0 -Inlining constant with var siblings (const byte) mul_results_compare::a#0 -Inlining constant with var siblings (const byte) mul_results_compare::b#0 -Inlining constant with var siblings (const byte) mul_results_compare::b#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 -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 -Inlining constant with var siblings (const byte*) char_cursor#0 -Inlining constant with var siblings (const byte*) char_cursor#0 -Constant inlined slow_multiply::m#0 = (byte/signed byte/word/signed word) 0 -Constant inlined print_cls::$0 = (word/signed word) 1024+(word/signed word) 1000 -Constant inlined init_mul_tables::x_2#0 = (byte/signed byte/word/signed word) 0 -Constant inlined slow_multiply::i#0 = (byte/signed byte/word/signed word) 0 -Constant inlined init_mul_tables::sqr1_hi#0 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 -Constant inlined init_mul_tables::$15 = (const byte[512]) mul_sqr2_lo#0+(word/signed word) 511 -Constant inlined init_mul_tables::dir#0 = (byte/word/signed word) 255 -Constant inlined init_mul_tables::sqr1_lo#0 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 -Constant inlined init_mul_tables::$17 = (const byte[512]) mul_sqr2_lo#0+(word/signed word) 511 -Constant inlined init_mul_tables::$18 = (const byte[512]) mul_sqr1_lo#0+(word/signed word) 256 -Constant inlined init_mul_tables::$19 = (const byte[512]) mul_sqr2_hi#0+(word/signed word) 511 -Constant inlined init_mul_tables::x_255#0 = ((byte))-(byte/signed byte/word/signed word) 1 -Constant inlined init_mul_tables::$8 = (const byte[512]) mul_sqr1_lo#0+(word/signed word) 512 -Constant inlined init_mul_tables::dir#1 = (byte/signed byte/word/signed word) 1 -Constant inlined mul_tables_compare::$9 = (const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4 -Constant inlined mul_tables_compare::$8 = (word/signed word) 512*(byte/signed byte/word/signed word) 4 -Constant inlined init_mul_tables::$10 = -(byte/signed byte/word/signed word) 1 -Constant inlined init_mul_tables::sqr#0 = (byte/signed byte/word/signed word) 0 -Constant inlined init_mul_tables::sqr2_hi#0 = (const byte[512]) mul_sqr2_hi#0 -Constant inlined init_mul_tables::sqr2_lo#0 = (const byte[512]) mul_sqr2_lo#0 -Constant inlined init_mul_tables::c#0 = (byte/signed byte/word/signed word) 0 -Constant inlined print_cls::sc#0 = ((byte*))(word/signed word) 1024 -Constant inlined mul_results_compare::b#0 = (byte/signed byte/word/signed word) 0 -Constant inlined mul_results_compare::a#0 = (byte/signed byte/word/signed word) 0 -Constant inlined print_str::str#4 = (const string) mul_results_compare::str -Constant inlined print_str::str#3 = (const string) mul_tables_compare::str2 -Constant inlined mul_tables_compare::kc_sqr#0 = (const byte[512]) mul_sqr1_lo#0 -Constant inlined print_str::str#2 = (const string) mul_tables_compare::str1 -Constant inlined char_cursor#0 = ((byte*))(word/signed word) 1024 -Constant inlined init_mul_tables::$20 = (const byte[512]) mul_sqr1_hi#0+(word/signed word) 256 -Constant inlined print_str::str#1 = (const string) mul_tables_compare::str -Constant inlined print_str::str#6 = (const string) mul_results_compare::str2 -Constant inlined print_str::str#5 = (const string) mul_results_compare::str1 -Constant inlined mul_tables_compare::asm_sqr#0 = (const byte[512]) asm_mul_sqr1_lo#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@3 main::@4 main::@return mul_results_compare mul_results_compare::@1 mul_results_compare::@2 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare::@4 mul_results_compare::@10 mul_results_compare::@11 mul_results_compare::@12 mul_results_compare::@return mul_results_compare::@3 mul_results_compare::@6 mul_results_compare::@7 mul_results_compare::@14 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return asm_multiply asm_multiply::@return slow_multiply slow_multiply::@2 slow_multiply::@1 slow_multiply::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@3 mul_tables_compare::@6 mul_tables_compare::@7 mul_tables_compare::@8 mul_tables_compare::@return mul_tables_compare::@2 mul_tables_compare::@5 mul_tables_compare::@10 init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@5 init_mul_tables::@2 init_mul_tables::@3 init_mul_tables::@7 init_mul_tables::@4 init_mul_tables::@8 init_mul_tables::@return print_cls print_cls::@1 print_cls::@return -Added new block during phi lifting mul_results_compare::@16(between mul_results_compare::@6 and mul_results_compare::@1) -Added new block during phi lifting mul_results_compare::@17(between mul_results_compare::@3 and mul_results_compare::@2) -Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) -Added new block during phi lifting slow_multiply::@6(between slow_multiply::@2 and slow_multiply::@2) -Added new block during phi lifting slow_multiply::@7(between slow_multiply::@2 and slow_multiply::@1) -Added new block during phi lifting mul_tables_compare::@12(between mul_tables_compare::@2 and mul_tables_compare::@1) -Added new block during phi lifting init_mul_tables::@9(between init_mul_tables::@2 and init_mul_tables::@1) -Added new block during phi lifting init_mul_tables::@10(between init_mul_tables::@1 and init_mul_tables::@2) -Added new block during phi lifting init_mul_tables::@11(between init_mul_tables::@4 and init_mul_tables::@3) -Added new block during phi lifting init_mul_tables::@12(between init_mul_tables::@3 and init_mul_tables::@4) -Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@3 main::@4 main::@return mul_results_compare mul_results_compare::@1 mul_results_compare::@2 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare::@4 mul_results_compare::@10 mul_results_compare::@11 mul_results_compare::@12 mul_results_compare::@return mul_results_compare::@3 mul_results_compare::@6 mul_results_compare::@7 mul_results_compare::@14 mul_results_compare::@16 mul_results_compare::@17 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return asm_multiply asm_multiply::@return slow_multiply slow_multiply::@2 slow_multiply::@7 slow_multiply::@1 slow_multiply::@return slow_multiply::@6 mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@3 mul_tables_compare::@6 mul_tables_compare::@7 mul_tables_compare::@8 mul_tables_compare::@return mul_tables_compare::@2 mul_tables_compare::@5 mul_tables_compare::@10 mul_tables_compare::@12 init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@5 init_mul_tables::@2 init_mul_tables::@3 init_mul_tables::@7 init_mul_tables::@4 init_mul_tables::@8 init_mul_tables::@return init_mul_tables::@11 init_mul_tables::@12 init_mul_tables::@9 init_mul_tables::@10 print_cls print_cls::@1 print_cls::@return print_cls::@3 -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @13 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main::@1 -Adding NOP phi() at start of main::@2 -Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@4 -Adding NOP phi() at start of mul_results_compare -Adding NOP phi() at start of mul_tables_compare -Adding NOP phi() at start of mul_tables_compare::@5 -Adding NOP phi() at start of mul_tables_compare::@10 -Adding NOP phi() at start of init_mul_tables -Adding NOP phi() at start of init_mul_tables::@7 -Adding NOP phi() at start of print_cls -CALL GRAPH -Calls in [] to main:2 -Calls in [main] to print_cls:5 init_mul_tables:7 init_mul_tables_asm:9 mul_tables_compare:11 mul_results_compare:13 -Calls in [mul_results_compare] to slow_multiply:20 asm_multiply:25 print_str:31 print_word:34 print_str:36 print_word:39 print_str:49 print_ln:51 -Calls in [print_word] to print_byte:78 print_byte:82 -Calls in [print_byte] to print_char:89 print_char:94 -Calls in [mul_tables_compare] to print_str:119 print_word:122 print_str:124 print_word:127 print_str:135 print_ln:137 - -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Created 35 initial phi equivalence classes -Coalesced [30] char_cursor#91 ← char_cursor#20 -Coalesced [33] print_word::w#6 ← print_word::w#2 -Coalesced [35] char_cursor#90 ← char_cursor#11 -Coalesced [38] print_word::w#7 ← print_word::w#3 -Coalesced [40] char_cursor#88 ← char_cursor#11 -Coalesced [41] line_cursor#55 ← line_cursor#17 -Coalesced (already) [48] char_cursor#92 ← char_cursor#20 -Coalesced [50] line_cursor#57 ← line_cursor#17 -Not coalescing [52] char_cursor#89 ← line_cursor#1 -Coalesced [53] line_cursor#56 ← line_cursor#1 -Coalesced [54] mul_results_compare::a#8 ← mul_results_compare::a#1 -Coalesced [55] mul_results_compare::b#6 ← mul_results_compare::b#1 -Coalesced [57] line_cursor#58 ← line_cursor#22 -Coalesced (already) [62] line_cursor#59 ← line_cursor#1 -Coalesced [64] print_str::str#10 ← print_str::str#9 -Coalesced [65] char_cursor#94 ← char_cursor#71 -Coalesced [72] print_str::str#11 ← print_str::str#0 -Coalesced [73] char_cursor#95 ← char_cursor#1 -Coalesced [76] print_byte::b#4 ← print_byte::b#0 -Coalesced [77] char_cursor#96 ← char_cursor#2 -Coalesced [80] print_byte::b#5 ← print_byte::b#1 -Coalesced (already) [81] char_cursor#97 ← char_cursor#11 -Coalesced [87] print_char::ch#3 ← print_char::ch#0 -Coalesced [88] char_cursor#98 ← char_cursor#64 -Coalesced [92] print_char::ch#4 ← print_char::ch#1 -Coalesced (already) [93] char_cursor#99 ← char_cursor#11 -Coalesced [110] slow_multiply::return#5 ← slow_multiply::m#1 -Coalesced [113] slow_multiply::m#5 ← slow_multiply::m#1 -Coalesced [114] slow_multiply::i#3 ← slow_multiply::i#1 -Coalesced [121] print_word::w#8 ← print_word::w#0 -Coalesced (already) [123] char_cursor#93 ← char_cursor#11 -Coalesced [126] print_word::w#9 ← print_word::w#1 -Coalesced (already) [128] char_cursor#101 ← char_cursor#11 -Not coalescing [138] char_cursor#100 ← line_cursor#1 -Coalesced (already) [139] line_cursor#60 ← line_cursor#1 -Coalesced [140] mul_tables_compare::kc_sqr#8 ← mul_tables_compare::kc_sqr#1 -Coalesced [141] mul_tables_compare::asm_sqr#6 ← mul_tables_compare::asm_sqr#1 -Coalesced [155] init_mul_tables::sqr#8 ← init_mul_tables::sqr#2 -Coalesced [156] init_mul_tables::x_2#7 ← init_mul_tables::x_2#1 -Coalesced [179] init_mul_tables::x_255#5 ← init_mul_tables::x_255#1 -Coalesced [180] init_mul_tables::sqr2_lo#5 ← init_mul_tables::sqr2_lo#1 -Coalesced [181] init_mul_tables::sqr2_hi#5 ← init_mul_tables::sqr2_hi#1 -Coalesced [182] init_mul_tables::dir#4 ← init_mul_tables::dir#3 -Coalesced (already) [183] init_mul_tables::dir#5 ← init_mul_tables::dir#2 -Coalesced [184] init_mul_tables::c#5 ← init_mul_tables::c#1 -Coalesced [185] init_mul_tables::sqr#6 ← init_mul_tables::sqr#1 -Coalesced [186] init_mul_tables::sqr1_lo#5 ← init_mul_tables::sqr1_lo#1 -Coalesced [187] init_mul_tables::sqr1_hi#5 ← init_mul_tables::sqr1_hi#1 -Coalesced [188] init_mul_tables::x_2#5 ← init_mul_tables::x_2#2 -Coalesced [189] init_mul_tables::sqr#7 ← init_mul_tables::sqr#4 -Coalesced (already) [190] init_mul_tables::x_2#6 ← init_mul_tables::x_2#3 -Coalesced [197] print_cls::sc#3 ← print_cls::sc#1 -Coalesced down to 22 phi equivalence classes -Culled Empty Block (label) mul_results_compare::@16 -Culled Empty Block (label) mul_results_compare::@17 -Culled Empty Block (label) print_ln::@3 -Culled Empty Block (label) slow_multiply::@7 -Culled Empty Block (label) slow_multiply::@6 -Culled Empty Block (label) mul_tables_compare::@12 -Culled Empty Block (label) init_mul_tables::@7 -Culled Empty Block (label) init_mul_tables::@11 -Not culling empty block because it shares successor with its predecessor. (label) init_mul_tables::@12 -Culled Empty Block (label) init_mul_tables::@9 -Culled Empty Block (label) init_mul_tables::@10 -Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@3 main::@4 main::@return mul_results_compare mul_results_compare::@1 mul_results_compare::@2 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare::@4 mul_results_compare::@10 mul_results_compare::@11 mul_results_compare::@12 mul_results_compare::@return mul_results_compare::@3 mul_results_compare::@6 mul_results_compare::@7 mul_results_compare::@14 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return asm_multiply asm_multiply::@return slow_multiply slow_multiply::@2 slow_multiply::@1 slow_multiply::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@3 mul_tables_compare::@6 mul_tables_compare::@7 mul_tables_compare::@8 mul_tables_compare::@return mul_tables_compare::@2 mul_tables_compare::@5 mul_tables_compare::@10 init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@5 init_mul_tables::@2 init_mul_tables::@3 init_mul_tables::@4 init_mul_tables::@8 init_mul_tables::@return init_mul_tables::@12 print_cls print_cls::@1 print_cls::@return -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @13 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main::@1 -Adding NOP phi() at start of main::@2 -Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@4 -Adding NOP phi() at start of mul_results_compare -Adding NOP phi() at start of mul_results_compare::@11 -Adding NOP phi() at start of mul_results_compare::@7 -Adding NOP phi() at start of mul_results_compare::@14 -Adding NOP phi() at start of mul_tables_compare -Adding NOP phi() at start of mul_tables_compare::@7 -Adding NOP phi() at start of mul_tables_compare::@5 -Adding NOP phi() at start of mul_tables_compare::@10 -Adding NOP phi() at start of init_mul_tables -Adding NOP phi() at start of init_mul_tables::@12 -Adding NOP phi() at start of print_cls -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... - -FINAL CONTROL FLOW GRAPH -@begin: scope:[] from - [0] phi() [ ] ( ) - to:@13 -@13: scope:[] from @begin - [1] phi() [ ] ( ) - [2] call main param-assignment [ ] ( ) - to:@end -@end: scope:[] from @13 - [3] phi() [ ] ( ) -main: scope:[main] from @13 - [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) - [5] call print_cls param-assignment [ ] ( main:2 [ ] ) - to:main::@1 -main::@1: scope:[main] from main - [6] phi() [ ] ( main:2 [ ] ) - [7] call init_mul_tables param-assignment [ ] ( main:2 [ ] ) - to:main::@2 -main::@2: scope:[main] from main::@1 - [8] phi() [ ] ( main:2 [ ] ) - [9] call init_mul_tables_asm param-assignment [ ] ( main:2 [ ] ) - to:main::@3 -main::@3: scope:[main] from main::@2 - [10] phi() [ ] ( main:2 [ ] ) - [11] call mul_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) - to:main::@4 -main::@4: scope:[main] from main::@3 - [12] phi() [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) - [13] call mul_results_compare param-assignment [ ] ( main:2 [ ] ) - to:main::@return -main::@return: scope:[main] from main::@4 - [14] return [ ] ( main:2 [ ] ) - to:@return -mul_results_compare: scope:[mul_results_compare] from main::@4 - [15] phi() [ line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ line_cursor#17 char_cursor#20 ] ) - to:mul_results_compare::@1 -mul_results_compare::@1: scope:[mul_results_compare] from mul_results_compare mul_results_compare::@6 - [16] (byte) mul_results_compare::a#5 ← phi( mul_results_compare/(byte/signed byte/word/signed word) 0 mul_results_compare::@6/(byte) mul_results_compare::a#1 ) [ mul_results_compare::a#5 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 line_cursor#17 char_cursor#20 ] ) - to:mul_results_compare::@2 -mul_results_compare::@2: scope:[mul_results_compare] from mul_results_compare::@1 mul_results_compare::@3 - [17] (byte) mul_results_compare::b#2 ← phi( mul_results_compare::@1/(byte/signed byte/word/signed word) 0 mul_results_compare::@3/(byte) mul_results_compare::b#1 ) [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 ] ) - [18] (byte) slow_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) - [19] (byte) slow_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) - [20] call slow_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) - to:mul_results_compare::@8 -mul_results_compare::@8: scope:[mul_results_compare] from mul_results_compare::@2 - [22] (word) mul_results_compare::ms#0 ← (word) slow_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) - [23] (byte) asm_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ) - [24] (byte) asm_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ) - [25] call asm_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - [26] (word) asm_multiply::return#2 ← (word) asm_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ) - to:mul_results_compare::@9 -mul_results_compare::@9: scope:[mul_results_compare] from mul_results_compare::@8 - [27] (word) mul_results_compare::ma#0 ← (word) asm_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) - [28] if((word) mul_results_compare::ms#0==(word) mul_results_compare::ma#0) goto mul_results_compare::@3 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) - to:mul_results_compare::@4 -mul_results_compare::@4: scope:[mul_results_compare] from mul_results_compare::@9 - [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) - [30] call print_str param-assignment [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - to:mul_results_compare::@10 -mul_results_compare::@10: scope:[mul_results_compare] from mul_results_compare::@4 - [31] (word) print_word::w#2 ← (word) mul_results_compare::ms#0 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) - [32] call print_word param-assignment [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) - to:mul_results_compare::@11 -mul_results_compare::@11: scope:[mul_results_compare] from mul_results_compare::@10 - [33] phi() [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) - [34] call print_str param-assignment [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - to:mul_results_compare::@12 -mul_results_compare::@12: scope:[mul_results_compare] from mul_results_compare::@11 - [35] (word) print_word::w#3 ← (word) mul_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) - [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) - to:mul_results_compare::@return -mul_results_compare::@return: scope:[mul_results_compare] from mul_results_compare::@12 mul_results_compare::@14 - [37] (byte*) line_cursor#19 ← phi( mul_results_compare::@12/(byte*) line_cursor#17 mul_results_compare::@14/(byte*) line_cursor#1 ) [ ] ( main:2::mul_results_compare:13 [ ] ) - [37] (byte*) char_cursor#27 ← phi( mul_results_compare::@12/(byte*) char_cursor#11 mul_results_compare::@14/(byte*~) char_cursor#89 ) [ ] ( main:2::mul_results_compare:13 [ ] ) - [38] return [ ] ( main:2::mul_results_compare:13 [ ] ) - to:@return -mul_results_compare::@3: scope:[mul_results_compare] from mul_results_compare::@9 - [39] (byte) mul_results_compare::b#1 ← ++ (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) - [40] if((byte) mul_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) - to:mul_results_compare::@6 -mul_results_compare::@6: scope:[mul_results_compare] from mul_results_compare::@3 - [41] (byte) mul_results_compare::a#1 ← ++ (byte) mul_results_compare::a#5 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) - [42] if((byte) mul_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@1 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) - to:mul_results_compare::@7 -mul_results_compare::@7: scope:[mul_results_compare] from mul_results_compare::@6 - [43] phi() [ line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ line_cursor#17 char_cursor#20 ] ) - [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) - to:mul_results_compare::@14 -mul_results_compare::@14: scope:[mul_results_compare] from mul_results_compare::@7 - [45] phi() [ line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) - [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_results_compare:13 [ line_cursor#1 ] ) - [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::mul_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) - to:mul_results_compare::@return -print_ln: scope:[print_ln] from mul_results_compare::@14 mul_tables_compare::@10 - [48] (byte*) line_cursor#22 ← phi( mul_results_compare::@14/(byte*) line_cursor#17 mul_tables_compare::@10/((byte*))(word/signed word) 1024 ) [ line_cursor#22 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#22 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#22 char_cursor#2 ] ) - to:print_ln::@1 -print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [49] (byte*) line_cursor#11 ← phi( print_ln/(byte*) line_cursor#22 print_ln::@1/(byte*) line_cursor#1 ) [ line_cursor#11 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#11 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#11 char_cursor#2 ] ) - [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) - [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) - to:print_ln::@return -print_ln::@return: scope:[print_ln] from print_ln::@1 - [52] return [ line_cursor#1 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) - to:@return -print_str: scope:[print_str] from mul_results_compare::@11 mul_results_compare::@4 mul_results_compare::@7 mul_tables_compare::@3 mul_tables_compare::@5 mul_tables_compare::@7 - [53] (byte*) char_cursor#71 ← phi( mul_results_compare::@11/(byte*) char_cursor#11 mul_results_compare::@4/(byte*) char_cursor#20 mul_results_compare::@7/(byte*) char_cursor#20 mul_tables_compare::@3/((byte*))(word/signed word) 1024 mul_tables_compare::@5/((byte*))(word/signed word) 1024 mul_tables_compare::@7/(byte*) char_cursor#11 ) [ print_str::str#9 char_cursor#71 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#9 char_cursor#71 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#9 char_cursor#71 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#9 char_cursor#71 ] ) - [53] (byte*) print_str::str#9 ← phi( mul_results_compare::@11/(const string) mul_results_compare::str1 mul_results_compare::@4/(const string) mul_results_compare::str mul_results_compare::@7/(const string) mul_results_compare::str2 mul_tables_compare::@3/(const string) mul_tables_compare::str mul_tables_compare::@5/(const string) mul_tables_compare::str2 mul_tables_compare::@7/(const string) mul_tables_compare::str1 ) [ print_str::str#9 char_cursor#71 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#9 char_cursor#71 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#9 char_cursor#71 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#9 char_cursor#71 ] ) - to:print_str::@1 -print_str::@1: scope:[print_str] from print_str print_str::@2 - [54] (byte*) char_cursor#2 ← phi( print_str/(byte*) char_cursor#71 print_str::@2/(byte*) char_cursor#1 ) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) - [54] (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 ) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) - [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) - to:print_str::@return -print_str::@return: scope:[print_str] from print_str::@1 - [56] return [ char_cursor#2 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 ] ) - to:@return -print_str::@2: scope:[print_str] from print_str::@1 - [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) - [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) - [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) - to:print_str::@1 -print_word: scope:[print_word] from mul_results_compare::@10 mul_results_compare::@12 mul_tables_compare::@6 mul_tables_compare::@8 - [60] (word) print_word::w#4 ← phi( mul_results_compare::@10/(word) print_word::w#2 mul_results_compare::@12/(word) print_word::w#3 mul_tables_compare::@6/(word) print_word::w#0 mul_tables_compare::@8/(word) print_word::w#1 ) [ char_cursor#2 print_word::w#4 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 ] ) - [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) - [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) - to:print_word::@1 -print_word::@1: scope:[print_word] from print_word - [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) - [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - to:print_word::@return -print_word::@return: scope:[print_word] from print_word::@1 - [65] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - to:@return -print_byte: scope:[print_byte] from print_word print_word::@1 - [66] (byte*) char_cursor#64 ← phi( print_word/(byte*) char_cursor#2 print_word::@1/(byte*) char_cursor#11 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) - [66] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) - [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) - [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) - [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) - to:print_byte::@1 -print_byte::@1: scope:[print_byte] from print_byte - [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) - [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) - [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@1 - [73] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 - [74] (byte*) char_cursor#41 ← phi( print_byte/(byte*) char_cursor#64 print_byte::@1/(byte*) char_cursor#11 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) - [74] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) - [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) - [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - [77] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) - to:@return -asm_multiply: scope:[asm_multiply] from mul_results_compare::@8 - [78] *((const byte*) asm_multiply::memA#0) ← (byte) asm_multiply::a#0 [ asm_multiply::b#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::b#0 ] ) - [79] *((const byte*) asm_multiply::memB#0) ← (byte) asm_multiply::b#0 [ ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) - asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - [81] (word) asm_multiply::return#0 ← *((const byte*) asm_multiply::memB#0) w= *((const byte*) asm_multiply::memA#0) [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) - to:asm_multiply::@return -asm_multiply::@return: scope:[asm_multiply] from asm_multiply - [82] return [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) - to:@return -slow_multiply: scope:[slow_multiply] from mul_results_compare::@2 - [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) - to:slow_multiply::@2 -slow_multiply::@2: scope:[slow_multiply] from slow_multiply slow_multiply::@2 - [84] (byte) slow_multiply::i#2 ← phi( slow_multiply::@2/(byte) slow_multiply::i#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) - [84] (word) slow_multiply::m#3 ← phi( slow_multiply::@2/(word) slow_multiply::m#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) - [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) - [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) - [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) - to:slow_multiply::@1 -slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@2 - [88] (word) slow_multiply::return#0 ← phi( slow_multiply/(byte/signed byte/word/signed word) 0 slow_multiply::@2/(word) slow_multiply::m#1 ) [ slow_multiply::return#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) - to:slow_multiply::@return -slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 - [89] return [ slow_multiply::return#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) - to:@return -mul_tables_compare: scope:[mul_tables_compare] from main::@3 - [90] phi() [ ] ( main:2::mul_tables_compare:11 [ ] ) - to:mul_tables_compare::@1 -mul_tables_compare::@1: scope:[mul_tables_compare] from mul_tables_compare mul_tables_compare::@2 - [91] (byte*) mul_tables_compare::asm_sqr#2 ← phi( mul_tables_compare/(const byte[512]) asm_mul_sqr1_lo#0 mul_tables_compare::@2/(byte*) mul_tables_compare::asm_sqr#1 ) [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - [91] (byte*) mul_tables_compare::kc_sqr#2 ← phi( mul_tables_compare/(const byte[512]) mul_sqr1_lo#0 mul_tables_compare::@2/(byte*) mul_tables_compare::kc_sqr#1 ) [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - [92] if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - to:mul_tables_compare::@3 -mul_tables_compare::@3: scope:[mul_tables_compare] from mul_tables_compare::@1 - [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - [94] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - to:mul_tables_compare::@6 -mul_tables_compare::@6: scope:[mul_tables_compare] from mul_tables_compare::@3 - [95] (word) print_word::w#0 ← ((word)) (byte*) mul_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ) - [96] call print_word param-assignment [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ) - to:mul_tables_compare::@7 -mul_tables_compare::@7: scope:[mul_tables_compare] from mul_tables_compare::@6 - [97] phi() [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ) - [98] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ) - to:mul_tables_compare::@8 -mul_tables_compare::@8: scope:[mul_tables_compare] from mul_tables_compare::@7 - [99] (word) print_word::w#1 ← ((word)) (byte*) mul_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) - [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 ] ) - to:mul_tables_compare::@return -mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare::@10 mul_tables_compare::@8 - [101] (byte*) line_cursor#17 ← phi( mul_tables_compare::@10/(byte*) line_cursor#1 mul_tables_compare::@8/((byte*))(word/signed word) 1024 ) [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - [101] (byte*) char_cursor#20 ← phi( mul_tables_compare::@10/(byte*~) char_cursor#100 mul_tables_compare::@8/(byte*) char_cursor#11 ) [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - to:@return -mul_tables_compare::@2: scope:[mul_tables_compare] from mul_tables_compare::@1 - [103] (byte*) mul_tables_compare::asm_sqr#1 ← ++ (byte*) mul_tables_compare::asm_sqr#2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ) - [104] (byte*) mul_tables_compare::kc_sqr#1 ← ++ (byte*) mul_tables_compare::kc_sqr#2 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) - [105] if((byte*) mul_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto mul_tables_compare::@1 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) - to:mul_tables_compare::@5 -mul_tables_compare::@5: scope:[mul_tables_compare] from mul_tables_compare::@2 - [106] phi() [ ] ( main:2::mul_tables_compare:11 [ ] ) - [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 ] ) - to:mul_tables_compare::@10 -mul_tables_compare::@10: scope:[mul_tables_compare] from mul_tables_compare::@5 - [108] phi() [ char_cursor#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 ] ) - [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 ] ) - [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) - to:mul_tables_compare::@return -init_mul_tables_asm: scope:[init_mul_tables_asm] from main::@2 - asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - [112] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - [113] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - [114] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - [115] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - to:init_mul_tables_asm::@return -init_mul_tables_asm::@return: scope:[init_mul_tables_asm] from init_mul_tables_asm - [116] return [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - to:@return -init_mul_tables: scope:[init_mul_tables] from main::@1 - [117] phi() [ ] ( main:2::init_mul_tables:7 [ ] ) - to:init_mul_tables::@1 -init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 - [118] (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::x_2#2 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (byte*) init_mul_tables::sqr1_hi#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr1_hi#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (byte*) init_mul_tables::sqr1_lo#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr1_lo#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [118] (byte) init_mul_tables::c#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::c#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 ] ) - [119] (byte) init_mul_tables::c#1 ← ++ (byte) init_mul_tables::c#2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) - [120] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ) - [121] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) - to:init_mul_tables::@5 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - [122] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ) - [123] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) - to:init_mul_tables::@2 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - [124] (byte) init_mul_tables::x_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#3 init_mul_tables::@5/(byte) init_mul_tables::x_2#1 ) [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [124] (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#4 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [125] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) - [126] *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [127] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) - [128] *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [129] (byte*) init_mul_tables::sqr1_hi#1 ← ++ (byte*) init_mul_tables::sqr1_hi#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) - [130] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) - [131] (byte*) init_mul_tables::sqr1_lo#1 ← ++ (byte*) init_mul_tables::sqr1_lo#2 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) - [132] if((byte*) init_mul_tables::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@4 - [133] (byte) init_mul_tables::dir#2 ← phi( init_mul_tables::@4/(byte) init_mul_tables::dir#3 init_mul_tables::@2/(byte/word/signed word) 255 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [133] (byte*) init_mul_tables::sqr2_hi#2 ← phi( init_mul_tables::@4/(byte*) init_mul_tables::sqr2_hi#1 init_mul_tables::@2/(const byte[512]) mul_sqr2_hi#0 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [133] (byte*) init_mul_tables::sqr2_lo#2 ← phi( init_mul_tables::@4/(byte*) init_mul_tables::sqr2_lo#1 init_mul_tables::@2/(const byte[512]) mul_sqr2_lo#0 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [133] (byte) init_mul_tables::x_255#2 ← phi( init_mul_tables::@4/(byte) init_mul_tables::x_255#1 init_mul_tables::@2/((byte))-(byte/signed byte/word/signed word) 1 ) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [134] *((byte*) init_mul_tables::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [135] *((byte*) init_mul_tables::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) - [136] (byte*) init_mul_tables::sqr2_hi#1 ← ++ (byte*) init_mul_tables::sqr2_hi#2 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ) - [137] (byte) init_mul_tables::x_255#1 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) - [138] if((byte) init_mul_tables::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@12 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) - to:init_mul_tables::@4 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@12 init_mul_tables::@3 - [139] (byte) init_mul_tables::dir#3 ← phi( init_mul_tables::@12/(byte) init_mul_tables::dir#2 init_mul_tables::@3/(byte/signed byte/word/signed word) 1 ) [ init_mul_tables::sqr2_lo#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) - [140] (byte*) init_mul_tables::sqr2_lo#1 ← ++ (byte*) init_mul_tables::sqr2_lo#2 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) - [141] if((byte*) init_mul_tables::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_mul_tables::@3 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) - to:init_mul_tables::@8 -init_mul_tables::@8: scope:[init_mul_tables] from init_mul_tables::@4 - [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) - [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) - to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@8 - [144] return [ ] ( main:2::init_mul_tables:7 [ ] ) - to:@return -init_mul_tables::@12: scope:[init_mul_tables] from init_mul_tables::@3 - [145] phi() [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) - to:init_mul_tables::@4 -print_cls: scope:[print_cls] from main - [146] phi() [ ] ( main:2::print_cls:5 [ ] ) - to:print_cls::@1 -print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - [147] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) - [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) - [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) - [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@1 - [151] return [ ] ( main:2::print_cls:5 [ ] ) - to:@return - -DOMINATORS -@begin dominated by @begin -@13 dominated by @begin @13 -@end dominated by @end @begin @13 -main dominated by main @begin @13 -main::@1 dominated by main main::@1 @begin @13 -main::@2 dominated by main main::@1 main::@2 @begin @13 -main::@3 dominated by main main::@1 main::@2 main::@3 @begin @13 -main::@4 dominated by main main::@1 main::@2 main::@3 main::@4 @begin @13 -main::@return dominated by main main::@1 main::@2 main::@3 main::@4 @begin main::@return @13 -mul_results_compare dominated by main main::@1 main::@2 main::@3 main::@4 @begin mul_results_compare @13 -mul_results_compare::@1 dominated by main main::@1 main::@2 main::@3 main::@4 @begin mul_results_compare::@1 mul_results_compare @13 -mul_results_compare::@2 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare @13 -mul_results_compare::@8 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@8 mul_results_compare @13 -mul_results_compare::@9 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@4 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@4 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@10 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@10 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@4 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@11 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@11 mul_results_compare::@10 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@4 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@12 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@12 mul_results_compare::@11 mul_results_compare::@10 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@4 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@return dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 mul_results_compare::@return -mul_results_compare::@3 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@3 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@6 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@3 mul_results_compare::@6 mul_results_compare::@8 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@7 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@3 mul_results_compare::@6 mul_results_compare::@8 mul_results_compare::@7 mul_results_compare::@9 mul_results_compare @13 -mul_results_compare::@14 dominated by main main::@1 main::@2 mul_results_compare::@14 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@3 mul_results_compare::@6 mul_results_compare::@8 mul_results_compare::@7 mul_results_compare::@9 mul_results_compare @13 -print_ln dominated by main main::@1 main::@2 main::@3 @begin print_ln @13 -print_ln::@1 dominated by print_ln::@1 main main::@1 main::@2 main::@3 @begin print_ln @13 -print_ln::@return dominated by print_ln::@1 main print_ln::@return main::@1 main::@2 main::@3 @begin print_ln @13 -print_str dominated by main main::@1 main::@2 main::@3 @begin @13 print_str -print_str::@1 dominated by main main::@1 main::@2 main::@3 @begin print_str::@1 @13 print_str -print_str::@return dominated by main main::@1 main::@2 main::@3 @begin print_str::@return print_str::@1 @13 print_str -print_str::@2 dominated by main main::@1 main::@2 main::@3 @begin print_str::@1 print_str::@2 @13 print_str -print_word dominated by main print_word main::@1 main::@2 main::@3 @begin @13 -print_word::@1 dominated by main print_word main::@1 main::@2 main::@3 @begin print_word::@1 @13 -print_word::@return dominated by main print_word main::@1 main::@2 main::@3 @begin print_word::@return print_word::@1 @13 -print_byte dominated by main print_word main::@1 main::@2 main::@3 @begin @13 print_byte -print_byte::@1 dominated by main print_word main::@1 main::@2 main::@3 @begin print_byte::@1 @13 print_byte -print_byte::@return dominated by main print_word main::@1 main::@2 main::@3 @begin print_byte::@return print_byte::@1 @13 print_byte -print_char dominated by main print_word print_char main::@1 main::@2 main::@3 @begin @13 print_byte -print_char::@return dominated by main print_word print_char main::@1 main::@2 main::@3 print_char::@return @begin @13 print_byte -asm_multiply dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 mul_results_compare::@8 asm_multiply mul_results_compare @13 -asm_multiply::@return dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 asm_multiply::@return mul_results_compare::@8 asm_multiply mul_results_compare @13 -slow_multiply dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 slow_multiply mul_results_compare @13 -slow_multiply::@2 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 slow_multiply::@2 slow_multiply mul_results_compare @13 -slow_multiply::@1 dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 slow_multiply::@1 slow_multiply mul_results_compare @13 -slow_multiply::@return dominated by main main::@1 main::@2 main::@3 main::@4 mul_results_compare::@2 @begin mul_results_compare::@1 slow_multiply::@1 slow_multiply mul_results_compare @13 slow_multiply::@return -mul_tables_compare dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 -mul_tables_compare::@1 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@1 -mul_tables_compare::@3 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@1 mul_tables_compare::@3 -mul_tables_compare::@6 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@1 mul_tables_compare::@3 mul_tables_compare::@6 -mul_tables_compare::@7 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@1 mul_tables_compare::@3 mul_tables_compare::@7 mul_tables_compare::@6 -mul_tables_compare::@8 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@1 mul_tables_compare::@3 mul_tables_compare::@7 mul_tables_compare::@6 mul_tables_compare::@8 -mul_tables_compare::@return dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@return mul_tables_compare::@1 -mul_tables_compare::@2 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@1 mul_tables_compare::@2 -mul_tables_compare::@5 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare @13 mul_tables_compare::@1 mul_tables_compare::@2 mul_tables_compare::@5 -mul_tables_compare::@10 dominated by main main::@1 main::@2 main::@3 @begin mul_tables_compare mul_tables_compare::@10 @13 mul_tables_compare::@1 mul_tables_compare::@2 mul_tables_compare::@5 -init_mul_tables_asm dominated by main main::@1 main::@2 @begin init_mul_tables_asm @13 -init_mul_tables_asm::@return dominated by main init_mul_tables_asm::@return main::@1 main::@2 @begin init_mul_tables_asm @13 -init_mul_tables dominated by main init_mul_tables main::@1 @begin @13 -init_mul_tables::@1 dominated by main init_mul_tables main::@1 @begin init_mul_tables::@1 @13 -init_mul_tables::@5 dominated by main init_mul_tables main::@1 @begin init_mul_tables::@5 init_mul_tables::@1 @13 -init_mul_tables::@2 dominated by main init_mul_tables main::@1 @begin init_mul_tables::@2 init_mul_tables::@1 @13 -init_mul_tables::@3 dominated by main init_mul_tables main::@1 @begin init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 @13 -init_mul_tables::@4 dominated by main init_mul_tables main::@1 @begin init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@4 init_mul_tables::@3 @13 -init_mul_tables::@8 dominated by main init_mul_tables main::@1 @begin init_mul_tables::@8 init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@4 init_mul_tables::@3 @13 -init_mul_tables::@return dominated by main init_mul_tables main::@1 init_mul_tables::@return @begin init_mul_tables::@8 init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@4 init_mul_tables::@3 @13 -init_mul_tables::@12 dominated by main init_mul_tables main::@1 @begin init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 init_mul_tables::@12 @13 -print_cls dominated by main @begin @13 print_cls -print_cls::@1 dominated by main @begin @13 print_cls::@1 print_cls -print_cls::@return dominated by main @begin print_cls::@return @13 print_cls::@1 print_cls - -NATURAL LOOPS -Found back edge: Loop head: mul_results_compare::@2 tails: mul_results_compare::@3 blocks: null -Found back edge: Loop head: mul_results_compare::@1 tails: mul_results_compare::@6 blocks: null -Found back edge: Loop head: print_ln::@1 tails: print_ln::@1 blocks: null -Found back edge: Loop head: print_str::@1 tails: print_str::@2 blocks: null -Found back edge: Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: null -Found back edge: Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@2 blocks: null -Found back edge: Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: null -Found back edge: Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: null -Found back edge: Loop head: print_cls::@1 tails: print_cls::@1 blocks: null -Populated: Loop head: mul_results_compare::@2 tails: mul_results_compare::@3 blocks: mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 -Populated: Loop head: mul_results_compare::@1 tails: mul_results_compare::@6 blocks: mul_results_compare::@6 mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 mul_results_compare::@1 -Populated: Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 -Populated: Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 -Populated: Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 -Populated: Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@2 blocks: mul_tables_compare::@2 mul_tables_compare::@1 -Populated: Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 -Populated: Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@12 init_mul_tables::@3 -Populated: Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 -Loop head: mul_results_compare::@2 tails: mul_results_compare::@3 blocks: mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 -Loop head: mul_results_compare::@1 tails: mul_results_compare::@6 blocks: mul_results_compare::@6 mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 mul_results_compare::@1 -Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 -Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 -Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 -Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@2 blocks: mul_tables_compare::@2 mul_tables_compare::@1 -Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 -Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@12 init_mul_tables::@3 -Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 - -NATURAL LOOPS WITH DEPTH -Found 0 loops in scope [] -Found 0 loops in scope [main] -Found 1 loops in scope [print_cls] - Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 -Found 2 loops in scope [init_mul_tables] - Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 - Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@12 init_mul_tables::@3 -Found 0 loops in scope [init_mul_tables_asm] -Found 1 loops in scope [mul_tables_compare] - Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@2 blocks: mul_tables_compare::@2 mul_tables_compare::@1 -Found 2 loops in scope [mul_results_compare] - Loop head: mul_results_compare::@2 tails: mul_results_compare::@3 blocks: mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 - Loop head: mul_results_compare::@1 tails: mul_results_compare::@6 blocks: mul_results_compare::@6 mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 mul_results_compare::@1 -Found 1 loops in scope [print_str] - Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 -Found 0 loops in scope [print_word] -Found 1 loops in scope [print_ln] - Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 -Found 1 loops in scope [slow_multiply] - Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 -Found 0 loops in scope [asm_multiply] -Found 0 loops in scope [print_byte] -Found 0 loops in scope [print_char] -Loop head: mul_results_compare::@2 tails: mul_results_compare::@3 blocks: mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 depth: 2 -Loop head: mul_results_compare::@1 tails: mul_results_compare::@6 blocks: mul_results_compare::@6 mul_results_compare::@3 mul_results_compare::@9 mul_results_compare::@8 mul_results_compare::@2 mul_results_compare::@1 depth: 1 -Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 depth: 1 -Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 depth: 1 -Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 depth: 3 -Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@2 blocks: mul_tables_compare::@2 mul_tables_compare::@1 depth: 1 -Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 depth: 1 -Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@12 init_mul_tables::@3 depth: 1 -Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 depth: 1 - - -VARIABLE REGISTER WEIGHTS -(byte*) BGCOL -(byte[512]) asm_mul_sqr1_hi -(byte[512]) asm_mul_sqr1_lo -(byte[512]) asm_mul_sqr2_hi -(byte[512]) asm_mul_sqr2_lo -(word()) asm_multiply((byte) asm_multiply::a , (byte) asm_multiply::b) -(byte) asm_multiply::a -(byte) asm_multiply::a#0 51.5 -(byte) asm_multiply::b -(byte) asm_multiply::b#0 51.5 -(byte*) asm_multiply::memA -(byte*) asm_multiply::memB -(word) asm_multiply::return -(word) asm_multiply::return#0 34.33333333333333 -(word) asm_multiply::return#2 202.0 -(byte*) char_cursor -(byte*) char_cursor#1 11.0 -(byte*~) char_cursor#100 4.0 -(byte*) char_cursor#11 0.823529411764706 -(byte*) char_cursor#2 2.1818181818181817 -(byte*) char_cursor#20 0.3333333333333333 -(byte*) char_cursor#27 40.0 -(byte*) char_cursor#41 4.0 -(byte*) char_cursor#64 2.0 -(byte*) char_cursor#71 10.0 -(byte*~) char_cursor#89 4.0 -(void()) init_mul_tables() -(byte~) init_mul_tables::$2 22.0 -(byte~) init_mul_tables::$5 22.0 -(byte~) init_mul_tables::$6 22.0 -(byte) init_mul_tables::c -(byte) init_mul_tables::c#1 2.357142857142857 -(byte) init_mul_tables::c#2 22.0 -(byte) init_mul_tables::dir -(byte) init_mul_tables::dir#2 4.714285714285714 -(byte) init_mul_tables::dir#3 7.333333333333333 -(word) init_mul_tables::sqr -(word) init_mul_tables::sqr#1 7.333333333333333 -(word) init_mul_tables::sqr#2 22.0 -(word) init_mul_tables::sqr#3 9.166666666666666 -(word) init_mul_tables::sqr#4 6.6000000000000005 -(byte*) init_mul_tables::sqr1_hi -(byte*) init_mul_tables::sqr1_hi#1 5.5 -(byte*) init_mul_tables::sqr1_hi#2 3.0 -(byte*) init_mul_tables::sqr1_lo -(byte*) init_mul_tables::sqr1_lo#1 16.5 -(byte*) init_mul_tables::sqr1_lo#2 2.5384615384615383 -(byte*) init_mul_tables::sqr2_hi -(byte*) init_mul_tables::sqr2_hi#1 3.142857142857143 -(byte*) init_mul_tables::sqr2_hi#2 11.0 -(byte*) init_mul_tables::sqr2_lo -(byte*) init_mul_tables::sqr2_lo#1 16.5 -(byte*) init_mul_tables::sqr2_lo#2 4.125 -(byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_2#1 11.0 -(byte) init_mul_tables::x_2#2 4.888888888888889 -(byte) init_mul_tables::x_2#3 8.25 -(byte) init_mul_tables::x_255 -(byte) init_mul_tables::x_255#1 5.5 -(byte) init_mul_tables::x_255#2 11.0 -(void()) init_mul_tables_asm() -(byte*) init_mul_tables_asm::mem -(byte*) line_cursor -(byte*) line_cursor#1 5.857142857142857 -(byte*) line_cursor#11 24.0 -(byte*) line_cursor#17 0.18181818181818182 -(byte*) line_cursor#19 40.0 -(byte*) line_cursor#22 4.0 -(void()) main() -(void()) mul_results_compare() -(byte) mul_results_compare::a -(byte) mul_results_compare::a#1 16.5 -(byte) mul_results_compare::a#5 14.933333333333332 -(byte) mul_results_compare::b -(byte) mul_results_compare::b#1 151.5 -(byte) mul_results_compare::b#2 33.666666666666664 -(word) mul_results_compare::ma -(word) mul_results_compare::ma#0 25.5 -(word) mul_results_compare::ms -(word) mul_results_compare::ms#0 22.666666666666664 -(byte[512]) mul_sqr1_hi -(byte[512]) mul_sqr1_lo -(byte[512]) mul_sqr2_hi -(byte[512]) mul_sqr2_lo -(void()) mul_tables_compare() -(byte*) mul_tables_compare::asm_sqr -(byte*) mul_tables_compare::asm_sqr#1 7.333333333333333 -(byte*) mul_tables_compare::asm_sqr#2 8.75 -(byte*) mul_tables_compare::kc_sqr -(byte*) mul_tables_compare::kc_sqr#1 16.5 -(byte*) mul_tables_compare::kc_sqr#2 3.8888888888888893 -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 4.0 -(byte~) print_byte::$2 4.0 -(byte) print_byte::b -(byte) print_byte::b#0 4.0 -(byte) print_byte::b#1 4.0 -(byte) print_byte::b#2 2.0 -(byte[]) print_byte::hextab -(void()) print_char((byte) print_char::ch) -(byte) print_char::ch -(byte) print_char::ch#0 4.0 -(byte) print_char::ch#1 4.0 -(byte) print_char::ch#2 6.0 -(void()) print_cls() -(byte*) print_cls::sc -(byte*) print_cls::sc#1 16.5 -(byte*) print_cls::sc#2 16.5 -(void()) print_ln() -(void()) print_str((byte*) print_str::str) -(byte*) print_str::str -(byte*) print_str::str#0 22.0 -(byte*) print_str::str#7 11.5 -(byte*) print_str::str#9 2.0 -(void()) print_word((word) print_word::w) -(word) print_word::w -(word) print_word::w#0 4.0 -(word) print_word::w#1 4.0 -(word) print_word::w#2 4.0 -(word) print_word::w#3 4.0 -(word) print_word::w#4 3.9999999999999996 -(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) -(byte) slow_multiply::a -(byte) slow_multiply::a#0 157.71428571428572 -(byte) slow_multiply::b -(byte) slow_multiply::b#0 183.66666666666669 -(byte) slow_multiply::i -(byte) slow_multiply::i#1 1501.5 -(byte) slow_multiply::i#2 1001.0 -(word) slow_multiply::m -(word) slow_multiply::m#1 1001.0 -(word) slow_multiply::m#3 2002.0 -(word) slow_multiply::return -(word) slow_multiply::return#0 367.33333333333337 -(word) slow_multiply::return#2 202.0 - -Initial phi equivalence classes -[ mul_results_compare::a#5 mul_results_compare::a#1 ] -[ mul_results_compare::b#2 mul_results_compare::b#1 ] -[ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] -[ print_str::str#7 print_str::str#9 print_str::str#0 ] -[ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] -[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -[ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] -[ slow_multiply::i#2 slow_multiply::i#1 ] -[ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] -[ mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] -[ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 ] -[ init_mul_tables::c#2 init_mul_tables::c#1 ] -[ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] -[ init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] -[ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] -[ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -[ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] -[ init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] -[ init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] -[ init_mul_tables::dir#2 init_mul_tables::dir#3 ] -[ print_cls::sc#2 print_cls::sc#1 ] -Added variable slow_multiply::a#0 to zero page equivalence class [ slow_multiply::a#0 ] -Added variable slow_multiply::b#0 to zero page equivalence class [ slow_multiply::b#0 ] -Added variable slow_multiply::return#2 to zero page equivalence class [ slow_multiply::return#2 ] -Added variable mul_results_compare::ms#0 to zero page equivalence class [ mul_results_compare::ms#0 ] -Added variable asm_multiply::a#0 to zero page equivalence class [ asm_multiply::a#0 ] -Added variable asm_multiply::b#0 to zero page equivalence class [ asm_multiply::b#0 ] -Added variable asm_multiply::return#2 to zero page equivalence class [ asm_multiply::return#2 ] -Added variable mul_results_compare::ma#0 to zero page equivalence class [ mul_results_compare::ma#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 ] -Added variable asm_multiply::return#0 to zero page equivalence class [ asm_multiply::return#0 ] -Added variable init_mul_tables::$2 to zero page equivalence class [ init_mul_tables::$2 ] -Added variable init_mul_tables::$5 to zero page equivalence class [ init_mul_tables::$5 ] -Added variable init_mul_tables::$6 to zero page equivalence class [ init_mul_tables::$6 ] -Complete equivalence classes -[ mul_results_compare::a#5 mul_results_compare::a#1 ] -[ mul_results_compare::b#2 mul_results_compare::b#1 ] -[ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] -[ print_str::str#7 print_str::str#9 print_str::str#0 ] -[ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] -[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -[ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] -[ slow_multiply::i#2 slow_multiply::i#1 ] -[ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] -[ mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] -[ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 ] -[ init_mul_tables::c#2 init_mul_tables::c#1 ] -[ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] -[ init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] -[ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] -[ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -[ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] -[ init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] -[ init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] -[ init_mul_tables::dir#2 init_mul_tables::dir#3 ] -[ print_cls::sc#2 print_cls::sc#1 ] -[ slow_multiply::a#0 ] -[ slow_multiply::b#0 ] -[ slow_multiply::return#2 ] -[ mul_results_compare::ms#0 ] -[ asm_multiply::a#0 ] -[ asm_multiply::b#0 ] -[ asm_multiply::return#2 ] -[ mul_results_compare::ma#0 ] -[ print_byte::$0 ] -[ print_byte::$2 ] -[ asm_multiply::return#0 ] -[ init_mul_tables::$2 ] -[ init_mul_tables::$5 ] -[ init_mul_tables::$6 ] -Allocated zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] -Allocated zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] -Allocated zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] -Allocated zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] -Allocated zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] -Allocated zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated zp ZP_BYTE:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Allocated zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] -Allocated zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] -Allocated zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] -Allocated zp ZP_WORD:17 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] -Allocated zp ZP_WORD:19 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 ] -Allocated zp ZP_BYTE:21 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -Allocated zp ZP_WORD:22 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] -Allocated zp ZP_WORD:24 [ init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] -Allocated zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] -Allocated zp ZP_WORD:27 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -Allocated zp ZP_BYTE:29 [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] -Allocated zp ZP_WORD:30 [ init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] -Allocated zp ZP_WORD:32 [ init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] -Allocated zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] -Allocated zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] -Allocated zp ZP_BYTE:37 [ slow_multiply::a#0 ] -Allocated zp ZP_BYTE:38 [ slow_multiply::b#0 ] -Allocated zp ZP_WORD:39 [ slow_multiply::return#2 ] -Allocated zp ZP_WORD:41 [ mul_results_compare::ms#0 ] -Allocated zp ZP_BYTE:43 [ asm_multiply::a#0 ] -Allocated zp ZP_BYTE:44 [ asm_multiply::b#0 ] -Allocated zp ZP_WORD:45 [ asm_multiply::return#2 ] -Allocated zp ZP_WORD:47 [ mul_results_compare::ma#0 ] -Allocated zp ZP_BYTE:49 [ print_byte::$0 ] -Allocated zp ZP_BYTE:50 [ print_byte::$2 ] -Allocated zp ZP_WORD:51 [ asm_multiply::return#0 ] -Allocated zp ZP_BYTE:53 [ init_mul_tables::$2 ] -Allocated zp ZP_BYTE:54 [ init_mul_tables::$5 ] -Allocated zp ZP_BYTE:55 [ init_mul_tables::$6 ] - -INITIAL ASM -//SEG0 Basic Upstart -.pc = $801 "Basic" -:BasicUpstart(main) -.pc = $80d "Program" -//SEG1 Global Constants & labels - .const BGCOL = $d021 - .label char_cursor = $c - .label line_cursor = 4 -//SEG2 @begin -bbegin: -//SEG3 [1] phi from @begin to @13 [phi:@begin->@13] -b13_from_bbegin: - jmp b13 -//SEG4 @13 -b13: -//SEG5 [2] call main param-assignment [ ] ( ) - jsr main -//SEG6 [3] phi from @13 to @end [phi:@13->@end] -bend_from_b13: - jmp bend -//SEG7 @end -bend: -//SEG8 main -main: { - //SEG9 [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 - lda #5 - sta BGCOL - //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) - //SEG11 [146] phi from main to print_cls [phi:main->print_cls] - print_cls_from_main: - jsr print_cls - //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - jmp b1 - //SEG13 main::@1 - b1: - //SEG14 [7] call init_mul_tables param-assignment [ ] ( main:2 [ ] ) - //SEG15 [117] phi from main::@1 to init_mul_tables [phi:main::@1->init_mul_tables] - init_mul_tables_from_b1: - jsr init_mul_tables - //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - jmp b2 - //SEG17 main::@2 - b2: - //SEG18 [9] call init_mul_tables_asm param-assignment [ ] ( main:2 [ ] ) - jsr init_mul_tables_asm - //SEG19 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - jmp b3 - //SEG20 main::@3 - b3: - //SEG21 [11] call mul_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) - //SEG22 [90] phi from main::@3 to mul_tables_compare [phi:main::@3->mul_tables_compare] - mul_tables_compare_from_b3: - jsr mul_tables_compare - //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - b4_from_b3: - jmp b4 - //SEG24 main::@4 - b4: - //SEG25 [13] call mul_results_compare param-assignment [ ] ( main:2 [ ] ) - //SEG26 [15] phi from main::@4 to mul_results_compare [phi:main::@4->mul_results_compare] - mul_results_compare_from_b4: - jsr mul_results_compare - jmp breturn - //SEG27 main::@return - breturn: - //SEG28 [14] return [ ] ( main:2 [ ] ) - rts -} -//SEG29 mul_results_compare -mul_results_compare: { - .label ms = $29 - .label ma = $2f - .label b = 3 - .label a = 2 - //SEG30 [16] phi from mul_results_compare to mul_results_compare::@1 [phi:mul_results_compare->mul_results_compare::@1] - b1_from_mul_results_compare: - //SEG31 [16] phi (byte) mul_results_compare::a#5 = (byte/signed byte/word/signed word) 0 [phi:mul_results_compare->mul_results_compare::@1#0] -- vbuz1=vbuc1 - lda #0 - sta a - jmp b1 - //SEG32 [16] phi from mul_results_compare::@6 to mul_results_compare::@1 [phi:mul_results_compare::@6->mul_results_compare::@1] - b1_from_b6: - //SEG33 [16] phi (byte) mul_results_compare::a#5 = (byte) mul_results_compare::a#1 [phi:mul_results_compare::@6->mul_results_compare::@1#0] -- register_copy - jmp b1 - //SEG34 mul_results_compare::@1 - b1: - //SEG35 [17] phi from mul_results_compare::@1 to mul_results_compare::@2 [phi:mul_results_compare::@1->mul_results_compare::@2] - b2_from_b1: - //SEG36 [17] phi (byte) mul_results_compare::b#2 = (byte/signed byte/word/signed word) 0 [phi:mul_results_compare::@1->mul_results_compare::@2#0] -- vbuz1=vbuc1 - lda #0 - sta b - jmp b2 - //SEG37 [17] phi from mul_results_compare::@3 to mul_results_compare::@2 [phi:mul_results_compare::@3->mul_results_compare::@2] - b2_from_b3: - //SEG38 [17] phi (byte) mul_results_compare::b#2 = (byte) mul_results_compare::b#1 [phi:mul_results_compare::@3->mul_results_compare::@2#0] -- register_copy - jmp b2 - //SEG39 mul_results_compare::@2 - b2: - //SEG40 [18] (byte) slow_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 - lda a - sta slow_multiply.a - //SEG41 [19] (byte) slow_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 - lda b - sta slow_multiply.b - //SEG42 [20] call slow_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - jsr slow_multiply - //SEG43 [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda slow_multiply.return - sta slow_multiply.return_2 - lda slow_multiply.return+1 - sta slow_multiply.return_2+1 - jmp b8 - //SEG44 mul_results_compare::@8 - b8: - //SEG45 [22] (word) mul_results_compare::ms#0 ← (word) slow_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda slow_multiply.return_2 - sta ms - lda slow_multiply.return_2+1 - sta ms+1 - //SEG46 [23] (byte) asm_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 - lda a - sta asm_multiply.a - //SEG47 [24] (byte) asm_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 - lda b - sta asm_multiply.b - //SEG48 [25] call asm_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - jsr asm_multiply - //SEG49 [26] (word) asm_multiply::return#2 ← (word) asm_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda asm_multiply.return - sta asm_multiply.return_2 - lda asm_multiply.return+1 - sta asm_multiply.return_2+1 - jmp b9 - //SEG50 mul_results_compare::@9 - b9: - //SEG51 [27] (word) mul_results_compare::ma#0 ← (word) asm_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda asm_multiply.return_2 - sta ma - lda asm_multiply.return_2+1 - sta ma+1 - //SEG52 [28] if((word) mul_results_compare::ms#0==(word) mul_results_compare::ma#0) goto mul_results_compare::@3 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp ma - bne !+ - lda ms+1 - cmp ma+1 - beq b3 - !: - jmp b4 - //SEG53 mul_results_compare::@4 - b4: - //SEG54 [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - //SEG55 [30] call print_str param-assignment [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - //SEG56 [53] phi from mul_results_compare::@4 to print_str [phi:mul_results_compare::@4->print_str] - print_str_from_b4: - //SEG57 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:mul_results_compare::@4->print_str#0] -- register_copy - //SEG58 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str [phi:mul_results_compare::@4->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b10 - //SEG59 mul_results_compare::@10 - b10: - //SEG60 [31] (word) print_word::w#2 ← (word) mul_results_compare::ms#0 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 - lda ms - sta print_word.w - lda ms+1 - sta print_word.w+1 - //SEG61 [32] call print_word param-assignment [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) - //SEG62 [60] phi from mul_results_compare::@10 to print_word [phi:mul_results_compare::@10->print_word] - print_word_from_b10: - //SEG63 [60] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:mul_results_compare::@10->print_word#0] -- register_copy - jsr print_word - //SEG64 [33] phi from mul_results_compare::@10 to mul_results_compare::@11 [phi:mul_results_compare::@10->mul_results_compare::@11] - b11_from_b10: - jmp b11 - //SEG65 mul_results_compare::@11 - b11: - //SEG66 [34] call print_str param-assignment [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - //SEG67 [53] phi from mul_results_compare::@11 to print_str [phi:mul_results_compare::@11->print_str] - print_str_from_b11: - //SEG68 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:mul_results_compare::@11->print_str#0] -- register_copy - //SEG69 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str1 [phi:mul_results_compare::@11->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b12 - //SEG70 mul_results_compare::@12 - b12: - //SEG71 [35] (word) print_word::w#3 ← (word) mul_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 - lda ma - sta print_word.w - lda ma+1 - sta print_word.w+1 - //SEG72 [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) - //SEG73 [60] phi from mul_results_compare::@12 to print_word [phi:mul_results_compare::@12->print_word] - print_word_from_b12: - //SEG74 [60] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:mul_results_compare::@12->print_word#0] -- register_copy - jsr print_word - //SEG75 [37] phi from mul_results_compare::@12 mul_results_compare::@14 to mul_results_compare::@return [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return] - breturn_from_b12: - breturn_from_b14: - //SEG76 [37] phi (byte*) line_cursor#19 = (byte*) line_cursor#17 [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return#0] -- register_copy - //SEG77 [37] phi (byte*) char_cursor#27 = (byte*) char_cursor#11 [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return#1] -- register_copy - jmp breturn - //SEG78 mul_results_compare::@return - breturn: - //SEG79 [38] return [ ] ( main:2::mul_results_compare:13 [ ] ) - rts - //SEG80 mul_results_compare::@3 - b3: - //SEG81 [39] (byte) mul_results_compare::b#1 ← ++ (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 - inc b - //SEG82 [40] if((byte) mul_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 - lda b - bne b2_from_b3 - jmp b6 - //SEG83 mul_results_compare::@6 - b6: - //SEG84 [41] (byte) mul_results_compare::a#1 ← ++ (byte) mul_results_compare::a#5 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 - inc a - //SEG85 [42] if((byte) mul_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@1 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 - lda a - bne b1_from_b6 - //SEG86 [43] phi from mul_results_compare::@6 to mul_results_compare::@7 [phi:mul_results_compare::@6->mul_results_compare::@7] - b7_from_b6: - jmp b7 - //SEG87 mul_results_compare::@7 - b7: - //SEG88 [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) - //SEG89 [53] phi from mul_results_compare::@7 to print_str [phi:mul_results_compare::@7->print_str] - print_str_from_b7: - //SEG90 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:mul_results_compare::@7->print_str#0] -- register_copy - //SEG91 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str2 [phi:mul_results_compare::@7->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - //SEG92 [45] phi from mul_results_compare::@7 to mul_results_compare::@14 [phi:mul_results_compare::@7->mul_results_compare::@14] - b14_from_b7: - jmp b14 - //SEG93 mul_results_compare::@14 - b14: - //SEG94 [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_results_compare:13 [ line_cursor#1 ] ) - //SEG95 [48] phi from mul_results_compare::@14 to print_ln [phi:mul_results_compare::@14->print_ln] - print_ln_from_b14: - //SEG96 [48] phi (byte*) line_cursor#22 = (byte*) line_cursor#17 [phi:mul_results_compare::@14->print_ln#0] -- register_copy - jsr print_ln - //SEG97 [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::mul_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) -- pbuz1=pbuz2 - lda line_cursor - sta char_cursor - lda line_cursor+1 - sta char_cursor+1 - jmp breturn_from_b14 - str: .text "multiply mismatch slow:@" - str1: .text " / fast asm:" - str2: .text "multiply results match!@" -} -//SEG98 print_ln -print_ln: { - //SEG99 [49] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] - b1_from_print_ln: - b1_from_b1: - //SEG100 [49] phi (byte*) line_cursor#11 = (byte*) line_cursor#22 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy - jmp b1 - //SEG101 print_ln::@1 - b1: - //SEG102 [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 - lda line_cursor - clc - adc #$28 - sta line_cursor - bcc !+ - inc line_cursor+1 - !: - //SEG103 [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1_lt_pbuz2_then_la1 - lda line_cursor+1 - cmp char_cursor+1 - bcc b1_from_b1 - bne !+ - lda line_cursor - cmp char_cursor - bcc b1_from_b1 - !: - jmp breturn - //SEG104 print_ln::@return - breturn: - //SEG105 [52] return [ line_cursor#1 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) - rts -} -//SEG106 print_str -print_str: { - .label str = 6 - //SEG107 [54] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] - b1_from_print_str: - b1_from_b2: - //SEG108 [54] phi (byte*) char_cursor#2 = (byte*) char_cursor#71 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - //SEG109 [54] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy - jmp b1 - //SEG110 print_str::@1 - b1: - //SEG111 [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (str),y - cmp #'@' - bne b2 - jmp breturn - //SEG112 print_str::@return - breturn: - //SEG113 [56] return [ char_cursor#2 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 ] ) - rts - //SEG114 print_str::@2 - b2: - //SEG115 [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (str),y - ldy #0 - sta (char_cursor),y - //SEG116 [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 - inc char_cursor - bne !+ - inc char_cursor+1 - !: - //SEG117 [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 - inc str - bne !+ - inc str+1 - !: - jmp b1_from_b2 -} -//SEG118 print_word -print_word: { - .label w = 8 - //SEG119 [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) -- vbuz1=_hi_vwuz2 - lda w+1 - sta print_byte.b - //SEG120 [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) - //SEG121 [66] phi from print_word to print_byte [phi:print_word->print_byte] - print_byte_from_print_word: - //SEG122 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#2 [phi:print_word->print_byte#0] -- register_copy - //SEG123 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy - jsr print_byte - jmp b1 - //SEG124 print_word::@1 - b1: - //SEG125 [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) -- vbuz1=_lo_vwuz2 - lda w - sta print_byte.b - //SEG126 [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - //SEG127 [66] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] - print_byte_from_b1: - //SEG128 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#11 [phi:print_word::@1->print_byte#0] -- register_copy - //SEG129 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - //SEG130 print_word::@return - breturn: - //SEG131 [65] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - rts -} -//SEG132 print_byte -print_byte: { - .label _0 = $31 - .label _2 = $32 - .label b = $a - //SEG133 [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) -- vbuz1=vbuz2_ror_4 - lda b - lsr - lsr - lsr - lsr - sta _0 - //SEG134 [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldx _0 - lda hextab,x - sta print_char.ch - //SEG135 [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) - //SEG136 [74] phi from print_byte to print_char [phi:print_byte->print_char] - print_char_from_print_byte: - //SEG137 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#64 [phi:print_byte->print_char#0] -- register_copy - //SEG138 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - jmp b1 - //SEG139 print_byte::@1 - b1: - //SEG140 [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 - lda b - and #$f - sta _2 - //SEG141 [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldx _2 - lda hextab,x - sta print_char.ch - //SEG142 [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - //SEG143 [74] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - print_char_from_b1: - //SEG144 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#11 [phi:print_byte::@1->print_char#0] -- register_copy - //SEG145 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - jmp breturn - //SEG146 print_byte::@return - breturn: - //SEG147 [73] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - rts - hextab: .byte '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' -} -//SEG148 print_char -print_char: { - .label ch = $b - //SEG149 [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) -- _deref_pbuz1=vbuz2 - ldy #0 - lda ch - sta (char_cursor),y - //SEG150 [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) -- pbuz1=_inc_pbuz1 - inc char_cursor - bne !+ - inc char_cursor+1 - !: - jmp breturn - //SEG151 print_char::@return - breturn: - //SEG152 [77] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) - rts -} -//SEG153 asm_multiply -asm_multiply: { - .const memA = $fe - .const memB = $ff - .label return = $33 - .label a = $2b - .label b = $2c - .label return_2 = $2d - //SEG154 [78] *((const byte*) asm_multiply::memA#0) ← (byte) asm_multiply::a#0 [ asm_multiply::b#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::b#0 ] ) -- _deref_pbuc1=vbuz1 - lda a - sta memA - //SEG155 [79] *((const byte*) asm_multiply::memB#0) ← (byte) asm_multiply::b#0 [ ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuz1 - lda b - sta memB - //SEG156 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - lda memA - sta sm1+1 - sta sm3+1 - eor #$ff - sta sm2+1 - sta sm4+1 - ldx memB - sec - sm1: - lda asm_mul_sqr1_lo,x - sm2: - sbc asm_mul_sqr2_lo,x - sta memA - sm3: - lda asm_mul_sqr1_hi,x - sm4: - sbc asm_mul_sqr2_hi,x - sta memB - //SEG157 [81] (word) asm_multiply::return#0 ← *((const byte*) asm_multiply::memB#0) w= *((const byte*) asm_multiply::memA#0) [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 - lda memA - sta return - lda memB - sta return+1 - jmp breturn - //SEG158 asm_multiply::@return - breturn: - //SEG159 [82] return [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) - rts -} -//SEG160 slow_multiply -slow_multiply: { - .label return = $f - .label m = $f - .label i = $e - .label a = $25 - .label b = $26 - .label return_2 = $27 - //SEG161 [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) -- vbuz1_le_0_then_la1 - lda a - cmp #0 - beq b1_from_slow_multiply - //SEG162 [84] phi from slow_multiply to slow_multiply::@2 [phi:slow_multiply->slow_multiply::@2] - b2_from_slow_multiply: - //SEG163 [84] phi (byte) slow_multiply::i#2 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#0] -- vbuz1=vbuc1 - lda #0 - sta i - //SEG164 [84] phi (word) slow_multiply::m#3 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#1] -- vwuz1=vbuc1 - lda #0 - sta m - lda #0 - sta m+1 - jmp b2 - //SEG165 [84] phi from slow_multiply::@2 to slow_multiply::@2 [phi:slow_multiply::@2->slow_multiply::@2] - b2_from_b2: - //SEG166 [84] phi (byte) slow_multiply::i#2 = (byte) slow_multiply::i#1 [phi:slow_multiply::@2->slow_multiply::@2#0] -- register_copy - //SEG167 [84] phi (word) slow_multiply::m#3 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@2#1] -- register_copy - jmp b2 - //SEG168 slow_multiply::@2 - b2: - //SEG169 [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) -- vwuz1=vwuz1_plus_vbuz2 - lda b - clc - adc m - sta m - bcc !+ - inc m+1 - !: - //SEG170 [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuz1=_inc_vbuz1 - inc i - //SEG171 [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuz1_neq_vbuz2_then_la1 - lda i - cmp a - bne b2_from_b2 - //SEG172 [88] phi from slow_multiply::@2 to slow_multiply::@1 [phi:slow_multiply::@2->slow_multiply::@1] - b1_from_b2: - //SEG173 [88] phi (word) slow_multiply::return#0 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@1#0] -- register_copy - jmp b1 - //SEG174 [88] phi from slow_multiply to slow_multiply::@1 [phi:slow_multiply->slow_multiply::@1] - b1_from_slow_multiply: - //SEG175 [88] phi (word) slow_multiply::return#0 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@1#0] -- vwuz1=vbuc1 - lda #0 - sta return - lda #0 - sta return+1 - jmp b1 - //SEG176 slow_multiply::@1 - b1: - jmp breturn - //SEG177 slow_multiply::@return - breturn: - //SEG178 [89] return [ slow_multiply::return#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) - rts -} -//SEG179 mul_tables_compare -mul_tables_compare: { - .label asm_sqr = $13 - .label kc_sqr = $11 - //SEG180 [91] phi from mul_tables_compare to mul_tables_compare::@1 [phi:mul_tables_compare->mul_tables_compare::@1] - b1_from_mul_tables_compare: - //SEG181 [91] phi (byte*) mul_tables_compare::asm_sqr#2 = (const byte[512]) asm_mul_sqr1_lo#0 [phi:mul_tables_compare->mul_tables_compare::@1#0] -- pbuz1=pbuc1 - lda #asm_mul_sqr1_lo - sta asm_sqr+1 - //SEG182 [91] phi (byte*) mul_tables_compare::kc_sqr#2 = (const byte[512]) mul_sqr1_lo#0 [phi:mul_tables_compare->mul_tables_compare::@1#1] -- pbuz1=pbuc1 - lda #mul_sqr1_lo - sta kc_sqr+1 - jmp b1 - //SEG183 [91] phi from mul_tables_compare::@2 to mul_tables_compare::@1 [phi:mul_tables_compare::@2->mul_tables_compare::@1] - b1_from_b2: - //SEG184 [91] phi (byte*) mul_tables_compare::asm_sqr#2 = (byte*) mul_tables_compare::asm_sqr#1 [phi:mul_tables_compare::@2->mul_tables_compare::@1#0] -- register_copy - //SEG185 [91] phi (byte*) mul_tables_compare::kc_sqr#2 = (byte*) mul_tables_compare::kc_sqr#1 [phi:mul_tables_compare::@2->mul_tables_compare::@1#1] -- register_copy - jmp b1 - //SEG186 mul_tables_compare::@1 - b1: - //SEG187 [92] if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) -- _deref_pbuz1_eq__deref_pbuz2_then_la1 - ldy #0 - lda (kc_sqr),y - ldy #0 - cmp (asm_sqr),y - beq b2 - jmp b3 - //SEG188 mul_tables_compare::@3 - b3: - //SEG189 [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - //SEG190 [94] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - //SEG191 [53] phi from mul_tables_compare::@3 to print_str [phi:mul_tables_compare::@3->print_str] - print_str_from_b3: - //SEG192 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@3->print_str#0] -- pbuz1=pbuc1 - lda #<$400 - sta char_cursor - lda #>$400 - sta char_cursor+1 - //SEG193 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str [phi:mul_tables_compare::@3->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b6 - //SEG194 mul_tables_compare::@6 - b6: - //SEG195 [95] (word) print_word::w#0 ← ((word)) (byte*) mul_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ) -- vwuz1=_word_pbuz2 - lda asm_sqr - sta print_word.w - lda asm_sqr+1 - sta print_word.w+1 - //SEG196 [96] call print_word param-assignment [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ) - //SEG197 [60] phi from mul_tables_compare::@6 to print_word [phi:mul_tables_compare::@6->print_word] - print_word_from_b6: - //SEG198 [60] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:mul_tables_compare::@6->print_word#0] -- register_copy - jsr print_word - //SEG199 [97] phi from mul_tables_compare::@6 to mul_tables_compare::@7 [phi:mul_tables_compare::@6->mul_tables_compare::@7] - b7_from_b6: - jmp b7 - //SEG200 mul_tables_compare::@7 - b7: - //SEG201 [98] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ) - //SEG202 [53] phi from mul_tables_compare::@7 to print_str [phi:mul_tables_compare::@7->print_str] - print_str_from_b7: - //SEG203 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:mul_tables_compare::@7->print_str#0] -- register_copy - //SEG204 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str1 [phi:mul_tables_compare::@7->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b8 - //SEG205 mul_tables_compare::@8 - b8: - //SEG206 [99] (word) print_word::w#1 ← ((word)) (byte*) mul_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) -- vwuz1=_word_pbuz2 - lda kc_sqr - sta print_word.w - lda kc_sqr+1 - sta print_word.w+1 - //SEG207 [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 ] ) - //SEG208 [60] phi from mul_tables_compare::@8 to print_word [phi:mul_tables_compare::@8->print_word] - print_word_from_b8: - //SEG209 [60] phi (word) print_word::w#4 = (word) print_word::w#1 [phi:mul_tables_compare::@8->print_word#0] -- register_copy - jsr print_word - //SEG210 [101] phi from mul_tables_compare::@8 to mul_tables_compare::@return [phi:mul_tables_compare::@8->mul_tables_compare::@return] - breturn_from_b8: - //SEG211 [101] phi (byte*) line_cursor#17 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@8->mul_tables_compare::@return#0] -- pbuz1=pbuc1 - lda #<$400 - sta line_cursor - lda #>$400 - sta line_cursor+1 - //SEG212 [101] phi (byte*) char_cursor#20 = (byte*) char_cursor#11 [phi:mul_tables_compare::@8->mul_tables_compare::@return#1] -- register_copy - jmp breturn - //SEG213 mul_tables_compare::@return - breturn: - //SEG214 [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - rts - //SEG215 mul_tables_compare::@2 - b2: - //SEG216 [103] (byte*) mul_tables_compare::asm_sqr#1 ← ++ (byte*) mul_tables_compare::asm_sqr#2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 - inc asm_sqr - bne !+ - inc asm_sqr+1 - !: - //SEG217 [104] (byte*) mul_tables_compare::kc_sqr#1 ← ++ (byte*) mul_tables_compare::kc_sqr#2 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 - inc kc_sqr - bne !+ - inc kc_sqr+1 - !: - //SEG218 [105] if((byte*) mul_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto mul_tables_compare::@1 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1_lt_pbuc1_then_la1 - lda kc_sqr+1 - cmp #>mul_sqr1_lo+$200*4 - bcc b1_from_b2 - bne !+ - lda kc_sqr - cmp #mul_tables_compare::@5] - b5_from_b2: - jmp b5 - //SEG220 mul_tables_compare::@5 - b5: - //SEG221 [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 ] ) - //SEG222 [53] phi from mul_tables_compare::@5 to print_str [phi:mul_tables_compare::@5->print_str] - print_str_from_b5: - //SEG223 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@5->print_str#0] -- pbuz1=pbuc1 - lda #<$400 - sta char_cursor - lda #>$400 - sta char_cursor+1 - //SEG224 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str2 [phi:mul_tables_compare::@5->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - //SEG225 [108] phi from mul_tables_compare::@5 to mul_tables_compare::@10 [phi:mul_tables_compare::@5->mul_tables_compare::@10] - b10_from_b5: - jmp b10 - //SEG226 mul_tables_compare::@10 - b10: - //SEG227 [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 ] ) - //SEG228 [48] phi from mul_tables_compare::@10 to print_ln [phi:mul_tables_compare::@10->print_ln] - print_ln_from_b10: - //SEG229 [48] phi (byte*) line_cursor#22 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@10->print_ln#0] -- pbuz1=pbuc1 - lda #<$400 - sta line_cursor - lda #>$400 - sta line_cursor+1 - jsr print_ln - //SEG230 [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) -- pbuz1=pbuz2 - lda line_cursor - sta char_cursor - lda line_cursor+1 - sta char_cursor+1 - //SEG231 [101] phi from mul_tables_compare::@10 to mul_tables_compare::@return [phi:mul_tables_compare::@10->mul_tables_compare::@return] - breturn_from_b10: - //SEG232 [101] phi (byte*) line_cursor#17 = (byte*) line_cursor#1 [phi:mul_tables_compare::@10->mul_tables_compare::@return#0] -- register_copy - //SEG233 [101] phi (byte*) char_cursor#20 = (byte*~) char_cursor#100 [phi:mul_tables_compare::@10->mul_tables_compare::@return#1] -- register_copy - jmp breturn - str: .text "multiply table mismatch at @" - str1: .text " / @" - str2: .text "multiply tables match!@" -} -//SEG234 init_mul_tables_asm -init_mul_tables_asm: { - .const mem = $ff - //SEG235 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - ldx #0 - txa - .byte $c9 - lb1: - tya - adc #0 - ml1: - sta asm_mul_sqr1_hi,x - tay - cmp #$40 - txa - ror - ml9: - adc #0 - sta ml9+1 - inx - ml0: - sta asm_mul_sqr1_lo,x - bne lb1 - inc ml0+2 - inc ml1+2 - clc - iny - bne lb1 - ldx #0 - ldy #$ff - !: - lda asm_mul_sqr1_hi+1,x - sta asm_mul_sqr2_hi+$100,x - lda asm_mul_sqr1_hi,x - sta asm_mul_sqr2_hi,y - lda asm_mul_sqr1_lo+1,x - sta asm_mul_sqr2_lo+$100,x - lda asm_mul_sqr1_lo,x - sta asm_mul_sqr2_lo,y - dey - inx - bne !- - //SEG236 [112] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr1_lo - sta mem - //SEG237 [113] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr1_hi - sta mem - //SEG238 [114] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr2_lo - sta mem - //SEG239 [115] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr2_hi - sta mem - jmp breturn - //SEG240 init_mul_tables_asm::@return - breturn: - //SEG241 [116] return [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - rts -} -//SEG242 init_mul_tables -init_mul_tables: { - .label _2 = $35 - .label _5 = $36 - .label _6 = $37 - .label c = $15 - .label sqr1_hi = $18 - .label sqr = $1b - .label sqr1_lo = $16 - .label x_2 = $1a - .label sqr2_hi = $20 - .label x_255 = $1d - .label sqr2_lo = $1e - .label dir = $22 - //SEG243 [118] phi from init_mul_tables to init_mul_tables::@1 [phi:init_mul_tables->init_mul_tables::@1] - b1_from_init_mul_tables: - //SEG244 [118] phi (byte) init_mul_tables::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuz1=vbuc1 - lda #0 - sta x_2 - //SEG245 [118] phi (byte*) init_mul_tables::sqr1_hi#2 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 - lda #mul_sqr1_hi+1 - sta sqr1_hi+1 - //SEG246 [118] phi (byte*) init_mul_tables::sqr1_lo#2 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#2] -- pbuz1=pbuc1 - lda #mul_sqr1_lo+1 - sta sqr1_lo+1 - //SEG247 [118] phi (word) init_mul_tables::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#3] -- vwuz1=vbuc1 - lda #0 - sta sqr - lda #0 - sta sqr+1 - //SEG248 [118] phi (byte) init_mul_tables::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#4] -- vbuz1=vbuc1 - lda #0 - sta c - jmp b1 - //SEG249 [118] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] - b1_from_b2: - //SEG250 [118] phi (byte) init_mul_tables::x_2#3 = (byte) init_mul_tables::x_2#2 [phi:init_mul_tables::@2->init_mul_tables::@1#0] -- register_copy - //SEG251 [118] phi (byte*) init_mul_tables::sqr1_hi#2 = (byte*) init_mul_tables::sqr1_hi#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy - //SEG252 [118] phi (byte*) init_mul_tables::sqr1_lo#2 = (byte*) init_mul_tables::sqr1_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy - //SEG253 [118] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy - //SEG254 [118] phi (byte) init_mul_tables::c#2 = (byte) init_mul_tables::c#1 [phi:init_mul_tables::@2->init_mul_tables::@1#4] -- register_copy - jmp b1 - //SEG255 init_mul_tables::@1 - b1: - //SEG256 [119] (byte) init_mul_tables::c#1 ← ++ (byte) init_mul_tables::c#2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) -- vbuz1=_inc_vbuz1 - inc c - //SEG257 [120] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 - lda c - and #1 - sta _2 - //SEG258 [121] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) -- vbuz1_neq_0_then_la1 - lda _2 - bne b2_from_b1 - jmp b5 - //SEG259 init_mul_tables::@5 - b5: - //SEG260 [122] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ) -- vbuz1=_inc_vbuz1 - inc x_2 - //SEG261 [123] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 - inc sqr - bne !+ - inc sqr+1 - !: - //SEG262 [124] phi from init_mul_tables::@1 init_mul_tables::@5 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2] - b2_from_b1: - b2_from_b5: - //SEG263 [124] phi (byte) init_mul_tables::x_2#2 = (byte) init_mul_tables::x_2#3 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#0] -- register_copy - //SEG264 [124] phi (word) init_mul_tables::sqr#3 = (word) init_mul_tables::sqr#4 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#1] -- register_copy - jmp b2 - //SEG265 init_mul_tables::@2 - b2: - //SEG266 [125] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuz1=_lo_vwuz2 - lda sqr - sta _5 - //SEG267 [126] *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuz2 - ldy #0 - lda _5 - sta (sqr1_lo),y - //SEG268 [127] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuz1=_hi_vwuz2 - lda sqr+1 - sta _6 - //SEG269 [128] *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuz2 - ldy #0 - lda _6 - sta (sqr1_hi),y - //SEG270 [129] (byte*) init_mul_tables::sqr1_hi#1 ← ++ (byte*) init_mul_tables::sqr1_hi#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 - inc sqr1_hi - bne !+ - inc sqr1_hi+1 - !: - //SEG271 [130] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- vwuz1=vwuz1_plus_vbuz2 - lda x_2 - clc - adc sqr - sta sqr - bcc !+ - inc sqr+1 - !: - //SEG272 [131] (byte*) init_mul_tables::sqr1_lo#1 ← ++ (byte*) init_mul_tables::sqr1_lo#2 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- pbuz1=_inc_pbuz1 - inc sqr1_lo - bne !+ - inc sqr1_lo+1 - !: - //SEG273 [132] if((byte*) init_mul_tables::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- pbuz1_neq_pbuc1_then_la1 - lda sqr1_lo+1 - cmp #>mul_sqr1_lo+$200 - bne b1_from_b2 - lda sqr1_lo - cmp #init_mul_tables::@3] - b3_from_b2: - //SEG275 [133] phi (byte) init_mul_tables::dir#2 = (byte/word/signed word) 255 [phi:init_mul_tables::@2->init_mul_tables::@3#0] -- vbuz1=vbuc1 - lda #$ff - sta dir - //SEG276 [133] phi (byte*) init_mul_tables::sqr2_hi#2 = (const byte[512]) mul_sqr2_hi#0 [phi:init_mul_tables::@2->init_mul_tables::@3#1] -- pbuz1=pbuc1 - lda #mul_sqr2_hi - sta sqr2_hi+1 - //SEG277 [133] phi (byte*) init_mul_tables::sqr2_lo#2 = (const byte[512]) mul_sqr2_lo#0 [phi:init_mul_tables::@2->init_mul_tables::@3#2] -- pbuz1=pbuc1 - lda #mul_sqr2_lo - sta sqr2_lo+1 - //SEG278 [133] phi (byte) init_mul_tables::x_255#2 = ((byte))-(byte/signed byte/word/signed word) 1 [phi:init_mul_tables::@2->init_mul_tables::@3#3] -- vbuz1=vbuc1 - lda #-1 - sta x_255 - jmp b3 - //SEG279 [133] phi from init_mul_tables::@4 to init_mul_tables::@3 [phi:init_mul_tables::@4->init_mul_tables::@3] - b3_from_b4: - //SEG280 [133] phi (byte) init_mul_tables::dir#2 = (byte) init_mul_tables::dir#3 [phi:init_mul_tables::@4->init_mul_tables::@3#0] -- register_copy - //SEG281 [133] phi (byte*) init_mul_tables::sqr2_hi#2 = (byte*) init_mul_tables::sqr2_hi#1 [phi:init_mul_tables::@4->init_mul_tables::@3#1] -- register_copy - //SEG282 [133] phi (byte*) init_mul_tables::sqr2_lo#2 = (byte*) init_mul_tables::sqr2_lo#1 [phi:init_mul_tables::@4->init_mul_tables::@3#2] -- register_copy - //SEG283 [133] phi (byte) init_mul_tables::x_255#2 = (byte) init_mul_tables::x_255#1 [phi:init_mul_tables::@4->init_mul_tables::@3#3] -- register_copy - jmp b3 - //SEG284 init_mul_tables::@3 - b3: - //SEG285 [134] *((byte*) init_mul_tables::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 - ldx x_255 - lda mul_sqr1_lo,x - ldy #0 - sta (sqr2_lo),y - //SEG286 [135] *((byte*) init_mul_tables::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 - ldx x_255 - lda mul_sqr1_hi,x - ldy #0 - sta (sqr2_hi),y - //SEG287 [136] (byte*) init_mul_tables::sqr2_hi#1 ← ++ (byte*) init_mul_tables::sqr2_hi#2 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ) -- pbuz1=_inc_pbuz1 - inc sqr2_hi - bne !+ - inc sqr2_hi+1 - !: - //SEG288 [137] (byte) init_mul_tables::x_255#1 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) -- vbuz1=vbuz1_plus_vbuz2 - lda x_255 - clc - adc dir - sta x_255 - //SEG289 [138] if((byte) init_mul_tables::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@12 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) -- vbuz1_neq_0_then_la1 - lda x_255 - bne b12_from_b3 - //SEG290 [139] phi from init_mul_tables::@3 to init_mul_tables::@4 [phi:init_mul_tables::@3->init_mul_tables::@4] - b4_from_b3: - //SEG291 [139] phi (byte) init_mul_tables::dir#3 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables::@3->init_mul_tables::@4#0] -- vbuz1=vbuc1 - lda #1 - sta dir - jmp b4 - //SEG292 init_mul_tables::@4 - b4: - //SEG293 [140] (byte*) init_mul_tables::sqr2_lo#1 ← ++ (byte*) init_mul_tables::sqr2_lo#2 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) -- pbuz1=_inc_pbuz1 - inc sqr2_lo - bne !+ - inc sqr2_lo+1 - !: - //SEG294 [141] if((byte*) init_mul_tables::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_mul_tables::@3 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) -- pbuz1_neq_pbuc1_then_la1 - lda sqr2_lo+1 - cmp #>mul_sqr2_lo+$1ff - bne b3_from_b4 - lda sqr2_lo - cmp #init_mul_tables::@12] - b12_from_b3: - jmp b12 - //SEG301 init_mul_tables::@12 - b12: - //SEG302 [139] phi from init_mul_tables::@12 to init_mul_tables::@4 [phi:init_mul_tables::@12->init_mul_tables::@4] - b4_from_b12: - //SEG303 [139] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy - jmp b4 -} -//SEG304 print_cls -print_cls: { - .label sc = $23 - //SEG305 [147] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] - b1_from_print_cls: - //SEG306 [147] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta sc - lda #>$400 - sta sc+1 - jmp b1 - //SEG307 [147] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] - b1_from_b1: - //SEG308 [147] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy - jmp b1 - //SEG309 print_cls::@1 - b1: - //SEG310 [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 - ldy #0 - lda #' ' - sta (sc),y - //SEG311 [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - //SEG312 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 - lda sc+1 - cmp #>$400+$3e8 - bne b1_from_b1 - lda sc - cmp #<$400+$3e8 - bne b1_from_b1 - jmp breturn - //SEG313 print_cls::@return - breturn: - //SEG314 [151] return [ ] ( main:2::print_cls:5 [ ] ) - rts -} - .align $100 - mul_sqr1_lo: .fill $200, 0 - .align $100 - mul_sqr1_hi: .fill $200, 0 - .align $100 - mul_sqr2_lo: .fill $200, 0 - .align $100 - mul_sqr2_hi: .fill $200, 0 - .align $100 - asm_mul_sqr1_lo: .fill $200, 0 - .align $100 - asm_mul_sqr1_hi: .fill $200, 0 - .align $100 - asm_mul_sqr2_lo: .fill $200, 0 - .align $100 - asm_mul_sqr2_hi: .fill $200, 0 - -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] -Statement [22] (word) mul_results_compare::ms#0 ← (word) slow_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [26] (word) asm_multiply::return#2 ← (word) asm_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [27] (word) mul_results_compare::ma#0 ← (word) asm_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [28] if((word) mul_results_compare::ms#0==(word) mul_results_compare::ma#0) goto mul_results_compare::@3 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [31] (word) print_word::w#2 ← (word) mul_results_compare::ms#0 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a -Statement [35] (word) print_word::w#3 ← (word) mul_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a -Statement [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::mul_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) always clobbers reg byte a -Statement [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a -Statement [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a -Statement [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y -Statement [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y -Statement [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) always clobbers reg byte a -Statement [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a -Statement [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a -Statement [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } always clobbers reg byte a reg byte x -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] -Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] -Statement [81] (word) asm_multiply::return#0 ← *((const byte*) asm_multiply::memB#0) w= *((const byte*) asm_multiply::memA#0) [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) always clobbers reg byte a -Statement [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ slow_multiply::a#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ slow_multiply::b#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] -Statement [92] if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a reg byte y -Statement [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a -Statement [95] (word) print_word::w#0 ← ((word)) (byte*) mul_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ) always clobbers reg byte a -Statement [99] (word) print_word::w#1 ← ((word)) (byte*) mul_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) always clobbers reg byte a -Statement [105] if((byte*) mul_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto mul_tables_compare::@1 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) always clobbers reg byte a -Statement [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) always clobbers reg byte a -Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } always clobbers reg byte a reg byte x reg byte y -Statement [112] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [113] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [114] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [115] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [120] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -Statement [125] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) always clobbers reg byte a -Statement [126] *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] -Statement [127] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) always clobbers reg byte a -Statement [128] *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Statement [130] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) always clobbers reg byte a -Statement [132] if((byte*) init_mul_tables::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) always clobbers reg byte a -Statement [134] *((byte*) init_mul_tables::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] -Statement [135] *((byte*) init_mul_tables::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [137] (byte) init_mul_tables::x_255#1 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [141] if((byte*) init_mul_tables::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_mul_tables::@3 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) always clobbers reg byte a -Statement [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) always clobbers reg byte a -Statement [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) always clobbers reg byte a -Statement [148] *((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 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a -Statement [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [22] (word) mul_results_compare::ms#0 ← (word) slow_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [26] (word) asm_multiply::return#2 ← (word) asm_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [27] (word) mul_results_compare::ma#0 ← (word) asm_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [28] if((word) mul_results_compare::ms#0==(word) mul_results_compare::ma#0) goto mul_results_compare::@3 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a -Statement [31] (word) print_word::w#2 ← (word) mul_results_compare::ms#0 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a -Statement [35] (word) print_word::w#3 ← (word) mul_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a -Statement [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::mul_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) always clobbers reg byte a -Statement [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a -Statement [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a -Statement [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y -Statement [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y -Statement [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) always clobbers reg byte a -Statement [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a -Statement [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a -Statement [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) always clobbers reg byte y -Statement asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } always clobbers reg byte a reg byte x -Statement [81] (word) asm_multiply::return#0 ← *((const byte*) asm_multiply::memB#0) w= *((const byte*) asm_multiply::memA#0) [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) always clobbers reg byte a -Potential register analysis [83] if(slow_multiply::a#0<=0) goto slow_multiply::@1 missing fragment vbuxx_le_0_then_la1 allocation: reg byte x [ slow_multiply::a#0 ] -Potential register analysis [83] if(slow_multiply::a#0<=0) goto slow_multiply::@1 missing fragment vbuyy_le_0_then_la1 allocation: reg byte y [ slow_multiply::a#0 ] -MISSING FRAGMENTS - vbuxx_le_0_then_la1 - vbuyy_le_0_then_la1 -Statement [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) always clobbers reg byte a -Statement [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) always clobbers reg byte a -Statement [92] if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a reg byte y -Statement [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a -Statement [95] (word) print_word::w#0 ← ((word)) (byte*) mul_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ) always clobbers reg byte a -Statement [99] (word) print_word::w#1 ← ((word)) (byte*) mul_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) always clobbers reg byte a -Statement [105] if((byte*) mul_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto mul_tables_compare::@1 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) always clobbers reg byte a -Statement [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) always clobbers reg byte a -Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } always clobbers reg byte a reg byte x reg byte y -Statement [112] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [113] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [114] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [115] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) always clobbers reg byte a -Statement [120] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ) always clobbers reg byte a -Statement [125] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) always clobbers reg byte a -Statement [126] *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Statement [127] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) always clobbers reg byte a -Statement [128] *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Statement [130] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) always clobbers reg byte a -Statement [132] if((byte*) init_mul_tables::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) always clobbers reg byte a -Statement [134] *((byte*) init_mul_tables::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [135] *((byte*) init_mul_tables::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [137] (byte) init_mul_tables::x_255#1 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [141] if((byte*) init_mul_tables::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_mul_tables::@3 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) always clobbers reg byte a -Statement [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) always clobbers reg byte a -Statement [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_mul_tables:7 [ ] ) always clobbers reg byte a -Statement [148] *((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 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 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 [ mul_results_compare::a#5 mul_results_compare::a#1 ] : zp ZP_BYTE:2 , reg byte y , -Potential registers zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] : zp ZP_BYTE:3 , reg byte y , -Potential registers zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] : zp ZP_WORD:4 , -Potential registers zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] : zp ZP_WORD:8 , -Potential registers zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , -Potential registers zp ZP_BYTE:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] : zp ZP_WORD:12 , -Potential registers zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] : zp ZP_WORD:15 , -Potential registers zp ZP_WORD:17 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] : zp ZP_WORD:17 , -Potential registers zp ZP_WORD:19 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 ] : zp ZP_WORD:19 , -Potential registers zp ZP_BYTE:21 [ init_mul_tables::c#2 init_mul_tables::c#1 ] : zp ZP_BYTE:21 , reg byte x , -Potential registers zp ZP_WORD:22 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] : zp ZP_WORD:22 , -Potential registers zp ZP_WORD:24 [ init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] : zp ZP_WORD:24 , -Potential registers zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] : zp ZP_BYTE:26 , reg byte x , -Potential registers zp ZP_WORD:27 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] : zp ZP_WORD:27 , -Potential registers zp ZP_BYTE:29 [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] : zp ZP_BYTE:29 , reg byte x , -Potential registers zp ZP_WORD:30 [ init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] : zp ZP_WORD:30 , -Potential registers zp ZP_WORD:32 [ init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] : zp ZP_WORD:32 , -Potential registers zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] : zp ZP_BYTE:34 , reg byte x , -Potential registers zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:35 , -Potential registers zp ZP_BYTE:37 [ slow_multiply::a#0 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:38 [ slow_multiply::b#0 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:39 [ slow_multiply::return#2 ] : zp ZP_WORD:39 , -Potential registers zp ZP_WORD:41 [ mul_results_compare::ms#0 ] : zp ZP_WORD:41 , -Potential registers zp ZP_BYTE:43 [ asm_multiply::a#0 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:44 [ asm_multiply::b#0 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:45 [ asm_multiply::return#2 ] : zp ZP_WORD:45 , -Potential registers zp ZP_WORD:47 [ mul_results_compare::ma#0 ] : zp ZP_WORD:47 , -Potential registers zp ZP_BYTE:49 [ print_byte::$0 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:50 [ print_byte::$2 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:51 [ asm_multiply::return#0 ] : zp ZP_WORD:51 , -Potential registers zp ZP_BYTE:53 [ init_mul_tables::$2 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:54 [ init_mul_tables::$5 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:55 [ init_mul_tables::$6 ] : zp ZP_BYTE:55 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [slow_multiply] 3,370.33: zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] 2,502.5: zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] 202: zp ZP_WORD:39 [ slow_multiply::return#2 ] 183.67: zp ZP_BYTE:38 [ slow_multiply::b#0 ] 157.71: zp ZP_BYTE:37 [ slow_multiply::a#0 ] -Uplift Scope [asm_multiply] 202: zp ZP_WORD:45 [ asm_multiply::return#2 ] 51.5: zp ZP_BYTE:43 [ asm_multiply::a#0 ] 51.5: zp ZP_BYTE:44 [ asm_multiply::b#0 ] 34.33: zp ZP_WORD:51 [ asm_multiply::return#0 ] -Uplift Scope [mul_results_compare] 185.17: zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] 31.43: zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] 25.5: zp ZP_WORD:47 [ mul_results_compare::ma#0 ] 22.67: zp ZP_WORD:41 [ mul_results_compare::ms#0 ] -Uplift Scope [init_mul_tables] 45.1: zp ZP_WORD:27 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] 24.36: zp ZP_BYTE:21 [ init_mul_tables::c#2 init_mul_tables::c#1 ] 24.14: zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] 22: zp ZP_BYTE:53 [ init_mul_tables::$2 ] 22: zp ZP_BYTE:54 [ init_mul_tables::$5 ] 22: zp ZP_BYTE:55 [ init_mul_tables::$6 ] 20.62: zp ZP_WORD:30 [ init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] 19.04: zp ZP_WORD:22 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] 16.5: zp ZP_BYTE:29 [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] 14.14: zp ZP_WORD:32 [ init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] 12.05: zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] 8.5: zp ZP_WORD:24 [ init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] -Uplift Scope [] 78.34: zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] 74.04: zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] -Uplift Scope [mul_tables_compare] 20.39: zp ZP_WORD:17 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] 16.08: zp ZP_WORD:19 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 ] -Uplift Scope [print_str] 35.5: zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] -Uplift Scope [print_cls] 33: zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] -Uplift Scope [print_word] 20: zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] -Uplift Scope [print_byte] 10: zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:49 [ print_byte::$0 ] 4: zp ZP_BYTE:50 [ print_byte::$2 ] -Uplift Scope [print_char] 14: zp ZP_BYTE:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplift Scope [print_ln] -Uplift Scope [main] -Uplift Scope [init_mul_tables_asm] - -Uplifting [slow_multiply] best 66221 combination zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] zp ZP_WORD:39 [ slow_multiply::return#2 ] reg byte x [ slow_multiply::b#0 ] zp ZP_BYTE:37 [ slow_multiply::a#0 ] -Uplifting [asm_multiply] best 65615 combination zp ZP_WORD:45 [ asm_multiply::return#2 ] reg byte x [ asm_multiply::a#0 ] reg byte a [ asm_multiply::b#0 ] zp ZP_WORD:51 [ asm_multiply::return#0 ] -Uplifting [mul_results_compare] best 65615 combination zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] zp ZP_WORD:47 [ mul_results_compare::ma#0 ] zp ZP_WORD:41 [ mul_results_compare::ms#0 ] -Uplifting [init_mul_tables] best 65265 combination zp ZP_WORD:27 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] reg byte x [ init_mul_tables::c#2 init_mul_tables::c#1 ] zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] reg byte a [ init_mul_tables::$2 ] reg byte a [ init_mul_tables::$5 ] reg byte a [ init_mul_tables::$6 ] zp ZP_WORD:30 [ init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] zp ZP_WORD:22 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] reg byte x [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] zp ZP_WORD:32 [ init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] zp ZP_WORD:24 [ init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] -Uplifting [] best 65265 combination zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] -Uplifting [mul_tables_compare] best 65265 combination zp ZP_WORD:17 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] zp ZP_WORD:19 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 ] -Uplifting [print_str] best 65265 combination zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] -Uplifting [print_cls] best 65265 combination zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] -Uplifting [print_word] best 65265 combination zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] -Uplifting [print_byte] best 65253 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte y [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_char] best 65244 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplifting [print_ln] best 65244 combination -Uplifting [main] best 65244 combination -Uplifting [init_mul_tables_asm] best 65244 combination -MISSING FRAGMENTS - vbuxx_le_0_then_la1 - vbuyy_le_0_then_la1 -Attempting to uplift remaining variables inzp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] -Uplifting [mul_results_compare] best 65244 combination zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:37 [ slow_multiply::a#0 ] -Uplifting [slow_multiply] best 65244 combination zp ZP_BYTE:37 [ slow_multiply::a#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] -Uplifting [mul_results_compare] best 65244 combination zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] -Uplifting [init_mul_tables] best 65244 combination zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] -Uplifting [init_mul_tables] best 65244 combination zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] -Coalescing zero page register [ zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 ] ] with [ zp ZP_BYTE:26 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] ] with [ zp ZP_BYTE:34 [ init_mul_tables::dir#2 init_mul_tables::dir#3 ] ] -Coalescing zero page register [ zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 init_mul_tables::dir#2 init_mul_tables::dir#3 ] ] with [ zp ZP_BYTE:37 [ slow_multiply::a#0 ] ] -Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] ] with [ zp ZP_WORD:17 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] ] -Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 ] ] with [ zp ZP_WORD:22 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] ] -Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 ] ] with [ zp ZP_WORD:30 [ init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] ] -Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 ] ] with [ zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] ] -Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] ] with [ zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] ] -Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] ] with [ zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] ] -Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] ] with [ zp ZP_WORD:24 [ init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] ] -Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 ] ] with [ zp ZP_WORD:32 [ init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] ] -Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 ] ] with [ zp ZP_WORD:39 [ slow_multiply::return#2 ] ] -Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 slow_multiply::return#2 ] ] with [ zp ZP_WORD:45 [ asm_multiply::return#2 ] ] -Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 slow_multiply::return#2 asm_multiply::return#2 ] ] with [ zp ZP_WORD:51 [ asm_multiply::return#0 ] ] -Coalescing zero page register [ zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] ] with [ zp ZP_WORD:27 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] ] -Coalescing zero page register [ zp ZP_WORD:19 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 ] ] with [ zp ZP_WORD:41 [ mul_results_compare::ms#0 ] ] -Allocated (was zp ZP_WORD:12) zp ZP_WORD:8 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -Allocated (was zp ZP_WORD:19) zp ZP_WORD:10 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 mul_results_compare::ms#0 ] -Allocated (was zp ZP_WORD:47) zp ZP_WORD:12 [ mul_results_compare::ma#0 ] - -ASSEMBLER BEFORE OPTIMIZATION -//SEG0 Basic Upstart -.pc = $801 "Basic" -:BasicUpstart(main) -.pc = $80d "Program" -//SEG1 Global Constants & labels - .const BGCOL = $d021 - .label char_cursor = 8 - .label line_cursor = 4 -//SEG2 @begin -bbegin: -//SEG3 [1] phi from @begin to @13 [phi:@begin->@13] -b13_from_bbegin: - jmp b13 -//SEG4 @13 -b13: -//SEG5 [2] call main param-assignment [ ] ( ) - jsr main -//SEG6 [3] phi from @13 to @end [phi:@13->@end] -bend_from_b13: - jmp bend -//SEG7 @end -bend: -//SEG8 main -main: { - //SEG9 [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 - lda #5 - sta BGCOL - //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) - //SEG11 [146] phi from main to print_cls [phi:main->print_cls] - print_cls_from_main: - jsr print_cls - //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - jmp b1 - //SEG13 main::@1 - b1: - //SEG14 [7] call init_mul_tables param-assignment [ ] ( main:2 [ ] ) - //SEG15 [117] phi from main::@1 to init_mul_tables [phi:main::@1->init_mul_tables] - init_mul_tables_from_b1: - jsr init_mul_tables - //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - jmp b2 - //SEG17 main::@2 - b2: - //SEG18 [9] call init_mul_tables_asm param-assignment [ ] ( main:2 [ ] ) - jsr init_mul_tables_asm - //SEG19 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - jmp b3 - //SEG20 main::@3 - b3: - //SEG21 [11] call mul_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) - //SEG22 [90] phi from main::@3 to mul_tables_compare [phi:main::@3->mul_tables_compare] - mul_tables_compare_from_b3: - jsr mul_tables_compare - //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - b4_from_b3: - jmp b4 - //SEG24 main::@4 - b4: - //SEG25 [13] call mul_results_compare param-assignment [ ] ( main:2 [ ] ) - //SEG26 [15] phi from main::@4 to mul_results_compare [phi:main::@4->mul_results_compare] - mul_results_compare_from_b4: - jsr mul_results_compare - jmp breturn - //SEG27 main::@return - breturn: - //SEG28 [14] return [ ] ( main:2 [ ] ) - rts -} -//SEG29 mul_results_compare -mul_results_compare: { - .label ms = $a - .label ma = $c - .label b = 3 - .label a = 2 - //SEG30 [16] phi from mul_results_compare to mul_results_compare::@1 [phi:mul_results_compare->mul_results_compare::@1] - b1_from_mul_results_compare: - //SEG31 [16] phi (byte) mul_results_compare::a#5 = (byte/signed byte/word/signed word) 0 [phi:mul_results_compare->mul_results_compare::@1#0] -- vbuz1=vbuc1 - lda #0 - sta a - jmp b1 - //SEG32 [16] phi from mul_results_compare::@6 to mul_results_compare::@1 [phi:mul_results_compare::@6->mul_results_compare::@1] - b1_from_b6: - //SEG33 [16] phi (byte) mul_results_compare::a#5 = (byte) mul_results_compare::a#1 [phi:mul_results_compare::@6->mul_results_compare::@1#0] -- register_copy - jmp b1 - //SEG34 mul_results_compare::@1 - b1: - //SEG35 [17] phi from mul_results_compare::@1 to mul_results_compare::@2 [phi:mul_results_compare::@1->mul_results_compare::@2] - b2_from_b1: - //SEG36 [17] phi (byte) mul_results_compare::b#2 = (byte/signed byte/word/signed word) 0 [phi:mul_results_compare::@1->mul_results_compare::@2#0] -- vbuz1=vbuc1 - lda #0 - sta b - jmp b2 - //SEG37 [17] phi from mul_results_compare::@3 to mul_results_compare::@2 [phi:mul_results_compare::@3->mul_results_compare::@2] - b2_from_b3: - //SEG38 [17] phi (byte) mul_results_compare::b#2 = (byte) mul_results_compare::b#1 [phi:mul_results_compare::@3->mul_results_compare::@2#0] -- register_copy - jmp b2 - //SEG39 mul_results_compare::@2 - b2: - //SEG40 [18] (byte) slow_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) - // (byte) slow_multiply::a#0 = (byte) mul_results_compare::a#5 // register copy zp ZP_BYTE:2 - //SEG41 [19] (byte) slow_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 - ldx b - //SEG42 [20] call slow_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - jsr slow_multiply - //SEG43 [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) - // (word) slow_multiply::return#2 = (word) slow_multiply::return#0 // register copy zp ZP_WORD:6 - jmp b8 - //SEG44 mul_results_compare::@8 - b8: - //SEG45 [22] (word) mul_results_compare::ms#0 ← (word) slow_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda slow_multiply.return - sta ms - lda slow_multiply.return+1 - sta ms+1 - //SEG46 [23] (byte) asm_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 - ldx a - //SEG47 [24] (byte) asm_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuaa=vbuz1 - lda b - //SEG48 [25] call asm_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - jsr asm_multiply - //SEG49 [26] (word) asm_multiply::return#2 ← (word) asm_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ) - // (word) asm_multiply::return#2 = (word) asm_multiply::return#0 // register copy zp ZP_WORD:6 - jmp b9 - //SEG50 mul_results_compare::@9 - b9: - //SEG51 [27] (word) mul_results_compare::ma#0 ← (word) asm_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda asm_multiply.return - sta ma - lda asm_multiply.return+1 - sta ma+1 - //SEG52 [28] if((word) mul_results_compare::ms#0==(word) mul_results_compare::ma#0) goto mul_results_compare::@3 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp ma - bne !+ - lda ms+1 - cmp ma+1 - beq b3 - !: - jmp b4 - //SEG53 mul_results_compare::@4 - b4: - //SEG54 [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - //SEG55 [30] call print_str param-assignment [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - //SEG56 [53] phi from mul_results_compare::@4 to print_str [phi:mul_results_compare::@4->print_str] - print_str_from_b4: - //SEG57 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:mul_results_compare::@4->print_str#0] -- register_copy - //SEG58 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str [phi:mul_results_compare::@4->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b10 - //SEG59 mul_results_compare::@10 - b10: - //SEG60 [31] (word) print_word::w#2 ← (word) mul_results_compare::ms#0 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 - lda ms - sta print_word.w - lda ms+1 - sta print_word.w+1 - //SEG61 [32] call print_word param-assignment [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) - //SEG62 [60] phi from mul_results_compare::@10 to print_word [phi:mul_results_compare::@10->print_word] - print_word_from_b10: - //SEG63 [60] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:mul_results_compare::@10->print_word#0] -- register_copy - jsr print_word - //SEG64 [33] phi from mul_results_compare::@10 to mul_results_compare::@11 [phi:mul_results_compare::@10->mul_results_compare::@11] - b11_from_b10: - jmp b11 - //SEG65 mul_results_compare::@11 - b11: - //SEG66 [34] call print_str param-assignment [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - //SEG67 [53] phi from mul_results_compare::@11 to print_str [phi:mul_results_compare::@11->print_str] - print_str_from_b11: - //SEG68 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:mul_results_compare::@11->print_str#0] -- register_copy - //SEG69 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str1 [phi:mul_results_compare::@11->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b12 - //SEG70 mul_results_compare::@12 - b12: - //SEG71 [35] (word) print_word::w#3 ← (word) mul_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 - lda ma - sta print_word.w - lda ma+1 - sta print_word.w+1 - //SEG72 [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) - //SEG73 [60] phi from mul_results_compare::@12 to print_word [phi:mul_results_compare::@12->print_word] - print_word_from_b12: - //SEG74 [60] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:mul_results_compare::@12->print_word#0] -- register_copy - jsr print_word - //SEG75 [37] phi from mul_results_compare::@12 mul_results_compare::@14 to mul_results_compare::@return [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return] - breturn_from_b12: - breturn_from_b14: - //SEG76 [37] phi (byte*) line_cursor#19 = (byte*) line_cursor#17 [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return#0] -- register_copy - //SEG77 [37] phi (byte*) char_cursor#27 = (byte*) char_cursor#11 [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return#1] -- register_copy - jmp breturn - //SEG78 mul_results_compare::@return - breturn: - //SEG79 [38] return [ ] ( main:2::mul_results_compare:13 [ ] ) - rts - //SEG80 mul_results_compare::@3 - b3: - //SEG81 [39] (byte) mul_results_compare::b#1 ← ++ (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 - inc b - //SEG82 [40] if((byte) mul_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 - lda b - bne b2_from_b3 - jmp b6 - //SEG83 mul_results_compare::@6 - b6: - //SEG84 [41] (byte) mul_results_compare::a#1 ← ++ (byte) mul_results_compare::a#5 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 - inc a - //SEG85 [42] if((byte) mul_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@1 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 - lda a - bne b1_from_b6 - //SEG86 [43] phi from mul_results_compare::@6 to mul_results_compare::@7 [phi:mul_results_compare::@6->mul_results_compare::@7] - b7_from_b6: - jmp b7 - //SEG87 mul_results_compare::@7 - b7: - //SEG88 [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) - //SEG89 [53] phi from mul_results_compare::@7 to print_str [phi:mul_results_compare::@7->print_str] - print_str_from_b7: - //SEG90 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:mul_results_compare::@7->print_str#0] -- register_copy - //SEG91 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str2 [phi:mul_results_compare::@7->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - //SEG92 [45] phi from mul_results_compare::@7 to mul_results_compare::@14 [phi:mul_results_compare::@7->mul_results_compare::@14] - b14_from_b7: - jmp b14 - //SEG93 mul_results_compare::@14 - b14: - //SEG94 [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_results_compare:13 [ line_cursor#1 ] ) - //SEG95 [48] phi from mul_results_compare::@14 to print_ln [phi:mul_results_compare::@14->print_ln] - print_ln_from_b14: - //SEG96 [48] phi (byte*) line_cursor#22 = (byte*) line_cursor#17 [phi:mul_results_compare::@14->print_ln#0] -- register_copy - jsr print_ln - //SEG97 [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::mul_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) -- pbuz1=pbuz2 - lda line_cursor - sta char_cursor - lda line_cursor+1 - sta char_cursor+1 - jmp breturn_from_b14 - str: .text "multiply mismatch slow:@" - str1: .text " / fast asm:" - str2: .text "multiply results match!@" -} -//SEG98 print_ln -print_ln: { - //SEG99 [49] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] - b1_from_print_ln: - b1_from_b1: - //SEG100 [49] phi (byte*) line_cursor#11 = (byte*) line_cursor#22 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy - jmp b1 - //SEG101 print_ln::@1 - b1: - //SEG102 [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 - lda line_cursor - clc - adc #$28 - sta line_cursor - bcc !+ - inc line_cursor+1 - !: - //SEG103 [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1_lt_pbuz2_then_la1 - lda line_cursor+1 - cmp char_cursor+1 - bcc b1_from_b1 - bne !+ - lda line_cursor - cmp char_cursor - bcc b1_from_b1 - !: - jmp breturn - //SEG104 print_ln::@return - breturn: - //SEG105 [52] return [ line_cursor#1 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) - rts -} -//SEG106 print_str -print_str: { - .label str = 6 - //SEG107 [54] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] - b1_from_print_str: - b1_from_b2: - //SEG108 [54] phi (byte*) char_cursor#2 = (byte*) char_cursor#71 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - //SEG109 [54] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy - jmp b1 - //SEG110 print_str::@1 - b1: - //SEG111 [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (str),y - cmp #'@' - bne b2 - jmp breturn - //SEG112 print_str::@return - breturn: - //SEG113 [56] return [ char_cursor#2 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 ] ) - rts - //SEG114 print_str::@2 - b2: - //SEG115 [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (str),y - ldy #0 - sta (char_cursor),y - //SEG116 [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 - inc char_cursor - bne !+ - inc char_cursor+1 - !: - //SEG117 [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 - inc str - bne !+ - inc str+1 - !: - jmp b1_from_b2 -} -//SEG118 print_word -print_word: { - .label w = 6 - //SEG119 [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) -- vbuxx=_hi_vwuz1 - lda w+1 - tax - //SEG120 [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) - //SEG121 [66] phi from print_word to print_byte [phi:print_word->print_byte] - print_byte_from_print_word: - //SEG122 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#2 [phi:print_word->print_byte#0] -- register_copy - //SEG123 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy - jsr print_byte - jmp b1 - //SEG124 print_word::@1 - b1: - //SEG125 [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) -- vbuxx=_lo_vwuz1 - lda w - tax - //SEG126 [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - //SEG127 [66] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] - print_byte_from_b1: - //SEG128 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#11 [phi:print_word::@1->print_byte#0] -- register_copy - //SEG129 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy - jsr print_byte - jmp breturn - //SEG130 print_word::@return - breturn: - //SEG131 [65] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - rts -} -//SEG132 print_byte -print_byte: { - //SEG133 [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4 - txa - lsr - lsr - lsr - lsr - tay - //SEG134 [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy - lda hextab,y - //SEG135 [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) - //SEG136 [74] phi from print_byte to print_char [phi:print_byte->print_char] - print_char_from_print_byte: - //SEG137 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#64 [phi:print_byte->print_char#0] -- register_copy - //SEG138 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - jmp b1 - //SEG139 print_byte::@1 - b1: - //SEG140 [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa - and #$f - //SEG141 [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa - tax - lda hextab,x - //SEG142 [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - //SEG143 [74] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - print_char_from_b1: - //SEG144 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#11 [phi:print_byte::@1->print_char#0] -- register_copy - //SEG145 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - jmp breturn - //SEG146 print_byte::@return - breturn: - //SEG147 [73] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - rts - hextab: .byte '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' -} -//SEG148 print_char -print_char: { - //SEG149 [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) -- _deref_pbuz1=vbuaa - ldy #0 - sta (char_cursor),y - //SEG150 [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) -- pbuz1=_inc_pbuz1 - inc char_cursor - bne !+ - inc char_cursor+1 - !: - jmp breturn - //SEG151 print_char::@return - breturn: - //SEG152 [77] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) - rts -} -//SEG153 asm_multiply -asm_multiply: { - .const memA = $fe - .const memB = $ff - .label return = 6 - //SEG154 [78] *((const byte*) asm_multiply::memA#0) ← (byte) asm_multiply::a#0 [ asm_multiply::b#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::b#0 ] ) -- _deref_pbuc1=vbuxx - stx memA - //SEG155 [79] *((const byte*) asm_multiply::memB#0) ← (byte) asm_multiply::b#0 [ ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuaa - sta memB - //SEG156 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - lda memA - sta sm1+1 - sta sm3+1 - eor #$ff - sta sm2+1 - sta sm4+1 - ldx memB - sec - sm1: - lda asm_mul_sqr1_lo,x - sm2: - sbc asm_mul_sqr2_lo,x - sta memA - sm3: - lda asm_mul_sqr1_hi,x - sm4: - sbc asm_mul_sqr2_hi,x - sta memB - //SEG157 [81] (word) asm_multiply::return#0 ← *((const byte*) asm_multiply::memB#0) w= *((const byte*) asm_multiply::memA#0) [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 - lda memA - sta return - lda memB - sta return+1 - jmp breturn - //SEG158 asm_multiply::@return - breturn: - //SEG159 [82] return [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) - rts -} -//SEG160 slow_multiply -slow_multiply: { - .label return = 6 - .label m = 6 - .label a = 2 - //SEG161 [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) -- vbuz1_le_0_then_la1 - lda a - cmp #0 - beq b1_from_slow_multiply - //SEG162 [84] phi from slow_multiply to slow_multiply::@2 [phi:slow_multiply->slow_multiply::@2] - b2_from_slow_multiply: - //SEG163 [84] phi (byte) slow_multiply::i#2 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#0] -- vbuyy=vbuc1 - ldy #0 - //SEG164 [84] phi (word) slow_multiply::m#3 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#1] -- vwuz1=vbuc1 - lda #0 - sta m - lda #0 - sta m+1 - jmp b2 - //SEG165 [84] phi from slow_multiply::@2 to slow_multiply::@2 [phi:slow_multiply::@2->slow_multiply::@2] - b2_from_b2: - //SEG166 [84] phi (byte) slow_multiply::i#2 = (byte) slow_multiply::i#1 [phi:slow_multiply::@2->slow_multiply::@2#0] -- register_copy - //SEG167 [84] phi (word) slow_multiply::m#3 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@2#1] -- register_copy - jmp b2 - //SEG168 slow_multiply::@2 - b2: - //SEG169 [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) -- vwuz1=vwuz1_plus_vbuxx - txa - clc - adc m - sta m - bcc !+ - inc m+1 - !: - //SEG170 [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy=_inc_vbuyy - iny - //SEG171 [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy_neq_vbuz1_then_la1 - cpy a - bne b2_from_b2 - //SEG172 [88] phi from slow_multiply::@2 to slow_multiply::@1 [phi:slow_multiply::@2->slow_multiply::@1] - b1_from_b2: - //SEG173 [88] phi (word) slow_multiply::return#0 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@1#0] -- register_copy - jmp b1 - //SEG174 [88] phi from slow_multiply to slow_multiply::@1 [phi:slow_multiply->slow_multiply::@1] - b1_from_slow_multiply: - //SEG175 [88] phi (word) slow_multiply::return#0 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@1#0] -- vwuz1=vbuc1 - lda #0 - sta return - lda #0 - sta return+1 - jmp b1 - //SEG176 slow_multiply::@1 - b1: - jmp breturn - //SEG177 slow_multiply::@return - breturn: - //SEG178 [89] return [ slow_multiply::return#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) - rts -} -//SEG179 mul_tables_compare -mul_tables_compare: { - .label asm_sqr = $a - .label kc_sqr = 4 - //SEG180 [91] phi from mul_tables_compare to mul_tables_compare::@1 [phi:mul_tables_compare->mul_tables_compare::@1] - b1_from_mul_tables_compare: - //SEG181 [91] phi (byte*) mul_tables_compare::asm_sqr#2 = (const byte[512]) asm_mul_sqr1_lo#0 [phi:mul_tables_compare->mul_tables_compare::@1#0] -- pbuz1=pbuc1 - lda #asm_mul_sqr1_lo - sta asm_sqr+1 - //SEG182 [91] phi (byte*) mul_tables_compare::kc_sqr#2 = (const byte[512]) mul_sqr1_lo#0 [phi:mul_tables_compare->mul_tables_compare::@1#1] -- pbuz1=pbuc1 - lda #mul_sqr1_lo - sta kc_sqr+1 - jmp b1 - //SEG183 [91] phi from mul_tables_compare::@2 to mul_tables_compare::@1 [phi:mul_tables_compare::@2->mul_tables_compare::@1] - b1_from_b2: - //SEG184 [91] phi (byte*) mul_tables_compare::asm_sqr#2 = (byte*) mul_tables_compare::asm_sqr#1 [phi:mul_tables_compare::@2->mul_tables_compare::@1#0] -- register_copy - //SEG185 [91] phi (byte*) mul_tables_compare::kc_sqr#2 = (byte*) mul_tables_compare::kc_sqr#1 [phi:mul_tables_compare::@2->mul_tables_compare::@1#1] -- register_copy - jmp b1 - //SEG186 mul_tables_compare::@1 - b1: - //SEG187 [92] if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) -- _deref_pbuz1_eq__deref_pbuz2_then_la1 - ldy #0 - lda (kc_sqr),y - ldy #0 - cmp (asm_sqr),y - beq b2 - jmp b3 - //SEG188 mul_tables_compare::@3 - b3: - //SEG189 [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - //SEG190 [94] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - //SEG191 [53] phi from mul_tables_compare::@3 to print_str [phi:mul_tables_compare::@3->print_str] - print_str_from_b3: - //SEG192 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@3->print_str#0] -- pbuz1=pbuc1 - lda #<$400 - sta char_cursor - lda #>$400 - sta char_cursor+1 - //SEG193 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str [phi:mul_tables_compare::@3->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - jmp b6 - //SEG194 mul_tables_compare::@6 - b6: - //SEG195 [95] (word) print_word::w#0 ← ((word)) (byte*) mul_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ) -- vwuz1=_word_pbuz2 - lda asm_sqr - sta print_word.w - lda asm_sqr+1 - sta print_word.w+1 - //SEG196 [96] call print_word param-assignment [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ) - //SEG197 [60] phi from mul_tables_compare::@6 to print_word [phi:mul_tables_compare::@6->print_word] - print_word_from_b6: - //SEG198 [60] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:mul_tables_compare::@6->print_word#0] -- register_copy - jsr print_word - //SEG199 [97] phi from mul_tables_compare::@6 to mul_tables_compare::@7 [phi:mul_tables_compare::@6->mul_tables_compare::@7] - b7_from_b6: - jmp b7 - //SEG200 mul_tables_compare::@7 - b7: - //SEG201 [98] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ) - //SEG202 [53] phi from mul_tables_compare::@7 to print_str [phi:mul_tables_compare::@7->print_str] - print_str_from_b7: - //SEG203 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:mul_tables_compare::@7->print_str#0] -- register_copy - //SEG204 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str1 [phi:mul_tables_compare::@7->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - jmp b8 - //SEG205 mul_tables_compare::@8 - b8: - //SEG206 [99] (word) print_word::w#1 ← ((word)) (byte*) mul_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) -- vwuz1=_word_pbuz2 - lda kc_sqr - sta print_word.w - lda kc_sqr+1 - sta print_word.w+1 - //SEG207 [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 ] ) - //SEG208 [60] phi from mul_tables_compare::@8 to print_word [phi:mul_tables_compare::@8->print_word] - print_word_from_b8: - //SEG209 [60] phi (word) print_word::w#4 = (word) print_word::w#1 [phi:mul_tables_compare::@8->print_word#0] -- register_copy - jsr print_word - //SEG210 [101] phi from mul_tables_compare::@8 to mul_tables_compare::@return [phi:mul_tables_compare::@8->mul_tables_compare::@return] - breturn_from_b8: - //SEG211 [101] phi (byte*) line_cursor#17 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@8->mul_tables_compare::@return#0] -- pbuz1=pbuc1 - lda #<$400 - sta line_cursor - lda #>$400 - sta line_cursor+1 - //SEG212 [101] phi (byte*) char_cursor#20 = (byte*) char_cursor#11 [phi:mul_tables_compare::@8->mul_tables_compare::@return#1] -- register_copy - jmp breturn - //SEG213 mul_tables_compare::@return - breturn: - //SEG214 [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - rts - //SEG215 mul_tables_compare::@2 - b2: - //SEG216 [103] (byte*) mul_tables_compare::asm_sqr#1 ← ++ (byte*) mul_tables_compare::asm_sqr#2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 - inc asm_sqr - bne !+ - inc asm_sqr+1 - !: - //SEG217 [104] (byte*) mul_tables_compare::kc_sqr#1 ← ++ (byte*) mul_tables_compare::kc_sqr#2 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 - inc kc_sqr - bne !+ - inc kc_sqr+1 - !: - //SEG218 [105] if((byte*) mul_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto mul_tables_compare::@1 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1_lt_pbuc1_then_la1 - lda kc_sqr+1 - cmp #>mul_sqr1_lo+$200*4 - bcc b1_from_b2 - bne !+ - lda kc_sqr - cmp #mul_tables_compare::@5] - b5_from_b2: - jmp b5 - //SEG220 mul_tables_compare::@5 - b5: - //SEG221 [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 ] ) - //SEG222 [53] phi from mul_tables_compare::@5 to print_str [phi:mul_tables_compare::@5->print_str] - print_str_from_b5: - //SEG223 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@5->print_str#0] -- pbuz1=pbuc1 - lda #<$400 - sta char_cursor - lda #>$400 - sta char_cursor+1 - //SEG224 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str2 [phi:mul_tables_compare::@5->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - //SEG225 [108] phi from mul_tables_compare::@5 to mul_tables_compare::@10 [phi:mul_tables_compare::@5->mul_tables_compare::@10] - b10_from_b5: - jmp b10 - //SEG226 mul_tables_compare::@10 - b10: - //SEG227 [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 ] ) - //SEG228 [48] phi from mul_tables_compare::@10 to print_ln [phi:mul_tables_compare::@10->print_ln] - print_ln_from_b10: - //SEG229 [48] phi (byte*) line_cursor#22 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@10->print_ln#0] -- pbuz1=pbuc1 - lda #<$400 - sta line_cursor - lda #>$400 - sta line_cursor+1 - jsr print_ln - //SEG230 [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) -- pbuz1=pbuz2 - lda line_cursor - sta char_cursor - lda line_cursor+1 - sta char_cursor+1 - //SEG231 [101] phi from mul_tables_compare::@10 to mul_tables_compare::@return [phi:mul_tables_compare::@10->mul_tables_compare::@return] - breturn_from_b10: - //SEG232 [101] phi (byte*) line_cursor#17 = (byte*) line_cursor#1 [phi:mul_tables_compare::@10->mul_tables_compare::@return#0] -- register_copy - //SEG233 [101] phi (byte*) char_cursor#20 = (byte*~) char_cursor#100 [phi:mul_tables_compare::@10->mul_tables_compare::@return#1] -- register_copy - jmp breturn - str: .text "multiply table mismatch at @" - str1: .text " / @" - str2: .text "multiply tables match!@" -} -//SEG234 init_mul_tables_asm -init_mul_tables_asm: { - .const mem = $ff - //SEG235 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - ldx #0 - txa - .byte $c9 - lb1: - tya - adc #0 - ml1: - sta asm_mul_sqr1_hi,x - tay - cmp #$40 - txa - ror - ml9: - adc #0 - sta ml9+1 - inx - ml0: - sta asm_mul_sqr1_lo,x - bne lb1 - inc ml0+2 - inc ml1+2 - clc - iny - bne lb1 - ldx #0 - ldy #$ff - !: - lda asm_mul_sqr1_hi+1,x - sta asm_mul_sqr2_hi+$100,x - lda asm_mul_sqr1_hi,x - sta asm_mul_sqr2_hi,y - lda asm_mul_sqr1_lo+1,x - sta asm_mul_sqr2_lo+$100,x - lda asm_mul_sqr1_lo,x - sta asm_mul_sqr2_lo,y - dey - inx - bne !- - //SEG236 [112] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr1_lo - sta mem - //SEG237 [113] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr1_hi - sta mem - //SEG238 [114] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr2_lo - sta mem - //SEG239 [115] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr2_hi - sta mem - jmp breturn - //SEG240 init_mul_tables_asm::@return - breturn: - //SEG241 [116] return [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - rts -} -//SEG242 init_mul_tables -init_mul_tables: { - .label sqr1_hi = 6 - .label sqr = 8 - .label sqr1_lo = 4 - .label x_2 = 2 - .label sqr2_hi = 6 - .label sqr2_lo = 4 - .label dir = 2 - //SEG243 [118] phi from init_mul_tables to init_mul_tables::@1 [phi:init_mul_tables->init_mul_tables::@1] - b1_from_init_mul_tables: - //SEG244 [118] phi (byte) init_mul_tables::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuz1=vbuc1 - lda #0 - sta x_2 - //SEG245 [118] phi (byte*) init_mul_tables::sqr1_hi#2 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 - lda #mul_sqr1_hi+1 - sta sqr1_hi+1 - //SEG246 [118] phi (byte*) init_mul_tables::sqr1_lo#2 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#2] -- pbuz1=pbuc1 - lda #mul_sqr1_lo+1 - sta sqr1_lo+1 - //SEG247 [118] phi (word) init_mul_tables::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#3] -- vwuz1=vbuc1 - lda #0 - sta sqr - lda #0 - sta sqr+1 - //SEG248 [118] phi (byte) init_mul_tables::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#4] -- vbuxx=vbuc1 - ldx #0 - jmp b1 - //SEG249 [118] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] - b1_from_b2: - //SEG250 [118] phi (byte) init_mul_tables::x_2#3 = (byte) init_mul_tables::x_2#2 [phi:init_mul_tables::@2->init_mul_tables::@1#0] -- register_copy - //SEG251 [118] phi (byte*) init_mul_tables::sqr1_hi#2 = (byte*) init_mul_tables::sqr1_hi#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy - //SEG252 [118] phi (byte*) init_mul_tables::sqr1_lo#2 = (byte*) init_mul_tables::sqr1_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy - //SEG253 [118] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy - //SEG254 [118] phi (byte) init_mul_tables::c#2 = (byte) init_mul_tables::c#1 [phi:init_mul_tables::@2->init_mul_tables::@1#4] -- register_copy - jmp b1 - //SEG255 init_mul_tables::@1 - b1: - //SEG256 [119] (byte) init_mul_tables::c#1 ← ++ (byte) init_mul_tables::c#2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG257 [120] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - //SEG258 [121] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) -- vbuaa_neq_0_then_la1 - cmp #0 - bne b2_from_b1 - jmp b5 - //SEG259 init_mul_tables::@5 - b5: - //SEG260 [122] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ) -- vbuz1=_inc_vbuz1 - inc x_2 - //SEG261 [123] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 - inc sqr - bne !+ - inc sqr+1 - !: - //SEG262 [124] phi from init_mul_tables::@1 init_mul_tables::@5 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2] - b2_from_b1: - b2_from_b5: - //SEG263 [124] phi (byte) init_mul_tables::x_2#2 = (byte) init_mul_tables::x_2#3 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#0] -- register_copy - //SEG264 [124] phi (word) init_mul_tables::sqr#3 = (word) init_mul_tables::sqr#4 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#1] -- register_copy - jmp b2 - //SEG265 init_mul_tables::@2 - b2: - //SEG266 [125] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuaa=_lo_vwuz1 - lda sqr - //SEG267 [126] *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa - ldy #0 - sta (sqr1_lo),y - //SEG268 [127] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuaa=_hi_vwuz1 - lda sqr+1 - //SEG269 [128] *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa - ldy #0 - sta (sqr1_hi),y - //SEG270 [129] (byte*) init_mul_tables::sqr1_hi#1 ← ++ (byte*) init_mul_tables::sqr1_hi#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 - inc sqr1_hi - bne !+ - inc sqr1_hi+1 - !: - //SEG271 [130] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- vwuz1=vwuz1_plus_vbuz2 - lda x_2 - clc - adc sqr - sta sqr - bcc !+ - inc sqr+1 - !: - //SEG272 [131] (byte*) init_mul_tables::sqr1_lo#1 ← ++ (byte*) init_mul_tables::sqr1_lo#2 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- pbuz1=_inc_pbuz1 - inc sqr1_lo - bne !+ - inc sqr1_lo+1 - !: - //SEG273 [132] if((byte*) init_mul_tables::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- pbuz1_neq_pbuc1_then_la1 - lda sqr1_lo+1 - cmp #>mul_sqr1_lo+$200 - bne b1_from_b2 - lda sqr1_lo - cmp #init_mul_tables::@3] - b3_from_b2: - //SEG275 [133] phi (byte) init_mul_tables::dir#2 = (byte/word/signed word) 255 [phi:init_mul_tables::@2->init_mul_tables::@3#0] -- vbuz1=vbuc1 - lda #$ff - sta dir - //SEG276 [133] phi (byte*) init_mul_tables::sqr2_hi#2 = (const byte[512]) mul_sqr2_hi#0 [phi:init_mul_tables::@2->init_mul_tables::@3#1] -- pbuz1=pbuc1 - lda #mul_sqr2_hi - sta sqr2_hi+1 - //SEG277 [133] phi (byte*) init_mul_tables::sqr2_lo#2 = (const byte[512]) mul_sqr2_lo#0 [phi:init_mul_tables::@2->init_mul_tables::@3#2] -- pbuz1=pbuc1 - lda #mul_sqr2_lo - sta sqr2_lo+1 - //SEG278 [133] phi (byte) init_mul_tables::x_255#2 = ((byte))-(byte/signed byte/word/signed word) 1 [phi:init_mul_tables::@2->init_mul_tables::@3#3] -- vbuxx=vbuc1 - ldx #-1 - jmp b3 - //SEG279 [133] phi from init_mul_tables::@4 to init_mul_tables::@3 [phi:init_mul_tables::@4->init_mul_tables::@3] - b3_from_b4: - //SEG280 [133] phi (byte) init_mul_tables::dir#2 = (byte) init_mul_tables::dir#3 [phi:init_mul_tables::@4->init_mul_tables::@3#0] -- register_copy - //SEG281 [133] phi (byte*) init_mul_tables::sqr2_hi#2 = (byte*) init_mul_tables::sqr2_hi#1 [phi:init_mul_tables::@4->init_mul_tables::@3#1] -- register_copy - //SEG282 [133] phi (byte*) init_mul_tables::sqr2_lo#2 = (byte*) init_mul_tables::sqr2_lo#1 [phi:init_mul_tables::@4->init_mul_tables::@3#2] -- register_copy - //SEG283 [133] phi (byte) init_mul_tables::x_255#2 = (byte) init_mul_tables::x_255#1 [phi:init_mul_tables::@4->init_mul_tables::@3#3] -- register_copy - jmp b3 - //SEG284 init_mul_tables::@3 - b3: - //SEG285 [134] *((byte*) init_mul_tables::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx - lda mul_sqr1_lo,x - ldy #0 - sta (sqr2_lo),y - //SEG286 [135] *((byte*) init_mul_tables::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx - lda mul_sqr1_hi,x - ldy #0 - sta (sqr2_hi),y - //SEG287 [136] (byte*) init_mul_tables::sqr2_hi#1 ← ++ (byte*) init_mul_tables::sqr2_hi#2 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ) -- pbuz1=_inc_pbuz1 - inc sqr2_hi - bne !+ - inc sqr2_hi+1 - !: - //SEG288 [137] (byte) init_mul_tables::x_255#1 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) -- vbuxx=vbuxx_plus_vbuz1 - txa - clc - adc dir - tax - //SEG289 [138] if((byte) init_mul_tables::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@12 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) -- vbuxx_neq_0_then_la1 - cpx #0 - bne b12_from_b3 - //SEG290 [139] phi from init_mul_tables::@3 to init_mul_tables::@4 [phi:init_mul_tables::@3->init_mul_tables::@4] - b4_from_b3: - //SEG291 [139] phi (byte) init_mul_tables::dir#3 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables::@3->init_mul_tables::@4#0] -- vbuz1=vbuc1 - lda #1 - sta dir - jmp b4 - //SEG292 init_mul_tables::@4 - b4: - //SEG293 [140] (byte*) init_mul_tables::sqr2_lo#1 ← ++ (byte*) init_mul_tables::sqr2_lo#2 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) -- pbuz1=_inc_pbuz1 - inc sqr2_lo - bne !+ - inc sqr2_lo+1 - !: - //SEG294 [141] if((byte*) init_mul_tables::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_mul_tables::@3 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) -- pbuz1_neq_pbuc1_then_la1 - lda sqr2_lo+1 - cmp #>mul_sqr2_lo+$1ff - bne b3_from_b4 - lda sqr2_lo - cmp #init_mul_tables::@12] - b12_from_b3: - jmp b12 - //SEG301 init_mul_tables::@12 - b12: - //SEG302 [139] phi from init_mul_tables::@12 to init_mul_tables::@4 [phi:init_mul_tables::@12->init_mul_tables::@4] - b4_from_b12: - //SEG303 [139] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy - jmp b4 -} -//SEG304 print_cls -print_cls: { - .label sc = 4 - //SEG305 [147] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] - b1_from_print_cls: - //SEG306 [147] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta sc - lda #>$400 - sta sc+1 - jmp b1 - //SEG307 [147] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] - b1_from_b1: - //SEG308 [147] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy - jmp b1 - //SEG309 print_cls::@1 - b1: - //SEG310 [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 - ldy #0 - lda #' ' - sta (sc),y - //SEG311 [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - //SEG312 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 - lda sc+1 - cmp #>$400+$3e8 - bne b1_from_b1 - lda sc - cmp #<$400+$3e8 - bne b1_from_b1 - jmp breturn - //SEG313 print_cls::@return - breturn: - //SEG314 [151] return [ ] ( main:2::print_cls:5 [ ] ) - rts -} - .align $100 - mul_sqr1_lo: .fill $200, 0 - .align $100 - mul_sqr1_hi: .fill $200, 0 - .align $100 - mul_sqr2_lo: .fill $200, 0 - .align $100 - mul_sqr2_hi: .fill $200, 0 - .align $100 - asm_mul_sqr1_lo: .fill $200, 0 - .align $100 - asm_mul_sqr1_hi: .fill $200, 0 - .align $100 - asm_mul_sqr2_lo: .fill $200, 0 - .align $100 - asm_mul_sqr2_hi: .fill $200, 0 - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp b13 -Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp b2 -Removing instruction jmp b3 -Removing instruction jmp b4 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp b2 -Removing instruction jmp b8 -Removing instruction jmp b9 -Removing instruction jmp b4 -Removing instruction jmp b10 -Removing instruction jmp b11 -Removing instruction jmp b12 -Removing instruction jmp breturn -Removing instruction jmp b6 -Removing instruction jmp b7 -Removing instruction jmp b14 -Removing instruction jmp b1 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn -Removing instruction jmp breturn -Removing instruction jmp breturn -Removing instruction jmp b2 -Removing instruction jmp b1 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp b3 -Removing instruction jmp b6 -Removing instruction jmp b7 -Removing instruction jmp b8 -Removing instruction jmp breturn -Removing instruction jmp b5 -Removing instruction jmp b10 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp b5 -Removing instruction jmp b2 -Removing instruction jmp b3 -Removing instruction jmp b4 -Removing instruction jmp b8 -Removing instruction jmp breturn -Removing instruction jmp b12 -Removing instruction jmp b1 -Removing instruction jmp breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction ldy #0 -Replacing instruction lda memA with TXA -Replacing instruction lda #0 with TYA -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction ldy #0 -Removing instruction lda #0 -Replacing instruction ldx #0 with TAX -Removing instruction ldy #0 -Removing instruction ldy #0 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label b2_from_b3 with b2 -Replacing label b1_from_b6 with b1 -Replacing label breturn_from_b14 with breturn -Replacing label b1_from_b1 with b1 -Replacing label b1_from_b1 with b1 -Replacing label b1_from_b2 with b1 -Replacing label b2_from_b2 with b2 -Replacing label b1_from_b2 with b1 -Replacing label b1_from_b2 with b1 -Replacing label b2_from_b1 with b2 -Replacing label b1_from_b2 with b1 -Replacing label b1_from_b2 with b1 -Replacing label b12_from_b3 with b12 -Replacing label b3_from_b4 with b3 -Replacing label b3_from_b4 with b3 -Replacing label b1_from_b1 with b1 -Replacing label b1_from_b1 with b1 -Removing instruction bbegin: -Removing instruction b13_from_bbegin: -Removing instruction bend_from_b13: -Removing instruction b1_from_main: -Removing instruction init_mul_tables_from_b1: -Removing instruction b2_from_b1: -Removing instruction b3_from_b2: -Removing instruction mul_tables_compare_from_b3: -Removing instruction b4_from_b3: -Removing instruction mul_results_compare_from_b4: -Removing instruction b1_from_b6: -Removing instruction b2_from_b1: -Removing instruction b2_from_b3: -Removing instruction b11_from_b10: -Removing instruction print_str_from_b11: -Removing instruction breturn_from_b12: -Removing instruction breturn_from_b14: -Removing instruction b7_from_b6: -Removing instruction print_str_from_b7: -Removing instruction b14_from_b7: -Removing instruction print_ln_from_b14: -Removing instruction b1_from_print_ln: -Removing instruction b1_from_b1: -Removing instruction b1_from_print_str: -Removing instruction b1_from_b2: -Removing instruction b2_from_b2: -Removing instruction breturn: -Removing instruction b1_from_b2: -Removing instruction b7_from_b6: -Removing instruction print_str_from_b7: -Removing instruction b5_from_b2: -Removing instruction print_str_from_b5: -Removing instruction b10_from_b5: -Removing instruction print_ln_from_b10: -Removing instruction b1_from_b2: -Removing instruction b2_from_b1: -Removing instruction b2_from_b5: -Removing instruction b3_from_b4: -Removing instruction b12_from_b3: -Removing instruction b4_from_b12: -Removing instruction b1_from_b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction b13: -Removing instruction bend: -Removing instruction print_cls_from_main: -Removing instruction b1: -Removing instruction b2: -Removing instruction b3: -Removing instruction b4: -Removing instruction breturn: -Removing instruction b1_from_mul_results_compare: -Removing instruction b8: -Removing instruction b9: -Removing instruction b4: -Removing instruction print_str_from_b4: -Removing instruction b10: -Removing instruction print_word_from_b10: -Removing instruction b11: -Removing instruction b12: -Removing instruction print_word_from_b12: -Removing instruction b6: -Removing instruction b7: -Removing instruction b14: -Removing instruction breturn: -Removing instruction breturn: -Removing instruction print_byte_from_print_word: -Removing instruction b1: -Removing instruction print_byte_from_b1: -Removing instruction breturn: -Removing instruction print_char_from_print_byte: -Removing instruction b1: -Removing instruction print_char_from_b1: -Removing instruction breturn: -Removing instruction breturn: -Removing instruction breturn: -Removing instruction b2_from_slow_multiply: -Removing instruction b1_from_b2: -Removing instruction b1_from_mul_tables_compare: -Removing instruction b3: -Removing instruction print_str_from_b3: -Removing instruction b6: -Removing instruction print_word_from_b6: -Removing instruction b7: -Removing instruction b8: -Removing instruction print_word_from_b8: -Removing instruction breturn_from_b8: -Removing instruction b5: -Removing instruction b10: -Removing instruction breturn_from_b10: -Removing instruction breturn: -Removing instruction b1_from_init_mul_tables: -Removing instruction b5: -Removing instruction b3_from_b2: -Removing instruction b4_from_b3: -Removing instruction b8: -Removing instruction breturn: -Removing instruction b1_from_print_cls: -Removing instruction breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Skipping double jump to b4 in bne b12 -Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_slow_multiply to b3 -Succesful ASM optimization Pass5RelabelLongLabels -Removing instruction jmp b1 -Removing instruction jmp b2 -Removing instruction jmp b2 -Removing instruction jmp b1 -Removing instruction jmp b1 -Removing instruction jmp b3 -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b12: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing unreachable instruction jmp b4 -Succesful ASM optimization Pass5UnreachableCodeElimination - -FINAL SYMBOL TABLE -(label) @13 -(label) @begin -(label) @end -(byte*) BGCOL -(const byte*) BGCOL#0 BGCOL = ((byte*))(word) 53281 -(byte[512]) asm_mul_sqr1_hi -(const byte[512]) asm_mul_sqr1_hi#0 asm_mul_sqr1_hi = { fill( 512, 0) } -(byte[512]) asm_mul_sqr1_lo -(const byte[512]) asm_mul_sqr1_lo#0 asm_mul_sqr1_lo = { fill( 512, 0) } -(byte[512]) asm_mul_sqr2_hi -(const byte[512]) asm_mul_sqr2_hi#0 asm_mul_sqr2_hi = { fill( 512, 0) } -(byte[512]) asm_mul_sqr2_lo -(const byte[512]) asm_mul_sqr2_lo#0 asm_mul_sqr2_lo = { fill( 512, 0) } -(word()) asm_multiply((byte) asm_multiply::a , (byte) asm_multiply::b) -(label) asm_multiply::@return -(byte) asm_multiply::a -(byte) asm_multiply::a#0 reg byte x 51.5 -(byte) asm_multiply::b -(byte) asm_multiply::b#0 reg byte a 51.5 -(byte*) asm_multiply::memA -(const byte*) asm_multiply::memA#0 memA = ((byte*))(byte/word/signed word) 254 -(byte*) asm_multiply::memB -(const byte*) asm_multiply::memB#0 memB = ((byte*))(byte/word/signed word) 255 -(word) asm_multiply::return -(word) asm_multiply::return#0 return zp ZP_WORD:6 34.33333333333333 -(word) asm_multiply::return#2 return zp ZP_WORD:6 202.0 -(byte*) char_cursor -(byte*) char_cursor#1 char_cursor zp ZP_WORD:8 11.0 -(byte*~) char_cursor#100 char_cursor zp ZP_WORD:8 4.0 -(byte*) char_cursor#11 char_cursor zp ZP_WORD:8 0.823529411764706 -(byte*) char_cursor#2 char_cursor zp ZP_WORD:8 2.1818181818181817 -(byte*) char_cursor#20 char_cursor zp ZP_WORD:8 0.3333333333333333 -(byte*) char_cursor#27 char_cursor zp ZP_WORD:8 40.0 -(byte*) char_cursor#41 char_cursor zp ZP_WORD:8 4.0 -(byte*) char_cursor#64 char_cursor zp ZP_WORD:8 2.0 -(byte*) char_cursor#71 char_cursor zp ZP_WORD:8 10.0 -(byte*~) char_cursor#89 char_cursor zp ZP_WORD:8 4.0 -(void()) init_mul_tables() -(byte~) init_mul_tables::$2 reg byte a 22.0 -(byte~) init_mul_tables::$5 reg byte a 22.0 -(byte~) init_mul_tables::$6 reg byte a 22.0 -(label) init_mul_tables::@1 -(label) init_mul_tables::@12 -(label) init_mul_tables::@2 -(label) init_mul_tables::@3 -(label) init_mul_tables::@4 -(label) init_mul_tables::@5 -(label) init_mul_tables::@8 -(label) init_mul_tables::@return -(byte) init_mul_tables::c -(byte) init_mul_tables::c#1 reg byte x 2.357142857142857 -(byte) init_mul_tables::c#2 reg byte x 22.0 -(byte) init_mul_tables::dir -(byte) init_mul_tables::dir#2 dir zp ZP_BYTE:2 4.714285714285714 -(byte) init_mul_tables::dir#3 dir zp ZP_BYTE:2 7.333333333333333 -(word) init_mul_tables::sqr -(word) init_mul_tables::sqr#1 sqr zp ZP_WORD:8 7.333333333333333 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:8 22.0 -(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:8 9.166666666666666 -(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:8 6.6000000000000005 -(byte*) init_mul_tables::sqr1_hi -(byte*) init_mul_tables::sqr1_hi#1 sqr1_hi zp ZP_WORD:6 5.5 -(byte*) init_mul_tables::sqr1_hi#2 sqr1_hi zp ZP_WORD:6 3.0 -(byte*) init_mul_tables::sqr1_lo -(byte*) init_mul_tables::sqr1_lo#1 sqr1_lo zp ZP_WORD:4 16.5 -(byte*) init_mul_tables::sqr1_lo#2 sqr1_lo zp ZP_WORD:4 2.5384615384615383 -(byte*) init_mul_tables::sqr2_hi -(byte*) init_mul_tables::sqr2_hi#1 sqr2_hi zp ZP_WORD:6 3.142857142857143 -(byte*) init_mul_tables::sqr2_hi#2 sqr2_hi zp ZP_WORD:6 11.0 -(byte*) init_mul_tables::sqr2_lo -(byte*) init_mul_tables::sqr2_lo#1 sqr2_lo zp ZP_WORD:4 16.5 -(byte*) init_mul_tables::sqr2_lo#2 sqr2_lo zp ZP_WORD:4 4.125 -(byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_2#1 x_2 zp ZP_BYTE:2 11.0 -(byte) init_mul_tables::x_2#2 x_2 zp ZP_BYTE:2 4.888888888888889 -(byte) init_mul_tables::x_2#3 x_2 zp ZP_BYTE:2 8.25 -(byte) init_mul_tables::x_255 -(byte) init_mul_tables::x_255#1 reg byte x 5.5 -(byte) init_mul_tables::x_255#2 reg byte x 11.0 -(void()) init_mul_tables_asm() -(label) init_mul_tables_asm::@return -(byte*) init_mul_tables_asm::mem -(const byte*) init_mul_tables_asm::mem#0 mem = ((byte*))(byte/word/signed word) 255 -(byte*) line_cursor -(byte*) line_cursor#1 line_cursor zp ZP_WORD:4 5.857142857142857 -(byte*) line_cursor#11 line_cursor zp ZP_WORD:4 24.0 -(byte*) line_cursor#17 line_cursor zp ZP_WORD:4 0.18181818181818182 -(byte*) line_cursor#19 line_cursor zp ZP_WORD:4 40.0 -(byte*) line_cursor#22 line_cursor zp ZP_WORD:4 4.0 -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@3 -(label) main::@4 -(label) main::@return -(void()) mul_results_compare() -(label) mul_results_compare::@1 -(label) mul_results_compare::@10 -(label) mul_results_compare::@11 -(label) mul_results_compare::@12 -(label) mul_results_compare::@14 -(label) mul_results_compare::@2 -(label) mul_results_compare::@3 -(label) mul_results_compare::@4 -(label) mul_results_compare::@6 -(label) mul_results_compare::@7 -(label) mul_results_compare::@8 -(label) mul_results_compare::@9 -(label) mul_results_compare::@return -(byte) mul_results_compare::a -(byte) mul_results_compare::a#1 a zp ZP_BYTE:2 16.5 -(byte) mul_results_compare::a#5 a zp ZP_BYTE:2 14.933333333333332 -(byte) mul_results_compare::b -(byte) mul_results_compare::b#1 b zp ZP_BYTE:3 151.5 -(byte) mul_results_compare::b#2 b zp ZP_BYTE:3 33.666666666666664 -(word) mul_results_compare::ma -(word) mul_results_compare::ma#0 ma zp ZP_WORD:12 25.5 -(word) mul_results_compare::ms -(word) mul_results_compare::ms#0 ms zp ZP_WORD:10 22.666666666666664 -(const string) mul_results_compare::str str = (string) "multiply mismatch slow:@" -(const string) mul_results_compare::str1 str1 = (string) " / fast asm:" -(const string) mul_results_compare::str2 str2 = (string) "multiply results match!@" -(byte[512]) mul_sqr1_hi -(const byte[512]) mul_sqr1_hi#0 mul_sqr1_hi = { fill( 512, 0) } -(byte[512]) mul_sqr1_lo -(const byte[512]) mul_sqr1_lo#0 mul_sqr1_lo = { fill( 512, 0) } -(byte[512]) mul_sqr2_hi -(const byte[512]) mul_sqr2_hi#0 mul_sqr2_hi = { fill( 512, 0) } -(byte[512]) mul_sqr2_lo -(const byte[512]) mul_sqr2_lo#0 mul_sqr2_lo = { fill( 512, 0) } -(void()) mul_tables_compare() -(label) mul_tables_compare::@1 -(label) mul_tables_compare::@10 -(label) mul_tables_compare::@2 -(label) mul_tables_compare::@3 -(label) mul_tables_compare::@5 -(label) mul_tables_compare::@6 -(label) mul_tables_compare::@7 -(label) mul_tables_compare::@8 -(label) mul_tables_compare::@return -(byte*) mul_tables_compare::asm_sqr -(byte*) mul_tables_compare::asm_sqr#1 asm_sqr zp ZP_WORD:10 7.333333333333333 -(byte*) mul_tables_compare::asm_sqr#2 asm_sqr zp ZP_WORD:10 8.75 -(byte*) mul_tables_compare::kc_sqr -(byte*) mul_tables_compare::kc_sqr#1 kc_sqr zp ZP_WORD:4 16.5 -(byte*) mul_tables_compare::kc_sqr#2 kc_sqr zp ZP_WORD:4 3.8888888888888893 -(const string) mul_tables_compare::str str = (string) "multiply table mismatch at @" -(const string) mul_tables_compare::str1 str1 = (string) " / @" -(const string) mul_tables_compare::str2 str2 = (string) "multiply tables match!@" -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 reg byte y 4.0 -(byte~) print_byte::$2 reg byte a 4.0 -(label) print_byte::@1 -(label) print_byte::@return -(byte) print_byte::b -(byte) print_byte::b#0 reg byte x 4.0 -(byte) print_byte::b#1 reg byte x 4.0 -(byte) print_byte::b#2 reg byte x 2.0 -(byte[]) print_byte::hextab -(const byte[]) print_byte::hextab#0 hextab = { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } -(void()) print_char((byte) print_char::ch) -(label) print_char::@return -(byte) print_char::ch -(byte) print_char::ch#0 reg byte a 4.0 -(byte) print_char::ch#1 reg byte a 4.0 -(byte) print_char::ch#2 reg byte a 6.0 -(void()) print_cls() -(label) print_cls::@1 -(label) print_cls::@return -(byte*) print_cls::sc -(byte*) print_cls::sc#1 sc zp ZP_WORD:4 16.5 -(byte*) print_cls::sc#2 sc zp ZP_WORD:4 16.5 -(void()) print_ln() -(label) print_ln::@1 -(label) print_ln::@return -(void()) print_str((byte*) print_str::str) -(label) print_str::@1 -(label) print_str::@2 -(label) print_str::@return -(byte*) print_str::str -(byte*) print_str::str#0 str zp ZP_WORD:6 22.0 -(byte*) print_str::str#7 str zp ZP_WORD:6 11.5 -(byte*) print_str::str#9 str zp ZP_WORD:6 2.0 -(void()) print_word((word) print_word::w) -(label) print_word::@1 -(label) print_word::@return -(word) print_word::w -(word) print_word::w#0 w zp ZP_WORD:6 4.0 -(word) print_word::w#1 w zp ZP_WORD:6 4.0 -(word) print_word::w#2 w zp ZP_WORD:6 4.0 -(word) print_word::w#3 w zp ZP_WORD:6 4.0 -(word) print_word::w#4 w zp ZP_WORD:6 3.9999999999999996 -(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) -(label) slow_multiply::@1 -(label) slow_multiply::@2 -(label) slow_multiply::@return -(byte) slow_multiply::a -(byte) slow_multiply::a#0 a zp ZP_BYTE:2 157.71428571428572 -(byte) slow_multiply::b -(byte) slow_multiply::b#0 reg byte x 183.66666666666669 -(byte) slow_multiply::i -(byte) slow_multiply::i#1 reg byte y 1501.5 -(byte) slow_multiply::i#2 reg byte y 1001.0 -(word) slow_multiply::m -(word) slow_multiply::m#1 m zp ZP_WORD:6 1001.0 -(word) slow_multiply::m#3 m zp ZP_WORD:6 2002.0 -(word) slow_multiply::return -(word) slow_multiply::return#0 return zp ZP_WORD:6 367.33333333333337 -(word) slow_multiply::return#2 return zp ZP_WORD:6 202.0 - -zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 init_mul_tables::dir#2 init_mul_tables::dir#3 slow_multiply::a#0 ] -zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] -zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ] -zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 slow_multiply::return#2 asm_multiply::return#2 asm_multiply::return#0 ] -reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:8 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] -zp ZP_WORD:10 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 mul_results_compare::ms#0 ] -reg byte x [ init_mul_tables::c#2 init_mul_tables::c#1 ] -reg byte x [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] -reg byte x [ slow_multiply::b#0 ] -reg byte x [ asm_multiply::a#0 ] -reg byte a [ asm_multiply::b#0 ] -zp ZP_WORD:12 [ mul_results_compare::ma#0 ] -reg byte y [ print_byte::$0 ] -reg byte a [ print_byte::$2 ] -reg byte a [ init_mul_tables::$2 ] -reg byte a [ init_mul_tables::$5 ] -reg byte a [ init_mul_tables::$6 ] - - -FINAL ASSEMBLER -//SEG0 Basic Upstart -.pc = $801 "Basic" -:BasicUpstart(main) -.pc = $80d "Program" -//SEG1 Global Constants & labels - .const BGCOL = $d021 - .label char_cursor = 8 - .label line_cursor = 4 -//SEG2 @begin -//SEG3 [1] phi from @begin to @13 [phi:@begin->@13] -//SEG4 @13 -//SEG5 [2] call main param-assignment [ ] ( ) - jsr main -//SEG6 [3] phi from @13 to @end [phi:@13->@end] -//SEG7 @end -//SEG8 main -main: { - //SEG9 [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 - lda #5 - sta BGCOL - //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) - //SEG11 [146] phi from main to print_cls [phi:main->print_cls] - jsr print_cls - //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] - //SEG13 main::@1 - //SEG14 [7] call init_mul_tables param-assignment [ ] ( main:2 [ ] ) - //SEG15 [117] phi from main::@1 to init_mul_tables [phi:main::@1->init_mul_tables] - jsr init_mul_tables - //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - //SEG17 main::@2 - //SEG18 [9] call init_mul_tables_asm param-assignment [ ] ( main:2 [ ] ) - jsr init_mul_tables_asm - //SEG19 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - //SEG20 main::@3 - //SEG21 [11] call mul_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) - //SEG22 [90] phi from main::@3 to mul_tables_compare [phi:main::@3->mul_tables_compare] - jsr mul_tables_compare - //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - //SEG24 main::@4 - //SEG25 [13] call mul_results_compare param-assignment [ ] ( main:2 [ ] ) - //SEG26 [15] phi from main::@4 to mul_results_compare [phi:main::@4->mul_results_compare] - jsr mul_results_compare - //SEG27 main::@return - //SEG28 [14] return [ ] ( main:2 [ ] ) - rts -} -//SEG29 mul_results_compare -mul_results_compare: { - .label ms = $a - .label ma = $c - .label b = 3 - .label a = 2 - //SEG30 [16] phi from mul_results_compare to mul_results_compare::@1 [phi:mul_results_compare->mul_results_compare::@1] - //SEG31 [16] phi (byte) mul_results_compare::a#5 = (byte/signed byte/word/signed word) 0 [phi:mul_results_compare->mul_results_compare::@1#0] -- vbuz1=vbuc1 - lda #0 - sta a - //SEG32 [16] phi from mul_results_compare::@6 to mul_results_compare::@1 [phi:mul_results_compare::@6->mul_results_compare::@1] - //SEG33 [16] phi (byte) mul_results_compare::a#5 = (byte) mul_results_compare::a#1 [phi:mul_results_compare::@6->mul_results_compare::@1#0] -- register_copy - //SEG34 mul_results_compare::@1 - b1: - //SEG35 [17] phi from mul_results_compare::@1 to mul_results_compare::@2 [phi:mul_results_compare::@1->mul_results_compare::@2] - //SEG36 [17] phi (byte) mul_results_compare::b#2 = (byte/signed byte/word/signed word) 0 [phi:mul_results_compare::@1->mul_results_compare::@2#0] -- vbuz1=vbuc1 - lda #0 - sta b - //SEG37 [17] phi from mul_results_compare::@3 to mul_results_compare::@2 [phi:mul_results_compare::@3->mul_results_compare::@2] - //SEG38 [17] phi (byte) mul_results_compare::b#2 = (byte) mul_results_compare::b#1 [phi:mul_results_compare::@3->mul_results_compare::@2#0] -- register_copy - //SEG39 mul_results_compare::@2 - b2: - //SEG40 [18] (byte) slow_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) - // (byte) slow_multiply::a#0 = (byte) mul_results_compare::a#5 // register copy zp ZP_BYTE:2 - //SEG41 [19] (byte) slow_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 - ldx b - //SEG42 [20] call slow_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - jsr slow_multiply - //SEG43 [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) - // (word) slow_multiply::return#2 = (word) slow_multiply::return#0 // register copy zp ZP_WORD:6 - //SEG44 mul_results_compare::@8 - //SEG45 [22] (word) mul_results_compare::ms#0 ← (word) slow_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda slow_multiply.return - sta ms - lda slow_multiply.return+1 - sta ms+1 - //SEG46 [23] (byte) asm_multiply::a#0 ← (byte) mul_results_compare::a#5 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 - ldx a - //SEG47 [24] (byte) asm_multiply::b#0 ← (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::a#0 asm_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuaa=vbuz1 - lda b - //SEG48 [25] call asm_multiply param-assignment [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#0 line_cursor#17 char_cursor#20 ] ) - jsr asm_multiply - //SEG49 [26] (word) asm_multiply::return#2 ← (word) asm_multiply::return#0 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 asm_multiply::return#2 line_cursor#17 char_cursor#20 ] ) - // (word) asm_multiply::return#2 = (word) asm_multiply::return#0 // register copy zp ZP_WORD:6 - //SEG50 mul_results_compare::@9 - //SEG51 [27] (word) mul_results_compare::ma#0 ← (word) asm_multiply::return#2 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 - lda asm_multiply.return - sta ma - lda asm_multiply.return+1 - sta ma+1 - //SEG52 [28] if((word) mul_results_compare::ms#0==(word) mul_results_compare::ma#0) goto mul_results_compare::@3 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1_eq_vwuz2_then_la1 - lda ms - cmp ma - bne !+ - lda ms+1 - cmp ma+1 - beq b3 - !: - //SEG53 mul_results_compare::@4 - //SEG54 [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - //SEG55 [30] call print_str param-assignment [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - //SEG56 [53] phi from mul_results_compare::@4 to print_str [phi:mul_results_compare::@4->print_str] - //SEG57 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:mul_results_compare::@4->print_str#0] -- register_copy - //SEG58 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str [phi:mul_results_compare::@4->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - //SEG59 mul_results_compare::@10 - //SEG60 [31] (word) print_word::w#2 ← (word) mul_results_compare::ms#0 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 - lda ms - sta print_word.w - lda ms+1 - sta print_word.w+1 - //SEG61 [32] call print_word param-assignment [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) - //SEG62 [60] phi from mul_results_compare::@10 to print_word [phi:mul_results_compare::@10->print_word] - //SEG63 [60] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:mul_results_compare::@10->print_word#0] -- register_copy - jsr print_word - //SEG64 [33] phi from mul_results_compare::@10 to mul_results_compare::@11 [phi:mul_results_compare::@10->mul_results_compare::@11] - //SEG65 mul_results_compare::@11 - //SEG66 [34] call print_str param-assignment [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) - //SEG67 [53] phi from mul_results_compare::@11 to print_str [phi:mul_results_compare::@11->print_str] - //SEG68 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:mul_results_compare::@11->print_str#0] -- register_copy - //SEG69 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str1 [phi:mul_results_compare::@11->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - //SEG70 mul_results_compare::@12 - //SEG71 [35] (word) print_word::w#3 ← (word) mul_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 - lda ma - sta print_word.w - lda ma+1 - sta print_word.w+1 - //SEG72 [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::mul_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) - //SEG73 [60] phi from mul_results_compare::@12 to print_word [phi:mul_results_compare::@12->print_word] - //SEG74 [60] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:mul_results_compare::@12->print_word#0] -- register_copy - jsr print_word - //SEG75 [37] phi from mul_results_compare::@12 mul_results_compare::@14 to mul_results_compare::@return [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return] - //SEG76 [37] phi (byte*) line_cursor#19 = (byte*) line_cursor#17 [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return#0] -- register_copy - //SEG77 [37] phi (byte*) char_cursor#27 = (byte*) char_cursor#11 [phi:mul_results_compare::@12/mul_results_compare::@14->mul_results_compare::@return#1] -- register_copy - //SEG78 mul_results_compare::@return - breturn: - //SEG79 [38] return [ ] ( main:2::mul_results_compare:13 [ ] ) - rts - //SEG80 mul_results_compare::@3 - b3: - //SEG81 [39] (byte) mul_results_compare::b#1 ← ++ (byte) mul_results_compare::b#2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 - inc b - //SEG82 [40] if((byte) mul_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@2 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#5 mul_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 - lda b - bne b2 - //SEG83 mul_results_compare::@6 - //SEG84 [41] (byte) mul_results_compare::a#1 ← ++ (byte) mul_results_compare::a#5 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 - inc a - //SEG85 [42] if((byte) mul_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto mul_results_compare::@1 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::mul_results_compare:13 [ mul_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 - lda a - bne b1 - //SEG86 [43] phi from mul_results_compare::@6 to mul_results_compare::@7 [phi:mul_results_compare::@6->mul_results_compare::@7] - //SEG87 mul_results_compare::@7 - //SEG88 [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::mul_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) - //SEG89 [53] phi from mul_results_compare::@7 to print_str [phi:mul_results_compare::@7->print_str] - //SEG90 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:mul_results_compare::@7->print_str#0] -- register_copy - //SEG91 [53] phi (byte*) print_str::str#9 = (const string) mul_results_compare::str2 [phi:mul_results_compare::@7->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - //SEG92 [45] phi from mul_results_compare::@7 to mul_results_compare::@14 [phi:mul_results_compare::@7->mul_results_compare::@14] - //SEG93 mul_results_compare::@14 - //SEG94 [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_results_compare:13 [ line_cursor#1 ] ) - //SEG95 [48] phi from mul_results_compare::@14 to print_ln [phi:mul_results_compare::@14->print_ln] - //SEG96 [48] phi (byte*) line_cursor#22 = (byte*) line_cursor#17 [phi:mul_results_compare::@14->print_ln#0] -- register_copy - jsr print_ln - //SEG97 [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::mul_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) -- pbuz1=pbuz2 - lda line_cursor - sta char_cursor - lda line_cursor+1 - sta char_cursor+1 - jmp breturn - str: .text "multiply mismatch slow:@" - str1: .text " / fast asm:" - str2: .text "multiply results match!@" -} -//SEG98 print_ln -print_ln: { - //SEG99 [49] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] - //SEG100 [49] phi (byte*) line_cursor#11 = (byte*) line_cursor#22 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy - //SEG101 print_ln::@1 - b1: - //SEG102 [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 - lda line_cursor - clc - adc #$28 - sta line_cursor - bcc !+ - inc line_cursor+1 - !: - //SEG103 [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1_lt_pbuz2_then_la1 - lda line_cursor+1 - cmp char_cursor+1 - bcc b1 - bne !+ - lda line_cursor - cmp char_cursor - bcc b1 - !: - //SEG104 print_ln::@return - //SEG105 [52] return [ line_cursor#1 ] ( main:2::mul_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::mul_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) - rts -} -//SEG106 print_str -print_str: { - .label str = 6 - //SEG107 [54] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] - //SEG108 [54] phi (byte*) char_cursor#2 = (byte*) char_cursor#71 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy - //SEG109 [54] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy - //SEG110 print_str::@1 - b1: - //SEG111 [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 - ldy #0 - lda (str),y - cmp #'@' - bne b2 - //SEG112 print_str::@return - //SEG113 [56] return [ char_cursor#2 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 ] ) - rts - //SEG114 print_str::@2 - b2: - //SEG115 [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::mul_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1=_deref_pbuz2 - ldy #0 - lda (str),y - sta (char_cursor),y - //SEG116 [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 - inc char_cursor - bne !+ - inc char_cursor+1 - !: - //SEG117 [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::mul_results_compare:13::print_str:30 [ mul_results_compare::ms#0 mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:34 [ mul_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:94 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:98 [ mul_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::mul_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 - inc str - bne !+ - inc str+1 - !: - jmp b1 -} -//SEG118 print_word -print_word: { - .label w = 6 - //SEG119 [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) -- vbuxx=_hi_vwuz1 - lda w+1 - tax - //SEG120 [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) - //SEG121 [66] phi from print_word to print_byte [phi:print_word->print_byte] - //SEG122 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#2 [phi:print_word->print_byte#0] -- register_copy - //SEG123 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy - jsr print_byte - //SEG124 print_word::@1 - //SEG125 [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) -- vbuxx=_lo_vwuz1 - lda w - tax - //SEG126 [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - //SEG127 [66] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] - //SEG128 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#11 [phi:print_word::@1->print_byte#0] -- register_copy - //SEG129 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy - jsr print_byte - //SEG130 print_word::@return - //SEG131 [65] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100 [ char_cursor#11 ] ) - rts -} -//SEG132 print_byte -print_byte: { - //SEG133 [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4 - txa - lsr - lsr - lsr - lsr - tay - //SEG134 [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy - lda hextab,y - //SEG135 [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) - //SEG136 [74] phi from print_byte to print_char [phi:print_byte->print_char] - //SEG137 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#64 [phi:print_byte->print_char#0] -- register_copy - //SEG138 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - //SEG139 print_byte::@1 - //SEG140 [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa - and #$f - //SEG141 [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa - tax - lda hextab,x - //SEG142 [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - //SEG143 [74] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - //SEG144 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#11 [phi:print_byte::@1->print_char#0] -- register_copy - //SEG145 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - //SEG146 print_byte::@return - //SEG147 [73] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) - rts - hextab: .byte '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' -} -//SEG148 print_char -print_char: { - //SEG149 [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) -- _deref_pbuz1=vbuaa - ldy #0 - sta (char_cursor),y - //SEG150 [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) -- pbuz1=_inc_pbuz1 - inc char_cursor - bne !+ - inc char_cursor+1 - !: - //SEG151 print_char::@return - //SEG152 [77] return [ char_cursor#11 ] ( main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ mul_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:69 [ mul_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ mul_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:62::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ mul_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::mul_results_compare:13::print_word:32::print_byte:64::print_char:72 [ mul_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::mul_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ mul_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::mul_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) - rts -} -//SEG153 asm_multiply -asm_multiply: { - .const memA = $fe - .const memB = $ff - .label return = 6 - //SEG154 [78] *((const byte*) asm_multiply::memA#0) ← (byte) asm_multiply::a#0 [ asm_multiply::b#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::b#0 ] ) -- _deref_pbuc1=vbuxx - stx memA - //SEG155 [79] *((const byte*) asm_multiply::memB#0) ← (byte) asm_multiply::b#0 [ ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuaa - sta memB - //SEG156 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldaasm_mul_sqr1_lo,xsm2:sbcasm_mul_sqr2_lo,xstamemAsm3:ldaasm_mul_sqr1_hi,xsm4:sbcasm_mul_sqr2_hi,xstamemB } - txa - sta sm1+1 - sta sm3+1 - eor #$ff - sta sm2+1 - sta sm4+1 - ldx memB - sec - sm1: - lda asm_mul_sqr1_lo,x - sm2: - sbc asm_mul_sqr2_lo,x - sta memA - sm3: - lda asm_mul_sqr1_hi,x - sm4: - sbc asm_mul_sqr2_hi,x - sta memB - //SEG157 [81] (word) asm_multiply::return#0 ← *((const byte*) asm_multiply::memB#0) w= *((const byte*) asm_multiply::memA#0) [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 - lda memA - sta return - lda memB - sta return+1 - //SEG158 asm_multiply::@return - //SEG159 [82] return [ asm_multiply::return#0 ] ( main:2::mul_results_compare:13::asm_multiply:25 [ mul_results_compare::a#5 mul_results_compare::b#2 mul_results_compare::ms#0 line_cursor#17 char_cursor#20 asm_multiply::return#0 ] ) - rts -} -//SEG160 slow_multiply -slow_multiply: { - .label return = 6 - .label m = 6 - .label a = 2 - //SEG161 [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) -- vbuz1_le_0_then_la1 - lda a - cmp #0 - beq b3 - //SEG162 [84] phi from slow_multiply to slow_multiply::@2 [phi:slow_multiply->slow_multiply::@2] - //SEG163 [84] phi (byte) slow_multiply::i#2 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#0] -- vbuyy=vbuc1 - ldy #0 - //SEG164 [84] phi (word) slow_multiply::m#3 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#1] -- vwuz1=vbuc1 - tya - sta m - sta m+1 - //SEG165 [84] phi from slow_multiply::@2 to slow_multiply::@2 [phi:slow_multiply::@2->slow_multiply::@2] - //SEG166 [84] phi (byte) slow_multiply::i#2 = (byte) slow_multiply::i#1 [phi:slow_multiply::@2->slow_multiply::@2#0] -- register_copy - //SEG167 [84] phi (word) slow_multiply::m#3 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@2#1] -- register_copy - //SEG168 slow_multiply::@2 - b2: - //SEG169 [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) -- vwuz1=vwuz1_plus_vbuxx - txa - clc - adc m - sta m - bcc !+ - inc m+1 - !: - //SEG170 [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy=_inc_vbuyy - iny - //SEG171 [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy_neq_vbuz1_then_la1 - cpy a - bne b2 - //SEG172 [88] phi from slow_multiply::@2 to slow_multiply::@1 [phi:slow_multiply::@2->slow_multiply::@1] - //SEG173 [88] phi (word) slow_multiply::return#0 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@1#0] -- register_copy - jmp b1 - //SEG174 [88] phi from slow_multiply to slow_multiply::@1 [phi:slow_multiply->slow_multiply::@1] - b3: - //SEG175 [88] phi (word) slow_multiply::return#0 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@1#0] -- vwuz1=vbuc1 - lda #0 - sta return - sta return+1 - //SEG176 slow_multiply::@1 - b1: - //SEG177 slow_multiply::@return - //SEG178 [89] return [ slow_multiply::return#0 ] ( main:2::mul_results_compare:13::slow_multiply:20 [ mul_results_compare::a#5 mul_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) - rts -} -//SEG179 mul_tables_compare -mul_tables_compare: { - .label asm_sqr = $a - .label kc_sqr = 4 - //SEG180 [91] phi from mul_tables_compare to mul_tables_compare::@1 [phi:mul_tables_compare->mul_tables_compare::@1] - //SEG181 [91] phi (byte*) mul_tables_compare::asm_sqr#2 = (const byte[512]) asm_mul_sqr1_lo#0 [phi:mul_tables_compare->mul_tables_compare::@1#0] -- pbuz1=pbuc1 - lda #asm_mul_sqr1_lo - sta asm_sqr+1 - //SEG182 [91] phi (byte*) mul_tables_compare::kc_sqr#2 = (const byte[512]) mul_sqr1_lo#0 [phi:mul_tables_compare->mul_tables_compare::@1#1] -- pbuz1=pbuc1 - lda #mul_sqr1_lo - sta kc_sqr+1 - //SEG183 [91] phi from mul_tables_compare::@2 to mul_tables_compare::@1 [phi:mul_tables_compare::@2->mul_tables_compare::@1] - //SEG184 [91] phi (byte*) mul_tables_compare::asm_sqr#2 = (byte*) mul_tables_compare::asm_sqr#1 [phi:mul_tables_compare::@2->mul_tables_compare::@1#0] -- register_copy - //SEG185 [91] phi (byte*) mul_tables_compare::kc_sqr#2 = (byte*) mul_tables_compare::kc_sqr#1 [phi:mul_tables_compare::@2->mul_tables_compare::@1#1] -- register_copy - //SEG186 mul_tables_compare::@1 - b1: - //SEG187 [92] if(*((byte*) mul_tables_compare::kc_sqr#2)==*((byte*) mul_tables_compare::asm_sqr#2)) goto mul_tables_compare::@2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) -- _deref_pbuz1_eq__deref_pbuz2_then_la1 - ldy #0 - lda (kc_sqr),y - cmp (asm_sqr),y - beq b2 - //SEG188 mul_tables_compare::@3 - //SEG189 [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) -- _deref_pbuc1=vbuc2 - lda #2 - sta BGCOL - //SEG190 [94] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#2 ] ) - //SEG191 [53] phi from mul_tables_compare::@3 to print_str [phi:mul_tables_compare::@3->print_str] - //SEG192 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@3->print_str#0] -- pbuz1=pbuc1 - lda #<$400 - sta char_cursor - lda #>$400 - sta char_cursor+1 - //SEG193 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str [phi:mul_tables_compare::@3->print_str#1] -- pbuz1=pbuc1 - lda #str - sta print_str.str+1 - jsr print_str - //SEG194 mul_tables_compare::@6 - //SEG195 [95] (word) print_word::w#0 ← ((word)) (byte*) mul_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#0 mul_tables_compare::kc_sqr#2 ] ) -- vwuz1=_word_pbuz2 - lda asm_sqr - sta print_word.w - lda asm_sqr+1 - sta print_word.w+1 - //SEG196 [96] call print_word param-assignment [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 mul_tables_compare::kc_sqr#2 ] ) - //SEG197 [60] phi from mul_tables_compare::@6 to print_word [phi:mul_tables_compare::@6->print_word] - //SEG198 [60] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:mul_tables_compare::@6->print_word#0] -- register_copy - jsr print_word - //SEG199 [97] phi from mul_tables_compare::@6 to mul_tables_compare::@7 [phi:mul_tables_compare::@6->mul_tables_compare::@7] - //SEG200 mul_tables_compare::@7 - //SEG201 [98] call print_str param-assignment [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 mul_tables_compare::kc_sqr#2 ] ) - //SEG202 [53] phi from mul_tables_compare::@7 to print_str [phi:mul_tables_compare::@7->print_str] - //SEG203 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:mul_tables_compare::@7->print_str#0] -- register_copy - //SEG204 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str1 [phi:mul_tables_compare::@7->print_str#1] -- pbuz1=pbuc1 - lda #str1 - sta print_str.str+1 - jsr print_str - //SEG205 mul_tables_compare::@8 - //SEG206 [99] (word) print_word::w#1 ← ((word)) (byte*) mul_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) -- vwuz1=_word_pbuz2 - lda kc_sqr - sta print_word.w - lda kc_sqr+1 - sta print_word.w+1 - //SEG207 [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::mul_tables_compare:11 [ char_cursor#11 ] ) - //SEG208 [60] phi from mul_tables_compare::@8 to print_word [phi:mul_tables_compare::@8->print_word] - //SEG209 [60] phi (word) print_word::w#4 = (word) print_word::w#1 [phi:mul_tables_compare::@8->print_word#0] -- register_copy - jsr print_word - //SEG210 [101] phi from mul_tables_compare::@8 to mul_tables_compare::@return [phi:mul_tables_compare::@8->mul_tables_compare::@return] - //SEG211 [101] phi (byte*) line_cursor#17 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@8->mul_tables_compare::@return#0] -- pbuz1=pbuc1 - lda #<$400 - sta line_cursor - lda #>$400 - sta line_cursor+1 - //SEG212 [101] phi (byte*) char_cursor#20 = (byte*) char_cursor#11 [phi:mul_tables_compare::@8->mul_tables_compare::@return#1] -- register_copy - //SEG213 mul_tables_compare::@return - breturn: - //SEG214 [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::mul_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) - rts - //SEG215 mul_tables_compare::@2 - b2: - //SEG216 [103] (byte*) mul_tables_compare::asm_sqr#1 ← ++ (byte*) mul_tables_compare::asm_sqr#2 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#2 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 - inc asm_sqr - bne !+ - inc asm_sqr+1 - !: - //SEG217 [104] (byte*) mul_tables_compare::kc_sqr#1 ← ++ (byte*) mul_tables_compare::kc_sqr#2 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 - inc kc_sqr - bne !+ - inc kc_sqr+1 - !: - //SEG218 [105] if((byte*) mul_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto mul_tables_compare::@1 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ( main:2::mul_tables_compare:11 [ mul_tables_compare::kc_sqr#1 mul_tables_compare::asm_sqr#1 ] ) -- pbuz1_lt_pbuc1_then_la1 - lda kc_sqr+1 - cmp #>mul_sqr1_lo+$200*4 - bcc b1 - bne !+ - lda kc_sqr - cmp #mul_tables_compare::@5] - //SEG220 mul_tables_compare::@5 - //SEG221 [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::mul_tables_compare:11 [ char_cursor#2 ] ) - //SEG222 [53] phi from mul_tables_compare::@5 to print_str [phi:mul_tables_compare::@5->print_str] - //SEG223 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@5->print_str#0] -- pbuz1=pbuc1 - lda #<$400 - sta char_cursor - lda #>$400 - sta char_cursor+1 - //SEG224 [53] phi (byte*) print_str::str#9 = (const string) mul_tables_compare::str2 [phi:mul_tables_compare::@5->print_str#1] -- pbuz1=pbuc1 - lda #str2 - sta print_str.str+1 - jsr print_str - //SEG225 [108] phi from mul_tables_compare::@5 to mul_tables_compare::@10 [phi:mul_tables_compare::@5->mul_tables_compare::@10] - //SEG226 mul_tables_compare::@10 - //SEG227 [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 ] ) - //SEG228 [48] phi from mul_tables_compare::@10 to print_ln [phi:mul_tables_compare::@10->print_ln] - //SEG229 [48] phi (byte*) line_cursor#22 = ((byte*))(word/signed word) 1024 [phi:mul_tables_compare::@10->print_ln#0] -- pbuz1=pbuc1 - lda #<$400 - sta line_cursor - lda #>$400 - sta line_cursor+1 - jsr print_ln - //SEG230 [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::mul_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) -- pbuz1=pbuz2 - lda line_cursor - sta char_cursor - lda line_cursor+1 - sta char_cursor+1 - //SEG231 [101] phi from mul_tables_compare::@10 to mul_tables_compare::@return [phi:mul_tables_compare::@10->mul_tables_compare::@return] - //SEG232 [101] phi (byte*) line_cursor#17 = (byte*) line_cursor#1 [phi:mul_tables_compare::@10->mul_tables_compare::@return#0] -- register_copy - //SEG233 [101] phi (byte*) char_cursor#20 = (byte*~) char_cursor#100 [phi:mul_tables_compare::@10->mul_tables_compare::@return#1] -- register_copy - jmp breturn - str: .text "multiply table mismatch at @" - str1: .text " / @" - str2: .text "multiply tables match!@" -} -//SEG234 init_mul_tables_asm -init_mul_tables_asm: { - .const mem = $ff - //SEG235 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } - ldx #0 - txa - .byte $c9 - lb1: - tya - adc #0 - ml1: - sta asm_mul_sqr1_hi,x - tay - cmp #$40 - txa - ror - ml9: - adc #0 - sta ml9+1 - inx - ml0: - sta asm_mul_sqr1_lo,x - bne lb1 - inc ml0+2 - inc ml1+2 - clc - iny - bne lb1 - ldx #0 - ldy #$ff - !: - lda asm_mul_sqr1_hi+1,x - sta asm_mul_sqr2_hi+$100,x - lda asm_mul_sqr1_hi,x - sta asm_mul_sqr2_hi,y - lda asm_mul_sqr1_lo+1,x - sta asm_mul_sqr2_lo+$100,x - lda asm_mul_sqr1_lo,x - sta asm_mul_sqr2_lo,y - dey - inx - bne !- - //SEG236 [112] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr1_lo - sta mem - //SEG237 [113] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr1_hi - sta mem - //SEG238 [114] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr2_lo - sta mem - //SEG239 [115] *((const byte*) init_mul_tables_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_mul_tables_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 - lda asm_mul_sqr2_hi - sta mem - //SEG240 init_mul_tables_asm::@return - //SEG241 [116] return [ ] ( main:2::init_mul_tables_asm:9 [ ] ) - rts -} -//SEG242 init_mul_tables -init_mul_tables: { - .label sqr1_hi = 6 - .label sqr = 8 - .label sqr1_lo = 4 - .label x_2 = 2 - .label sqr2_hi = 6 - .label sqr2_lo = 4 - .label dir = 2 - //SEG243 [118] phi from init_mul_tables to init_mul_tables::@1 [phi:init_mul_tables->init_mul_tables::@1] - //SEG244 [118] phi (byte) init_mul_tables::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuz1=vbuc1 - lda #0 - sta x_2 - //SEG245 [118] phi (byte*) init_mul_tables::sqr1_hi#2 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 - lda #mul_sqr1_hi+1 - sta sqr1_hi+1 - //SEG246 [118] phi (byte*) init_mul_tables::sqr1_lo#2 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#2] -- pbuz1=pbuc1 - lda #mul_sqr1_lo+1 - sta sqr1_lo+1 - //SEG247 [118] phi (word) init_mul_tables::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#3] -- vwuz1=vbuc1 - lda #0 - sta sqr - sta sqr+1 - //SEG248 [118] phi (byte) init_mul_tables::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#4] -- vbuxx=vbuc1 - tax - //SEG249 [118] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] - //SEG250 [118] phi (byte) init_mul_tables::x_2#3 = (byte) init_mul_tables::x_2#2 [phi:init_mul_tables::@2->init_mul_tables::@1#0] -- register_copy - //SEG251 [118] phi (byte*) init_mul_tables::sqr1_hi#2 = (byte*) init_mul_tables::sqr1_hi#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy - //SEG252 [118] phi (byte*) init_mul_tables::sqr1_lo#2 = (byte*) init_mul_tables::sqr1_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy - //SEG253 [118] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy - //SEG254 [118] phi (byte) init_mul_tables::c#2 = (byte) init_mul_tables::c#1 [phi:init_mul_tables::@2->init_mul_tables::@1#4] -- register_copy - //SEG255 init_mul_tables::@1 - b1: - //SEG256 [119] (byte) init_mul_tables::c#1 ← ++ (byte) init_mul_tables::c#2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG257 [120] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - //SEG258 [121] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ) -- vbuaa_neq_0_then_la1 - cmp #0 - bne b2 - //SEG259 init_mul_tables::@5 - //SEG260 [122] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr#4 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] ) -- vbuz1=_inc_vbuz1 - inc x_2 - //SEG261 [123] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 - inc sqr - bne !+ - inc sqr+1 - !: - //SEG262 [124] phi from init_mul_tables::@1 init_mul_tables::@5 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2] - //SEG263 [124] phi (byte) init_mul_tables::x_2#2 = (byte) init_mul_tables::x_2#3 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#0] -- register_copy - //SEG264 [124] phi (word) init_mul_tables::sqr#3 = (word) init_mul_tables::sqr#4 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#1] -- register_copy - //SEG265 init_mul_tables::@2 - b2: - //SEG266 [125] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuaa=_lo_vwuz1 - lda sqr - //SEG267 [126] *((byte*) init_mul_tables::sqr1_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa - ldy #0 - sta (sqr1_lo),y - //SEG268 [127] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuaa=_hi_vwuz1 - lda sqr+1 - //SEG269 [128] *((byte*) init_mul_tables::sqr1_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa - sta (sqr1_hi),y - //SEG270 [129] (byte*) init_mul_tables::sqr1_hi#1 ← ++ (byte*) init_mul_tables::sqr1_hi#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 - inc sqr1_hi - bne !+ - inc sqr1_hi+1 - !: - //SEG271 [130] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr1_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- vwuz1=vwuz1_plus_vbuz2 - lda x_2 - clc - adc sqr - sta sqr - bcc !+ - inc sqr+1 - !: - //SEG272 [131] (byte*) init_mul_tables::sqr1_lo#1 ← ++ (byte*) init_mul_tables::sqr1_lo#2 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- pbuz1=_inc_pbuz1 - inc sqr1_lo - bne !+ - inc sqr1_lo+1 - !: - //SEG273 [132] if((byte*) init_mul_tables::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr1_hi#1 init_mul_tables::x_2#2 ] ) -- pbuz1_neq_pbuc1_then_la1 - lda sqr1_lo+1 - cmp #>mul_sqr1_lo+$200 - bne b1 - lda sqr1_lo - cmp #init_mul_tables::@3] - //SEG275 [133] phi (byte) init_mul_tables::dir#2 = (byte/word/signed word) 255 [phi:init_mul_tables::@2->init_mul_tables::@3#0] -- vbuz1=vbuc1 - lda #$ff - sta dir - //SEG276 [133] phi (byte*) init_mul_tables::sqr2_hi#2 = (const byte[512]) mul_sqr2_hi#0 [phi:init_mul_tables::@2->init_mul_tables::@3#1] -- pbuz1=pbuc1 - lda #mul_sqr2_hi - sta sqr2_hi+1 - //SEG277 [133] phi (byte*) init_mul_tables::sqr2_lo#2 = (const byte[512]) mul_sqr2_lo#0 [phi:init_mul_tables::@2->init_mul_tables::@3#2] -- pbuz1=pbuc1 - lda #mul_sqr2_lo - sta sqr2_lo+1 - //SEG278 [133] phi (byte) init_mul_tables::x_255#2 = ((byte))-(byte/signed byte/word/signed word) 1 [phi:init_mul_tables::@2->init_mul_tables::@3#3] -- vbuxx=vbuc1 - ldx #-1 - //SEG279 [133] phi from init_mul_tables::@4 to init_mul_tables::@3 [phi:init_mul_tables::@4->init_mul_tables::@3] - //SEG280 [133] phi (byte) init_mul_tables::dir#2 = (byte) init_mul_tables::dir#3 [phi:init_mul_tables::@4->init_mul_tables::@3#0] -- register_copy - //SEG281 [133] phi (byte*) init_mul_tables::sqr2_hi#2 = (byte*) init_mul_tables::sqr2_hi#1 [phi:init_mul_tables::@4->init_mul_tables::@3#1] -- register_copy - //SEG282 [133] phi (byte*) init_mul_tables::sqr2_lo#2 = (byte*) init_mul_tables::sqr2_lo#1 [phi:init_mul_tables::@4->init_mul_tables::@3#2] -- register_copy - //SEG283 [133] phi (byte) init_mul_tables::x_255#2 = (byte) init_mul_tables::x_255#1 [phi:init_mul_tables::@4->init_mul_tables::@3#3] -- register_copy - //SEG284 init_mul_tables::@3 - b3: - //SEG285 [134] *((byte*) init_mul_tables::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx - lda mul_sqr1_lo,x - ldy #0 - sta (sqr2_lo),y - //SEG286 [135] *((byte*) init_mul_tables::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_mul_tables::x_255#2) [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_hi#2 init_mul_tables::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx - lda mul_sqr1_hi,x - sta (sqr2_hi),y - //SEG287 [136] (byte*) init_mul_tables::sqr2_hi#1 ← ++ (byte*) init_mul_tables::sqr2_hi#2 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#2 init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::sqr2_hi#1 ] ) -- pbuz1=_inc_pbuz1 - inc sqr2_hi - bne !+ - inc sqr2_hi+1 - !: - //SEG288 [137] (byte) init_mul_tables::x_255#1 ← (byte) init_mul_tables::x_255#2 + (byte) init_mul_tables::dir#2 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) -- vbuxx=vbuxx_plus_vbuz1 - txa - clc - adc dir - tax - //SEG289 [138] if((byte) init_mul_tables::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@12 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ( main:2::init_mul_tables:7 [ init_mul_tables::sqr2_lo#2 init_mul_tables::dir#2 init_mul_tables::x_255#1 init_mul_tables::sqr2_hi#1 ] ) -- vbuxx_neq_0_then_la1 - cpx #0 - bne b4 - //SEG290 [139] phi from init_mul_tables::@3 to init_mul_tables::@4 [phi:init_mul_tables::@3->init_mul_tables::@4] - //SEG291 [139] phi (byte) init_mul_tables::dir#3 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables::@3->init_mul_tables::@4#0] -- vbuz1=vbuc1 - lda #1 - sta dir - //SEG292 init_mul_tables::@4 - b4: - //SEG293 [140] (byte*) init_mul_tables::sqr2_lo#1 ← ++ (byte*) init_mul_tables::sqr2_lo#2 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) -- pbuz1=_inc_pbuz1 - inc sqr2_lo - bne !+ - inc sqr2_lo+1 - !: - //SEG294 [141] if((byte*) init_mul_tables::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_mul_tables::@3 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ( main:2::init_mul_tables:7 [ init_mul_tables::x_255#1 init_mul_tables::sqr2_lo#1 init_mul_tables::sqr2_hi#1 init_mul_tables::dir#3 ] ) -- pbuz1_neq_pbuc1_then_la1 - lda sqr2_lo+1 - cmp #>mul_sqr2_lo+$1ff - bne b3 - lda sqr2_lo - cmp #init_mul_tables::@12] - //SEG301 init_mul_tables::@12 - //SEG302 [139] phi from init_mul_tables::@12 to init_mul_tables::@4 [phi:init_mul_tables::@12->init_mul_tables::@4] - //SEG303 [139] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy -} -//SEG304 print_cls -print_cls: { - .label sc = 4 - //SEG305 [147] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] - //SEG306 [147] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta sc - lda #>$400 - sta sc+1 - //SEG307 [147] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] - //SEG308 [147] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy - //SEG309 print_cls::@1 - b1: - //SEG310 [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 - ldy #0 - lda #' ' - sta (sc),y - //SEG311 [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - //SEG312 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 - lda sc+1 - cmp #>$400+$3e8 - bne b1 - lda sc - cmp #<$400+$3e8 - bne b1 - //SEG313 print_cls::@return - //SEG314 [151] return [ ] ( main:2::print_cls:5 [ ] ) - rts -} - .align $100 - mul_sqr1_lo: .fill $200, 0 - .align $100 - mul_sqr1_hi: .fill $200, 0 - .align $100 - mul_sqr2_lo: .fill $200, 0 - .align $100 - mul_sqr2_hi: .fill $200, 0 - .align $100 - asm_mul_sqr1_lo: .fill $200, 0 - .align $100 - asm_mul_sqr1_hi: .fill $200, 0 - .align $100 - asm_mul_sqr2_lo: .fill $200, 0 - .align $100 - asm_mul_sqr2_hi: .fill $200, 0 - diff --git a/src/test/java/dk/camelot64/kickc/test/ref/multiply.sym b/src/test/java/dk/camelot64/kickc/test/ref/multiply.sym deleted file mode 100644 index c04946c02..000000000 --- a/src/test/java/dk/camelot64/kickc/test/ref/multiply.sym +++ /dev/null @@ -1,230 +0,0 @@ -(label) @13 -(label) @begin -(label) @end -(byte*) BGCOL -(const byte*) BGCOL#0 BGCOL = ((byte*))(word) 53281 -(byte[512]) asm_mul_sqr1_hi -(const byte[512]) asm_mul_sqr1_hi#0 asm_mul_sqr1_hi = { fill( 512, 0) } -(byte[512]) asm_mul_sqr1_lo -(const byte[512]) asm_mul_sqr1_lo#0 asm_mul_sqr1_lo = { fill( 512, 0) } -(byte[512]) asm_mul_sqr2_hi -(const byte[512]) asm_mul_sqr2_hi#0 asm_mul_sqr2_hi = { fill( 512, 0) } -(byte[512]) asm_mul_sqr2_lo -(const byte[512]) asm_mul_sqr2_lo#0 asm_mul_sqr2_lo = { fill( 512, 0) } -(word()) asm_multiply((byte) asm_multiply::a , (byte) asm_multiply::b) -(label) asm_multiply::@return -(byte) asm_multiply::a -(byte) asm_multiply::a#0 reg byte x 51.5 -(byte) asm_multiply::b -(byte) asm_multiply::b#0 reg byte a 51.5 -(byte*) asm_multiply::memA -(const byte*) asm_multiply::memA#0 memA = ((byte*))(byte/word/signed word) 254 -(byte*) asm_multiply::memB -(const byte*) asm_multiply::memB#0 memB = ((byte*))(byte/word/signed word) 255 -(word) asm_multiply::return -(word) asm_multiply::return#0 return zp ZP_WORD:6 34.33333333333333 -(word) asm_multiply::return#2 return zp ZP_WORD:6 202.0 -(byte*) char_cursor -(byte*) char_cursor#1 char_cursor zp ZP_WORD:8 11.0 -(byte*~) char_cursor#100 char_cursor zp ZP_WORD:8 4.0 -(byte*) char_cursor#11 char_cursor zp ZP_WORD:8 0.823529411764706 -(byte*) char_cursor#2 char_cursor zp ZP_WORD:8 2.1818181818181817 -(byte*) char_cursor#20 char_cursor zp ZP_WORD:8 0.3333333333333333 -(byte*) char_cursor#27 char_cursor zp ZP_WORD:8 40.0 -(byte*) char_cursor#41 char_cursor zp ZP_WORD:8 4.0 -(byte*) char_cursor#64 char_cursor zp ZP_WORD:8 2.0 -(byte*) char_cursor#71 char_cursor zp ZP_WORD:8 10.0 -(byte*~) char_cursor#89 char_cursor zp ZP_WORD:8 4.0 -(void()) init_mul_tables() -(byte~) init_mul_tables::$2 reg byte a 22.0 -(byte~) init_mul_tables::$5 reg byte a 22.0 -(byte~) init_mul_tables::$6 reg byte a 22.0 -(label) init_mul_tables::@1 -(label) init_mul_tables::@12 -(label) init_mul_tables::@2 -(label) init_mul_tables::@3 -(label) init_mul_tables::@4 -(label) init_mul_tables::@5 -(label) init_mul_tables::@8 -(label) init_mul_tables::@return -(byte) init_mul_tables::c -(byte) init_mul_tables::c#1 reg byte x 2.357142857142857 -(byte) init_mul_tables::c#2 reg byte x 22.0 -(byte) init_mul_tables::dir -(byte) init_mul_tables::dir#2 dir zp ZP_BYTE:2 4.714285714285714 -(byte) init_mul_tables::dir#3 dir zp ZP_BYTE:2 7.333333333333333 -(word) init_mul_tables::sqr -(word) init_mul_tables::sqr#1 sqr zp ZP_WORD:8 7.333333333333333 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:8 22.0 -(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:8 9.166666666666666 -(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:8 6.6000000000000005 -(byte*) init_mul_tables::sqr1_hi -(byte*) init_mul_tables::sqr1_hi#1 sqr1_hi zp ZP_WORD:6 5.5 -(byte*) init_mul_tables::sqr1_hi#2 sqr1_hi zp ZP_WORD:6 3.0 -(byte*) init_mul_tables::sqr1_lo -(byte*) init_mul_tables::sqr1_lo#1 sqr1_lo zp ZP_WORD:4 16.5 -(byte*) init_mul_tables::sqr1_lo#2 sqr1_lo zp ZP_WORD:4 2.5384615384615383 -(byte*) init_mul_tables::sqr2_hi -(byte*) init_mul_tables::sqr2_hi#1 sqr2_hi zp ZP_WORD:6 3.142857142857143 -(byte*) init_mul_tables::sqr2_hi#2 sqr2_hi zp ZP_WORD:6 11.0 -(byte*) init_mul_tables::sqr2_lo -(byte*) init_mul_tables::sqr2_lo#1 sqr2_lo zp ZP_WORD:4 16.5 -(byte*) init_mul_tables::sqr2_lo#2 sqr2_lo zp ZP_WORD:4 4.125 -(byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_2#1 x_2 zp ZP_BYTE:2 11.0 -(byte) init_mul_tables::x_2#2 x_2 zp ZP_BYTE:2 4.888888888888889 -(byte) init_mul_tables::x_2#3 x_2 zp ZP_BYTE:2 8.25 -(byte) init_mul_tables::x_255 -(byte) init_mul_tables::x_255#1 reg byte x 5.5 -(byte) init_mul_tables::x_255#2 reg byte x 11.0 -(void()) init_mul_tables_asm() -(label) init_mul_tables_asm::@return -(byte*) init_mul_tables_asm::mem -(const byte*) init_mul_tables_asm::mem#0 mem = ((byte*))(byte/word/signed word) 255 -(byte*) line_cursor -(byte*) line_cursor#1 line_cursor zp ZP_WORD:4 5.857142857142857 -(byte*) line_cursor#11 line_cursor zp ZP_WORD:4 24.0 -(byte*) line_cursor#17 line_cursor zp ZP_WORD:4 0.18181818181818182 -(byte*) line_cursor#19 line_cursor zp ZP_WORD:4 40.0 -(byte*) line_cursor#22 line_cursor zp ZP_WORD:4 4.0 -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@3 -(label) main::@4 -(label) main::@return -(void()) mul_results_compare() -(label) mul_results_compare::@1 -(label) mul_results_compare::@10 -(label) mul_results_compare::@11 -(label) mul_results_compare::@12 -(label) mul_results_compare::@14 -(label) mul_results_compare::@2 -(label) mul_results_compare::@3 -(label) mul_results_compare::@4 -(label) mul_results_compare::@6 -(label) mul_results_compare::@7 -(label) mul_results_compare::@8 -(label) mul_results_compare::@9 -(label) mul_results_compare::@return -(byte) mul_results_compare::a -(byte) mul_results_compare::a#1 a zp ZP_BYTE:2 16.5 -(byte) mul_results_compare::a#5 a zp ZP_BYTE:2 14.933333333333332 -(byte) mul_results_compare::b -(byte) mul_results_compare::b#1 b zp ZP_BYTE:3 151.5 -(byte) mul_results_compare::b#2 b zp ZP_BYTE:3 33.666666666666664 -(word) mul_results_compare::ma -(word) mul_results_compare::ma#0 ma zp ZP_WORD:12 25.5 -(word) mul_results_compare::ms -(word) mul_results_compare::ms#0 ms zp ZP_WORD:10 22.666666666666664 -(const string) mul_results_compare::str str = (string) "multiply mismatch slow:@" -(const string) mul_results_compare::str1 str1 = (string) " / fast asm:" -(const string) mul_results_compare::str2 str2 = (string) "multiply results match!@" -(byte[512]) mul_sqr1_hi -(const byte[512]) mul_sqr1_hi#0 mul_sqr1_hi = { fill( 512, 0) } -(byte[512]) mul_sqr1_lo -(const byte[512]) mul_sqr1_lo#0 mul_sqr1_lo = { fill( 512, 0) } -(byte[512]) mul_sqr2_hi -(const byte[512]) mul_sqr2_hi#0 mul_sqr2_hi = { fill( 512, 0) } -(byte[512]) mul_sqr2_lo -(const byte[512]) mul_sqr2_lo#0 mul_sqr2_lo = { fill( 512, 0) } -(void()) mul_tables_compare() -(label) mul_tables_compare::@1 -(label) mul_tables_compare::@10 -(label) mul_tables_compare::@2 -(label) mul_tables_compare::@3 -(label) mul_tables_compare::@5 -(label) mul_tables_compare::@6 -(label) mul_tables_compare::@7 -(label) mul_tables_compare::@8 -(label) mul_tables_compare::@return -(byte*) mul_tables_compare::asm_sqr -(byte*) mul_tables_compare::asm_sqr#1 asm_sqr zp ZP_WORD:10 7.333333333333333 -(byte*) mul_tables_compare::asm_sqr#2 asm_sqr zp ZP_WORD:10 8.75 -(byte*) mul_tables_compare::kc_sqr -(byte*) mul_tables_compare::kc_sqr#1 kc_sqr zp ZP_WORD:4 16.5 -(byte*) mul_tables_compare::kc_sqr#2 kc_sqr zp ZP_WORD:4 3.8888888888888893 -(const string) mul_tables_compare::str str = (string) "multiply table mismatch at @" -(const string) mul_tables_compare::str1 str1 = (string) " / @" -(const string) mul_tables_compare::str2 str2 = (string) "multiply tables match!@" -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 reg byte y 4.0 -(byte~) print_byte::$2 reg byte a 4.0 -(label) print_byte::@1 -(label) print_byte::@return -(byte) print_byte::b -(byte) print_byte::b#0 reg byte x 4.0 -(byte) print_byte::b#1 reg byte x 4.0 -(byte) print_byte::b#2 reg byte x 2.0 -(byte[]) print_byte::hextab -(const byte[]) print_byte::hextab#0 hextab = { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } -(void()) print_char((byte) print_char::ch) -(label) print_char::@return -(byte) print_char::ch -(byte) print_char::ch#0 reg byte a 4.0 -(byte) print_char::ch#1 reg byte a 4.0 -(byte) print_char::ch#2 reg byte a 6.0 -(void()) print_cls() -(label) print_cls::@1 -(label) print_cls::@return -(byte*) print_cls::sc -(byte*) print_cls::sc#1 sc zp ZP_WORD:4 16.5 -(byte*) print_cls::sc#2 sc zp ZP_WORD:4 16.5 -(void()) print_ln() -(label) print_ln::@1 -(label) print_ln::@return -(void()) print_str((byte*) print_str::str) -(label) print_str::@1 -(label) print_str::@2 -(label) print_str::@return -(byte*) print_str::str -(byte*) print_str::str#0 str zp ZP_WORD:6 22.0 -(byte*) print_str::str#7 str zp ZP_WORD:6 11.5 -(byte*) print_str::str#9 str zp ZP_WORD:6 2.0 -(void()) print_word((word) print_word::w) -(label) print_word::@1 -(label) print_word::@return -(word) print_word::w -(word) print_word::w#0 w zp ZP_WORD:6 4.0 -(word) print_word::w#1 w zp ZP_WORD:6 4.0 -(word) print_word::w#2 w zp ZP_WORD:6 4.0 -(word) print_word::w#3 w zp ZP_WORD:6 4.0 -(word) print_word::w#4 w zp ZP_WORD:6 3.9999999999999996 -(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) -(label) slow_multiply::@1 -(label) slow_multiply::@2 -(label) slow_multiply::@return -(byte) slow_multiply::a -(byte) slow_multiply::a#0 a zp ZP_BYTE:2 157.71428571428572 -(byte) slow_multiply::b -(byte) slow_multiply::b#0 reg byte x 183.66666666666669 -(byte) slow_multiply::i -(byte) slow_multiply::i#1 reg byte y 1501.5 -(byte) slow_multiply::i#2 reg byte y 1001.0 -(word) slow_multiply::m -(word) slow_multiply::m#1 m zp ZP_WORD:6 1001.0 -(word) slow_multiply::m#3 m zp ZP_WORD:6 2002.0 -(word) slow_multiply::return -(word) slow_multiply::return#0 return zp ZP_WORD:6 367.33333333333337 -(word) slow_multiply::return#2 return zp ZP_WORD:6 202.0 - -zp ZP_BYTE:2 [ mul_results_compare::a#5 mul_results_compare::a#1 init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 init_mul_tables::dir#2 init_mul_tables::dir#3 slow_multiply::a#0 ] -zp ZP_BYTE:3 [ mul_results_compare::b#2 mul_results_compare::b#1 ] -zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 mul_tables_compare::kc_sqr#2 mul_tables_compare::kc_sqr#1 init_mul_tables::sqr1_lo#2 init_mul_tables::sqr1_lo#1 init_mul_tables::sqr2_lo#2 init_mul_tables::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ] -zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_mul_tables::sqr1_hi#2 init_mul_tables::sqr1_hi#1 init_mul_tables::sqr2_hi#2 init_mul_tables::sqr2_hi#1 slow_multiply::return#2 asm_multiply::return#2 asm_multiply::return#0 ] -reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:8 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] -zp ZP_WORD:10 [ mul_tables_compare::asm_sqr#2 mul_tables_compare::asm_sqr#1 mul_results_compare::ms#0 ] -reg byte x [ init_mul_tables::c#2 init_mul_tables::c#1 ] -reg byte x [ init_mul_tables::x_255#2 init_mul_tables::x_255#1 ] -reg byte x [ slow_multiply::b#0 ] -reg byte x [ asm_multiply::a#0 ] -reg byte a [ asm_multiply::b#0 ] -zp ZP_WORD:12 [ mul_results_compare::ma#0 ] -reg byte y [ print_byte::$0 ] -reg byte a [ print_byte::$2 ] -reg byte a [ init_mul_tables::$2 ] -reg byte a [ init_mul_tables::$5 ] -reg byte a [ init_mul_tables::$6 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/multiply.asm b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.asm similarity index 95% rename from src/test/java/dk/camelot64/kickc/test/ref/multiply.asm rename to src/test/java/dk/camelot64/kickc/test/ref/test-multiply.asm index 290b4c8ed..9189ea182 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/multiply.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.asm @@ -9,13 +9,13 @@ main: { lda #5 sta BGCOL jsr print_cls - jsr init_mul_tables - jsr init_mul_tables_asm - jsr mul_tables_compare - jsr mul_results_compare + jsr init_multiply + jsr init_multiply_asm + jsr multiply_tables_compare + jsr multiply_results_compare rts } -mul_results_compare: { +multiply_results_compare: { .label ms = $a .label ma = $c .label b = 3 @@ -34,10 +34,10 @@ mul_results_compare: { sta ms+1 ldx a lda b - jsr asm_multiply - lda asm_multiply.return + jsr multiply + lda multiply.return sta ma - lda asm_multiply.return+1 + lda multiply.return+1 sta ma+1 lda ms cmp ma @@ -169,7 +169,7 @@ print_char: { !: rts } -asm_multiply: { +multiply: { .const memA = $fe .const memB = $ff .label return = 6 @@ -184,14 +184,14 @@ asm_multiply: { ldx memB sec sm1: - lda asm_mul_sqr1_lo,x + lda mul_sqr1_lo,x sm2: - sbc asm_mul_sqr2_lo,x + sbc mul_sqr2_lo,x sta memA sm3: - lda asm_mul_sqr1_hi,x + lda mul_sqr1_hi,x sm4: - sbc asm_mul_sqr2_hi,x + sbc mul_sqr2_hi,x sta memB lda memA sta return @@ -229,7 +229,7 @@ slow_multiply: { b1: rts } -mul_tables_compare: { +multiply_tables_compare: { .label asm_sqr = $a .label kc_sqr = 4 lda # (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) + [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) + [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [65] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + to:@return +print_byte: scope:[print_byte] from print_word print_word::@1 + [66] (byte*) char_cursor#64 ← phi( print_word/(byte*) char_cursor#2 print_word::@1/(byte*) char_cursor#11 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) + [66] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) + [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) + [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) + [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) + [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) + [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [73] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + [74] (byte*) char_cursor#41 ← phi( print_byte/(byte*) char_cursor#64 print_byte::@1/(byte*) char_cursor#11 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) + [74] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) + [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) + [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [77] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) + to:@return +multiply: scope:[multiply] from multiply_results_compare::@8 + [78] *((const byte*) multiply::memA#0) ← (byte) multiply::a#0 [ multiply::b#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::b#0 ] ) + [79] *((const byte*) multiply::memB#0) ← (byte) multiply::b#0 [ ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) + asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + [81] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) + to:multiply::@return +multiply::@return: scope:[multiply] from multiply + [82] return [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) + to:@return +slow_multiply: scope:[slow_multiply] from multiply_results_compare::@2 + [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) + to:slow_multiply::@2 +slow_multiply::@2: scope:[slow_multiply] from slow_multiply slow_multiply::@2 + [84] (byte) slow_multiply::i#2 ← phi( slow_multiply::@2/(byte) slow_multiply::i#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) + [84] (word) slow_multiply::m#3 ← phi( slow_multiply::@2/(word) slow_multiply::m#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) + [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) + [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) + [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) + to:slow_multiply::@1 +slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@2 + [88] (word) slow_multiply::return#0 ← phi( slow_multiply/(byte/signed byte/word/signed word) 0 slow_multiply::@2/(word) slow_multiply::m#1 ) [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) + to:slow_multiply::@return +slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 + [89] return [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) + to:@return +multiply_tables_compare: scope:[multiply_tables_compare] from main::@3 + [90] phi() [ ] ( main:2::multiply_tables_compare:11 [ ] ) + to:multiply_tables_compare::@1 +multiply_tables_compare::@1: scope:[multiply_tables_compare] from multiply_tables_compare multiply_tables_compare::@2 + [91] (byte*) multiply_tables_compare::asm_sqr#2 ← phi( multiply_tables_compare/(const byte[512]) asm_mul_sqr1_lo#0 multiply_tables_compare::@2/(byte*) multiply_tables_compare::asm_sqr#1 ) [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + [91] (byte*) multiply_tables_compare::kc_sqr#2 ← phi( multiply_tables_compare/(const byte[512]) mul_sqr1_lo#0 multiply_tables_compare::@2/(byte*) multiply_tables_compare::kc_sqr#1 ) [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + [92] if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + to:multiply_tables_compare::@3 +multiply_tables_compare::@3: scope:[multiply_tables_compare] from multiply_tables_compare::@1 + [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + [94] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + to:multiply_tables_compare::@6 +multiply_tables_compare::@6: scope:[multiply_tables_compare] from multiply_tables_compare::@3 + [95] (word) print_word::w#0 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ) + [96] call print_word param-assignment [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ) + to:multiply_tables_compare::@7 +multiply_tables_compare::@7: scope:[multiply_tables_compare] from multiply_tables_compare::@6 + [97] phi() [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ) + [98] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ) + to:multiply_tables_compare::@8 +multiply_tables_compare::@8: scope:[multiply_tables_compare] from multiply_tables_compare::@7 + [99] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) + [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 ] ) + to:multiply_tables_compare::@return +multiply_tables_compare::@return: scope:[multiply_tables_compare] from multiply_tables_compare::@10 multiply_tables_compare::@8 + [101] (byte*) line_cursor#17 ← phi( multiply_tables_compare::@10/(byte*) line_cursor#1 multiply_tables_compare::@8/((byte*))(word/signed word) 1024 ) [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + [101] (byte*) char_cursor#20 ← phi( multiply_tables_compare::@10/(byte*~) char_cursor#100 multiply_tables_compare::@8/(byte*) char_cursor#11 ) [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + to:@return +multiply_tables_compare::@2: scope:[multiply_tables_compare] from multiply_tables_compare::@1 + [103] (byte*) multiply_tables_compare::asm_sqr#1 ← ++ (byte*) multiply_tables_compare::asm_sqr#2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ) + [104] (byte*) multiply_tables_compare::kc_sqr#1 ← ++ (byte*) multiply_tables_compare::kc_sqr#2 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) + [105] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) + to:multiply_tables_compare::@5 +multiply_tables_compare::@5: scope:[multiply_tables_compare] from multiply_tables_compare::@2 + [106] phi() [ ] ( main:2::multiply_tables_compare:11 [ ] ) + [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 ] ) + to:multiply_tables_compare::@10 +multiply_tables_compare::@10: scope:[multiply_tables_compare] from multiply_tables_compare::@5 + [108] phi() [ char_cursor#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 ] ) + [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 ] ) + [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) + to:multiply_tables_compare::@return +init_multiply_asm: scope:[init_multiply_asm] from main::@2 + asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + [112] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + [113] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + [114] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + [115] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + to:init_multiply_asm::@return +init_multiply_asm::@return: scope:[init_multiply_asm] from init_multiply_asm + [116] return [ ] ( main:2::init_multiply_asm:9 [ ] ) + to:@return +init_multiply: scope:[init_multiply] from main::@1 + [117] phi() [ ] ( main:2::init_multiply:7 [ ] ) + to:init_multiply::@1 +init_multiply::@1: scope:[init_multiply] from init_multiply init_multiply::@2 + [118] (byte) init_multiply::x_2#3 ← phi( init_multiply/(byte/signed byte/word/signed word) 0 init_multiply::@2/(byte) init_multiply::x_2#2 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (byte*) init_multiply::sqr1_hi#2 ← phi( init_multiply/(const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 init_multiply::@2/(byte*) init_multiply::sqr1_hi#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (byte*) init_multiply::sqr1_lo#2 ← phi( init_multiply/(const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 init_multiply::@2/(byte*) init_multiply::sqr1_lo#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (word) init_multiply::sqr#4 ← phi( init_multiply/(byte/signed byte/word/signed word) 0 init_multiply::@2/(word) init_multiply::sqr#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (byte) init_multiply::c#2 ← phi( init_multiply/(byte/signed byte/word/signed word) 0 init_multiply::@2/(byte) init_multiply::c#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [119] (byte) init_multiply::c#1 ← ++ (byte) init_multiply::c#2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) + [120] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ) + [121] if((byte~) init_multiply::$2!=(byte/signed byte/word/signed word) 0) goto init_multiply::@2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) + to:init_multiply::@5 +init_multiply::@5: scope:[init_multiply] from init_multiply::@1 + [122] (byte) init_multiply::x_2#1 ← ++ (byte) init_multiply::x_2#3 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ) + [123] (word) init_multiply::sqr#2 ← ++ (word) init_multiply::sqr#4 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ) + to:init_multiply::@2 +init_multiply::@2: scope:[init_multiply] from init_multiply::@1 init_multiply::@5 + [124] (byte) init_multiply::x_2#2 ← phi( init_multiply::@1/(byte) init_multiply::x_2#3 init_multiply::@5/(byte) init_multiply::x_2#1 ) [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [124] (word) init_multiply::sqr#3 ← phi( init_multiply::@1/(word) init_multiply::sqr#4 init_multiply::@5/(word) init_multiply::sqr#2 ) [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [125] (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ) + [126] *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [127] (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ) + [128] *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [129] (byte*) init_multiply::sqr1_hi#1 ← ++ (byte*) init_multiply::sqr1_hi#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [130] (word) init_multiply::sqr#1 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) + [131] (byte*) init_multiply::sqr1_lo#1 ← ++ (byte*) init_multiply::sqr1_lo#2 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) + [132] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_multiply::@1 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) + to:init_multiply::@3 +init_multiply::@3: scope:[init_multiply] from init_multiply::@2 init_multiply::@4 + [133] (byte) init_multiply::dir#2 ← phi( init_multiply::@4/(byte) init_multiply::dir#3 init_multiply::@2/(byte/word/signed word) 255 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [133] (byte*) init_multiply::sqr2_hi#2 ← phi( init_multiply::@4/(byte*) init_multiply::sqr2_hi#1 init_multiply::@2/(const byte[512]) mul_sqr2_hi#0 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [133] (byte*) init_multiply::sqr2_lo#2 ← phi( init_multiply::@4/(byte*) init_multiply::sqr2_lo#1 init_multiply::@2/(const byte[512]) mul_sqr2_lo#0 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [133] (byte) init_multiply::x_255#2 ← phi( init_multiply::@4/(byte) init_multiply::x_255#1 init_multiply::@2/((byte))-(byte/signed byte/word/signed word) 1 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [134] *((byte*) init_multiply::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [135] *((byte*) init_multiply::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [136] (byte*) init_multiply::sqr2_hi#1 ← ++ (byte*) init_multiply::sqr2_hi#2 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ) + [137] (byte) init_multiply::x_255#1 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) + [138] if((byte) init_multiply::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_multiply::@12 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) + to:init_multiply::@4 +init_multiply::@4: scope:[init_multiply] from init_multiply::@12 init_multiply::@3 + [139] (byte) init_multiply::dir#3 ← phi( init_multiply::@12/(byte) init_multiply::dir#2 init_multiply::@3/(byte/signed byte/word/signed word) 1 ) [ init_multiply::sqr2_lo#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) + [140] (byte*) init_multiply::sqr2_lo#1 ← ++ (byte*) init_multiply::sqr2_lo#2 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) + [141] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_multiply::@3 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) + to:init_multiply::@8 +init_multiply::@8: scope:[init_multiply] from init_multiply::@4 + [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) + [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) + to:init_multiply::@return +init_multiply::@return: scope:[init_multiply] from init_multiply::@8 + [144] return [ ] ( main:2::init_multiply:7 [ ] ) + to:@return +init_multiply::@12: scope:[init_multiply] from init_multiply::@3 + [145] phi() [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) + to:init_multiply::@4 +print_cls: scope:[print_cls] from main + [146] phi() [ ] ( main:2::print_cls:5 [ ] ) + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [147] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [151] return [ ] ( main:2::print_cls:5 [ ] ) + to:@return 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 new file mode 100644 index 000000000..f8497a340 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log @@ -0,0 +1,7134 @@ +PARSING src/test/java/dk/camelot64/kickc/test/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 + +import "print.kc" +import "multiply.kc" + +byte* BGCOL = $d021; + +void main() { + *BGCOL = 5; + print_cls(); + init_multiply(); + init_multiply_asm(); + multiply_tables_compare(); + multiply_results_compare(); +} + +// Perform a slow multiplication by repeated addition +word slow_multiply(byte a, byte b) { + word m = 0; + if(a>0) { + for(byte i = 0; i!=a; i++) { + m = m + b; + } + } + return m; +} + +// ASM based multiplication tables +// <(( x * x )/4) +byte[512] align($100) asm_mul_sqr1_lo; +// >(( x * x )/4) +byte[512] align($100) asm_mul_sqr1_hi; +// <((( x - 255) * ( x - 255 ))/4) +byte[512] align($100) asm_mul_sqr2_lo; +// >((( x - 255) * ( x - 255 ))/4) +byte[512] align($100) asm_mul_sqr2_hi; +// Initialize the multiplication tables using ASM code from +// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication +void init_multiply_asm() { + asm{ + ldx #$00 + txa + .byte $c9 + lb1: + tya + adc #$00 + ml1: + sta asm_mul_sqr1_hi,x + tay + cmp #$40 + txa + ror + ml9: + adc #$00 + sta ml9+1 + inx + ml0: + sta asm_mul_sqr1_lo,x + bne lb1 + inc ml0+2 + inc ml1+2 + clc + iny + bne lb1 + ldx #$00 + ldy #$ff + !: + lda asm_mul_sqr1_hi+1,x + sta asm_mul_sqr2_hi+$100,x + lda asm_mul_sqr1_hi,x + sta asm_mul_sqr2_hi,y + lda asm_mul_sqr1_lo+1,x + sta asm_mul_sqr2_lo+$100,x + lda asm_mul_sqr1_lo,x + sta asm_mul_sqr2_lo,y + dey + inx + bne !- + } + // Ensure the ASM tables are not detected as unused by the optimizer + byte* mem = $ff; + *mem = *asm_mul_sqr1_lo; + *mem = *asm_mul_sqr1_hi; + *mem = *asm_mul_sqr2_lo; + *mem = *asm_mul_sqr2_hi; +} + +// Compare the ASM-based mul tables with the KC-based mul tables +// Red screen on failure - green on success +void multiply_tables_compare() { + byte* asm_sqr = asm_mul_sqr1_lo; + for( byte* kc_sqr=mul_sqr1_lo; kc_sqrw); + print_byte(>4]); + print_char(hextab[b&$f]); +} + +// Print a single char +void print_char(byte ch) { + *(char_cursor++) = ch; +} + +// Clear the screen +void print_cls() { + for(byte* sc=$0400; sc!=$0400+1000; sc++) { + *sc = ' '; + } +} + + + +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 multiply.kc +PARSING src/test/java/dk/camelot64/kickc/test/multiply.kc +// Library 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 + +// mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). +// f(x) = >(( x * x )/4) +byte[512] align($100) mul_sqr1_hi; +// g(x) = >((( x - 255) * ( x - 255 ))/4) +byte[512] align($100) mul_sqr2_hi; + +// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4) +void init_multiply() { + // Fill mul_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 + word sqr = 0; // sqr = (x*x)/4 + byte x_2 = 0; // x/2 + byte c = 0; // Counter used for determining x%2==0 + byte* sqr1_hi = mul_sqr1_hi+1; + for(byte* sqr1_lo = mul_sqr1_lo+1; sqr1_lo!=mul_sqr1_lo+512; sqr1_lo++) { + if((++c&1)==0) { + x_2++; // increase i/2 on even numbers + sqr++; // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number) + } + *sqr1_lo = sqr; + sqr = sqr + x_2; // sqr = sqr + i/2 (when uneven the 1/2 is not added here - see above) + } + // Fill mul_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x) + // g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256) + byte x_255 = (byte)-1; //Start with g(0)=f(255) + byte dir = $ff; // Decrease or increase x_255 - initially we decrease + byte* sqr2_hi = mul_sqr2_hi; + for(byte* sqr2_lo = mul_sqr2_lo; sqr2_lo!=mul_sqr2_lo+511; sqr2_lo++) { + *sqr2_lo = mul_sqr1_lo[x_255]; + *sqr2_hi++ = mul_sqr1_hi[x_255]; + x_255 = x_255 + dir; + if(x_255==0) { + dir = 1; // when x_255=0 then start counting up + } + } + // Set the very last value g(511) = f(256) + *(mul_sqr2_lo+511) = *(mul_sqr1_lo+256); + *(mul_sqr2_hi+511) = *(mul_sqr1_hi+256); +} + +// Fast multiply two unsigned bytes to a word result +word multiply(byte a, byte b) { + const byte* memA = $fe; + const byte* memB = $ff; + *memA = a; + *memB = b; + asm { + lda memA + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + ldx memB + sec + sm1: + lda mul_sqr1_lo,x + sm2: + sbc mul_sqr2_lo,x + sta memA + sm3: + lda mul_sqr1_hi,x + sm4: + sbc mul_sqr2_hi,x + sta memB + } + return { *memB, *memA }; +} +Adding pre/post-modifier (byte) init_multiply::c ← ++ (byte) init_multiply::c +Adding pre/post-modifier (byte) init_multiply::x_2 ← ++ (byte) init_multiply::x_2 +Adding pre/post-modifier (word) init_multiply::sqr ← ++ (word) init_multiply::sqr +Adding pre/post-modifier (byte*) init_multiply::sqr1_hi ← ++ (byte*) init_multiply::sqr1_hi +Adding pre/post-modifier (byte*) init_multiply::sqr1_lo ← ++ (byte*) init_multiply::sqr1_lo +Adding pre/post-modifier (byte*) init_multiply::sqr2_hi ← ++ (byte*) init_multiply::sqr2_hi +Adding pre/post-modifier (byte*) init_multiply::sqr2_lo ← ++ (byte*) init_multiply::sqr2_lo +Adding pre/post-modifier (byte) slow_multiply::i ← ++ (byte) slow_multiply::i +Adding pre/post-modifier (byte*) multiply_tables_compare::asm_sqr ← ++ (byte*) multiply_tables_compare::asm_sqr +Adding pre/post-modifier (byte*) multiply_tables_compare::kc_sqr ← ++ (byte*) multiply_tables_compare::kc_sqr + +STATEMENTS + (byte*) line_cursor ← (word/signed word) 1024 + (byte*) char_cursor ← (byte*) line_cursor +proc (void()) print_str((byte*) print_str::str) +print_str::@1: + (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + goto print_str::@3 +print_str::@2: + *((byte*) char_cursor) ← *((byte*) print_str::str) + (byte*) char_cursor ← ++ (byte*) char_cursor + (byte*) print_str::str ← ++ (byte*) print_str::str + goto print_str::@1 +print_str::@3: +print_str::@return: + return +endproc // print_str() +proc (void()) print_ln() +print_ln::@1: + (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word) 40 + (byte*) line_cursor ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor + if((boolean~) print_ln::$1) goto print_ln::@1 + (byte*) char_cursor ← (byte*) line_cursor +print_ln::@return: + return +endproc // print_ln() +proc (void()) print_word((word) print_word::w) + (byte~) print_word::$0 ← > (word) print_word::w + (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 + (byte~) print_word::$2 ← < (word) print_word::w + (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 +print_word::@return: + return +endproc // print_word() +proc (void()) print_byte((byte) print_byte::b) + (byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } + (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4 + (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) + (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15 + (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) +print_byte::@return: + return +endproc // print_byte() +proc (void()) print_char((byte) print_char::ch) + *((byte*) char_cursor) ← (byte) print_char::ch + (byte*) char_cursor ← ++ (byte*) char_cursor +print_char::@return: + return +endproc // print_char() +proc (void()) print_cls() + (byte*) print_cls::sc ← (word/signed word) 1024 +print_cls::@1: + *((byte*) print_cls::sc) ← (byte) ' ' + (byte*) print_cls::sc ← ++ (byte*) print_cls::sc + (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 +print_cls::@return: + return +endproc // print_cls() + (byte[512]) mul_sqr1_lo ← { fill( 512, 0) } + (byte[512]) mul_sqr1_hi ← { fill( 512, 0) } + (byte[512]) mul_sqr2_lo ← { fill( 512, 0) } + (byte[512]) mul_sqr2_hi ← { fill( 512, 0) } +proc (void()) init_multiply() + (word) init_multiply::sqr ← (byte/signed byte/word/signed word) 0 + (byte) init_multiply::x_2 ← (byte/signed byte/word/signed word) 0 + (byte) init_multiply::c ← (byte/signed byte/word/signed word) 0 + (byte*~) init_multiply::$0 ← (byte[512]) mul_sqr1_hi + (byte/signed byte/word/signed word) 1 + (byte*) init_multiply::sqr1_hi ← (byte*~) init_multiply::$0 + (byte*~) init_multiply::$1 ← (byte[512]) mul_sqr1_lo + (byte/signed byte/word/signed word) 1 + (byte*) init_multiply::sqr1_lo ← (byte*~) init_multiply::$1 +init_multiply::@1: + (byte) init_multiply::c ← ++ (byte) init_multiply::c + (byte~) init_multiply::$2 ← (byte) init_multiply::c & (byte/signed byte/word/signed word) 1 + (boolean~) init_multiply::$3 ← (byte~) init_multiply::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_multiply::$4 ← ! (boolean~) init_multiply::$3 + if((boolean~) init_multiply::$4) goto init_multiply::@2 + (byte) init_multiply::x_2 ← ++ (byte) init_multiply::x_2 + (word) init_multiply::sqr ← ++ (word) init_multiply::sqr +init_multiply::@2: + (byte~) init_multiply::$5 ← < (word) init_multiply::sqr + *((byte*) init_multiply::sqr1_lo) ← (byte~) init_multiply::$5 + (byte~) init_multiply::$6 ← > (word) init_multiply::sqr + *((byte*) init_multiply::sqr1_hi) ← (byte~) init_multiply::$6 + (byte*) init_multiply::sqr1_hi ← ++ (byte*) init_multiply::sqr1_hi + (word~) init_multiply::$7 ← (word) init_multiply::sqr + (byte) init_multiply::x_2 + (word) init_multiply::sqr ← (word~) init_multiply::$7 + (byte*) init_multiply::sqr1_lo ← ++ (byte*) init_multiply::sqr1_lo + (byte*~) init_multiply::$8 ← (byte[512]) mul_sqr1_lo + (word/signed word) 512 + (boolean~) init_multiply::$9 ← (byte*) init_multiply::sqr1_lo != (byte*~) init_multiply::$8 + if((boolean~) init_multiply::$9) goto init_multiply::@1 + (signed byte/signed word~) init_multiply::$10 ← - (byte/signed byte/word/signed word) 1 + (byte~) init_multiply::$11 ← ((byte)) (signed byte/signed word~) init_multiply::$10 + (byte) init_multiply::x_255 ← (byte~) init_multiply::$11 + (byte) init_multiply::dir ← (byte/word/signed word) 255 + (byte*) init_multiply::sqr2_hi ← (byte[512]) mul_sqr2_hi + (byte*) init_multiply::sqr2_lo ← (byte[512]) mul_sqr2_lo +init_multiply::@3: + *((byte*) init_multiply::sqr2_lo) ← *((byte[512]) mul_sqr1_lo + (byte) init_multiply::x_255) + *((byte*) init_multiply::sqr2_hi) ← *((byte[512]) mul_sqr1_hi + (byte) init_multiply::x_255) + (byte*) init_multiply::sqr2_hi ← ++ (byte*) init_multiply::sqr2_hi + (byte/word~) init_multiply::$12 ← (byte) init_multiply::x_255 + (byte) init_multiply::dir + (byte) init_multiply::x_255 ← (byte/word~) init_multiply::$12 + (boolean~) init_multiply::$13 ← (byte) init_multiply::x_255 == (byte/signed byte/word/signed word) 0 + (boolean~) init_multiply::$14 ← ! (boolean~) init_multiply::$13 + if((boolean~) init_multiply::$14) goto init_multiply::@4 + (byte) init_multiply::dir ← (byte/signed byte/word/signed word) 1 +init_multiply::@4: + (byte*) init_multiply::sqr2_lo ← ++ (byte*) init_multiply::sqr2_lo + (byte*~) init_multiply::$15 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 + (boolean~) init_multiply::$16 ← (byte*) init_multiply::sqr2_lo != (byte*~) init_multiply::$15 + if((boolean~) init_multiply::$16) goto init_multiply::@3 + (byte*~) init_multiply::$17 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 + (byte*~) init_multiply::$18 ← (byte[512]) mul_sqr1_lo + (word/signed word) 256 + *((byte*~) init_multiply::$17) ← *((byte*~) init_multiply::$18) + (byte*~) init_multiply::$19 ← (byte[512]) mul_sqr2_hi + (word/signed word) 511 + (byte*~) init_multiply::$20 ← (byte[512]) mul_sqr1_hi + (word/signed word) 256 + *((byte*~) init_multiply::$19) ← *((byte*~) init_multiply::$20) +init_multiply::@return: + return +endproc // init_multiply() +proc (word()) multiply((byte) multiply::a , (byte) multiply::b) + (byte*) multiply::memA ← (byte/word/signed word) 254 + (byte*) multiply::memB ← (byte/word/signed word) 255 + *((byte*) multiply::memA) ← (byte) multiply::a + *((byte*) multiply::memB) ← (byte) multiply::b + asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + (word) multiply::return ← { *((byte*) multiply::memB), *((byte*) multiply::memA) } + goto multiply::@return +multiply::@return: + (word) multiply::return ← (word) multiply::return + return (word) multiply::return +endproc // multiply() + (byte*) BGCOL ← (word) 53281 +proc (void()) main() + *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 5 + (void~) main::$0 ← call print_cls + (void~) main::$1 ← call init_multiply + (void~) main::$2 ← call init_multiply_asm + (void~) main::$3 ← call multiply_tables_compare + (void~) main::$4 ← call multiply_results_compare +main::@return: + return +endproc // main() +proc (word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) + (word) slow_multiply::m ← (byte/signed byte/word/signed word) 0 + (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a > (byte/signed byte/word/signed word) 0 + (boolean~) slow_multiply::$1 ← ! (boolean~) slow_multiply::$0 + if((boolean~) slow_multiply::$1) goto slow_multiply::@1 + (byte) slow_multiply::i ← (byte/signed byte/word/signed word) 0 +slow_multiply::@2: + (word~) slow_multiply::$2 ← (word) slow_multiply::m + (byte) slow_multiply::b + (word) slow_multiply::m ← (word~) slow_multiply::$2 + (byte) slow_multiply::i ← ++ (byte) slow_multiply::i + (boolean~) slow_multiply::$3 ← (byte) slow_multiply::i != (byte) slow_multiply::a + if((boolean~) slow_multiply::$3) goto slow_multiply::@2 +slow_multiply::@1: + (word) slow_multiply::return ← (word) slow_multiply::m + goto slow_multiply::@return +slow_multiply::@return: + (word) slow_multiply::return ← (word) slow_multiply::return + return (word) slow_multiply::return +endproc // slow_multiply() + (byte[512]) asm_mul_sqr1_lo ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr1_hi ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr2_lo ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr2_hi ← { fill( 512, 0) } +proc (void()) init_multiply_asm() + asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + (byte*) init_multiply_asm::mem ← (byte/word/signed word) 255 + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_lo) + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_hi) + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr2_lo) + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr2_hi) +init_multiply_asm::@return: + return +endproc // init_multiply_asm() +proc (void()) multiply_tables_compare() + (byte*) multiply_tables_compare::asm_sqr ← (byte[512]) asm_mul_sqr1_lo + (byte*) multiply_tables_compare::kc_sqr ← (byte[512]) mul_sqr1_lo +multiply_tables_compare::@1: + (boolean~) multiply_tables_compare::$0 ← *((byte*) multiply_tables_compare::kc_sqr) != *((byte*) multiply_tables_compare::asm_sqr) + (boolean~) multiply_tables_compare::$1 ← ! (boolean~) multiply_tables_compare::$0 + if((boolean~) multiply_tables_compare::$1) goto multiply_tables_compare::@2 + *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 + (void~) multiply_tables_compare::$2 ← call print_str (string) "multiply table mismatch at @" + (word~) multiply_tables_compare::$3 ← ((word)) (byte*) multiply_tables_compare::asm_sqr + (void~) multiply_tables_compare::$4 ← call print_word (word~) multiply_tables_compare::$3 + (void~) multiply_tables_compare::$5 ← call print_str (string) " / @" + (word~) multiply_tables_compare::$6 ← ((word)) (byte*) multiply_tables_compare::kc_sqr + (void~) multiply_tables_compare::$7 ← call print_word (word~) multiply_tables_compare::$6 + goto multiply_tables_compare::@return +multiply_tables_compare::@2: + (byte*) multiply_tables_compare::asm_sqr ← ++ (byte*) multiply_tables_compare::asm_sqr + (byte*) multiply_tables_compare::kc_sqr ← ++ (byte*) multiply_tables_compare::kc_sqr + (word/signed word~) multiply_tables_compare::$8 ← (word/signed word) 512 * (byte/signed byte/word/signed word) 4 + (byte*~) multiply_tables_compare::$9 ← (byte[512]) mul_sqr1_lo + (word/signed word~) multiply_tables_compare::$8 + (boolean~) multiply_tables_compare::$10 ← (byte*) multiply_tables_compare::kc_sqr < (byte*~) multiply_tables_compare::$9 + if((boolean~) multiply_tables_compare::$10) goto multiply_tables_compare::@1 + (void~) multiply_tables_compare::$11 ← call print_str (string) "multiply tables match!@" + (void~) multiply_tables_compare::$12 ← call print_ln +multiply_tables_compare::@return: + return +endproc // multiply_tables_compare() +proc (void()) multiply_results_compare() + (byte) multiply_results_compare::a ← (byte/signed byte/word/signed word) 0 +multiply_results_compare::@1: + (byte) multiply_results_compare::b ← (byte/signed byte/word/signed word) 0 +multiply_results_compare::@2: + (word~) multiply_results_compare::$0 ← call slow_multiply (byte) multiply_results_compare::a (byte) multiply_results_compare::b + (word) multiply_results_compare::ms ← (word~) multiply_results_compare::$0 + (word~) multiply_results_compare::$1 ← call multiply (byte) multiply_results_compare::a (byte) multiply_results_compare::b + (word) multiply_results_compare::ma ← (word~) multiply_results_compare::$1 + (boolean~) multiply_results_compare::$2 ← (word) multiply_results_compare::ms != (word) multiply_results_compare::ma + (boolean~) multiply_results_compare::$3 ← ! (boolean~) multiply_results_compare::$2 + if((boolean~) multiply_results_compare::$3) goto multiply_results_compare::@3 + *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 + (void~) multiply_results_compare::$4 ← call print_str (string) "multiply mismatch slow:@" + (void~) multiply_results_compare::$5 ← call print_word (word) multiply_results_compare::ms + (void~) multiply_results_compare::$6 ← call print_str (string) " / fast asm:" + (void~) multiply_results_compare::$7 ← call print_word (word) multiply_results_compare::ma + goto multiply_results_compare::@return +multiply_results_compare::@3: + (byte) multiply_results_compare::b ← ++ (byte) multiply_results_compare::b + (boolean~) multiply_results_compare::$8 ← (byte) multiply_results_compare::b != (byte/signed byte/word/signed word) 0 + if((boolean~) multiply_results_compare::$8) goto multiply_results_compare::@2 + (byte) multiply_results_compare::a ← ++ (byte) multiply_results_compare::a + (boolean~) multiply_results_compare::$9 ← (byte) multiply_results_compare::a != (byte/signed byte/word/signed word) 0 + if((boolean~) multiply_results_compare::$9) goto multiply_results_compare::@1 + (void~) multiply_results_compare::$10 ← call print_str (string) "multiply results match!@" + (void~) multiply_results_compare::$11 ← call print_ln +multiply_results_compare::@return: + return +endproc // multiply_results_compare() + call main + +SYMBOLS +(byte*) BGCOL +(byte[512]) asm_mul_sqr1_hi +(byte[512]) asm_mul_sqr1_lo +(byte[512]) asm_mul_sqr2_hi +(byte[512]) asm_mul_sqr2_lo +(byte*) char_cursor +(void()) init_multiply() +(byte*~) init_multiply::$0 +(byte*~) init_multiply::$1 +(signed byte/signed word~) init_multiply::$10 +(byte~) init_multiply::$11 +(byte/word~) init_multiply::$12 +(boolean~) init_multiply::$13 +(boolean~) init_multiply::$14 +(byte*~) init_multiply::$15 +(boolean~) init_multiply::$16 +(byte*~) init_multiply::$17 +(byte*~) init_multiply::$18 +(byte*~) init_multiply::$19 +(byte~) init_multiply::$2 +(byte*~) init_multiply::$20 +(boolean~) init_multiply::$3 +(boolean~) init_multiply::$4 +(byte~) init_multiply::$5 +(byte~) init_multiply::$6 +(word~) init_multiply::$7 +(byte*~) init_multiply::$8 +(boolean~) init_multiply::$9 +(label) init_multiply::@1 +(label) init_multiply::@2 +(label) init_multiply::@3 +(label) init_multiply::@4 +(label) init_multiply::@return +(byte) init_multiply::c +(byte) init_multiply::dir +(word) init_multiply::sqr +(byte*) init_multiply::sqr1_hi +(byte*) init_multiply::sqr1_lo +(byte*) init_multiply::sqr2_hi +(byte*) init_multiply::sqr2_lo +(byte) init_multiply::x_2 +(byte) init_multiply::x_255 +(void()) init_multiply_asm() +(label) init_multiply_asm::@return +(byte*) init_multiply_asm::mem +(byte*) line_cursor +(void()) main() +(void~) main::$0 +(void~) main::$1 +(void~) main::$2 +(void~) main::$3 +(void~) main::$4 +(label) main::@return +(byte[512]) mul_sqr1_hi +(byte[512]) mul_sqr1_lo +(byte[512]) mul_sqr2_hi +(byte[512]) mul_sqr2_lo +(word()) multiply((byte) multiply::a , (byte) multiply::b) +(label) multiply::@return +(byte) multiply::a +(byte) multiply::b +(byte*) multiply::memA +(byte*) multiply::memB +(word) multiply::return +(void()) multiply_results_compare() +(word~) multiply_results_compare::$0 +(word~) multiply_results_compare::$1 +(void~) multiply_results_compare::$10 +(void~) multiply_results_compare::$11 +(boolean~) multiply_results_compare::$2 +(boolean~) multiply_results_compare::$3 +(void~) multiply_results_compare::$4 +(void~) multiply_results_compare::$5 +(void~) multiply_results_compare::$6 +(void~) multiply_results_compare::$7 +(boolean~) multiply_results_compare::$8 +(boolean~) multiply_results_compare::$9 +(label) multiply_results_compare::@1 +(label) multiply_results_compare::@2 +(label) multiply_results_compare::@3 +(label) multiply_results_compare::@return +(byte) multiply_results_compare::a +(byte) multiply_results_compare::b +(word) multiply_results_compare::ma +(word) multiply_results_compare::ms +(void()) multiply_tables_compare() +(boolean~) multiply_tables_compare::$0 +(boolean~) multiply_tables_compare::$1 +(boolean~) multiply_tables_compare::$10 +(void~) multiply_tables_compare::$11 +(void~) multiply_tables_compare::$12 +(void~) multiply_tables_compare::$2 +(word~) multiply_tables_compare::$3 +(void~) multiply_tables_compare::$4 +(void~) multiply_tables_compare::$5 +(word~) multiply_tables_compare::$6 +(void~) multiply_tables_compare::$7 +(word/signed word~) multiply_tables_compare::$8 +(byte*~) multiply_tables_compare::$9 +(label) multiply_tables_compare::@1 +(label) multiply_tables_compare::@2 +(label) multiply_tables_compare::@return +(byte*) multiply_tables_compare::asm_sqr +(byte*) multiply_tables_compare::kc_sqr +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(void~) print_byte::$1 +(byte~) print_byte::$2 +(void~) print_byte::$3 +(label) print_byte::@return +(byte) print_byte::b +(byte[]) print_byte::hextab +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(void()) print_cls() +(word/signed word~) print_cls::$0 +(boolean~) print_cls::$1 +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(void()) print_ln() +(byte*~) print_ln::$0 +(boolean~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_str((byte*) print_str::str) +(boolean~) print_str::$0 +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@3 +(label) print_str::@return +(byte*) print_str::str +(void()) print_word((word) print_word::w) +(byte~) print_word::$0 +(void~) print_word::$1 +(byte~) print_word::$2 +(void~) print_word::$3 +(label) print_word::@return +(word) print_word::w +(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) +(boolean~) slow_multiply::$0 +(boolean~) slow_multiply::$1 +(word~) slow_multiply::$2 +(boolean~) slow_multiply::$3 +(label) slow_multiply::@1 +(label) slow_multiply::@2 +(label) slow_multiply::@return +(byte) slow_multiply::a +(byte) slow_multiply::b +(byte) slow_multiply::i +(word) slow_multiply::m +(word) slow_multiply::return + +Promoting word/signed word to byte* in line_cursor ← ((byte*)) 1024 +Promoting word/signed word to byte* in print_cls::sc ← ((byte*)) 1024 +Promoting byte/word/signed word to byte* in multiply::memA ← ((byte*)) 254 +Promoting byte/word/signed word to byte* in multiply::memB ← ((byte*)) 255 +Promoting word to byte* in BGCOL ← ((byte*)) 53281 +Promoting byte/word/signed word to byte* in init_multiply_asm::mem ← ((byte*)) 255 +INITIAL CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) line_cursor ← ((byte*)) (word/signed word) 1024 + (byte*) char_cursor ← (byte*) line_cursor + to:@1 +print_str: scope:[print_str] from + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + to:print_str::@4 +print_str::@2: scope:[print_str] from print_str::@1 print_str::@5 + *((byte*) char_cursor) ← *((byte*) print_str::str) + (byte*) char_cursor ← ++ (byte*) char_cursor + (byte*) print_str::str ← ++ (byte*) print_str::str + to:print_str::@1 +print_str::@4: scope:[print_str] from print_str::@1 + to:print_str::@3 +print_str::@3: scope:[print_str] from print_str::@4 print_str::@6 + to:print_str::@return +print_str::@5: scope:[print_str] from + to:print_str::@2 +print_str::@6: scope:[print_str] from + to:print_str::@3 +print_str::@return: scope:[print_str] from print_str::@3 + return + to:@return +@1: scope:[] from @begin + to:@2 +print_ln: scope:[print_ln] from + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word) 40 + (byte*) line_cursor ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor + if((boolean~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) char_cursor ← (byte*) line_cursor + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + return + to:@return +@2: scope:[] from @1 + to:@3 +print_word: scope:[print_word] from + (byte~) print_word::$0 ← > (word) print_word::w + (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 + (byte~) print_word::$2 ← < (word) print_word::w + (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 + to:print_word::@return +print_word::@return: scope:[print_word] from print_word + return + to:@return +@3: scope:[] from @2 + to:@4 +print_byte: scope:[print_byte] from + (byte[]) print_byte::hextab ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } + (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word) 4 + (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) + (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word) 15 + (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte + return + to:@return +@4: scope:[] from @3 + to:@5 +print_char: scope:[print_char] from + *((byte*) char_cursor) ← (byte) print_char::ch + (byte*) char_cursor ← ++ (byte*) char_cursor + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + return + to:@return +@5: scope:[] from @4 + to:@6 +print_cls: scope:[print_cls] from + (byte*) print_cls::sc ← ((byte*)) (word/signed word) 1024 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + *((byte*) print_cls::sc) ← (byte) ' ' + (byte*) print_cls::sc ← ++ (byte*) print_cls::sc + (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 + to:print_cls::@2 +print_cls::@2: scope:[print_cls] from print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@2 + return + to:@return +@6: scope:[] from @5 + (byte[512]) mul_sqr1_lo ← { fill( 512, 0) } + (byte[512]) mul_sqr1_hi ← { fill( 512, 0) } + (byte[512]) mul_sqr2_lo ← { fill( 512, 0) } + (byte[512]) mul_sqr2_hi ← { fill( 512, 0) } + to:@7 +init_multiply: scope:[init_multiply] from + (word) init_multiply::sqr ← (byte/signed byte/word/signed word) 0 + (byte) init_multiply::x_2 ← (byte/signed byte/word/signed word) 0 + (byte) init_multiply::c ← (byte/signed byte/word/signed word) 0 + (byte*~) init_multiply::$0 ← (byte[512]) mul_sqr1_hi + (byte/signed byte/word/signed word) 1 + (byte*) init_multiply::sqr1_hi ← (byte*~) init_multiply::$0 + (byte*~) init_multiply::$1 ← (byte[512]) mul_sqr1_lo + (byte/signed byte/word/signed word) 1 + (byte*) init_multiply::sqr1_lo ← (byte*~) init_multiply::$1 + to:init_multiply::@1 +init_multiply::@1: scope:[init_multiply] from init_multiply init_multiply::@2 + (byte) init_multiply::c ← ++ (byte) init_multiply::c + (byte~) init_multiply::$2 ← (byte) init_multiply::c & (byte/signed byte/word/signed word) 1 + (boolean~) init_multiply::$3 ← (byte~) init_multiply::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_multiply::$4 ← ! (boolean~) init_multiply::$3 + if((boolean~) init_multiply::$4) goto init_multiply::@2 + to:init_multiply::@5 +init_multiply::@2: scope:[init_multiply] from init_multiply::@1 init_multiply::@5 + (byte~) init_multiply::$5 ← < (word) init_multiply::sqr + *((byte*) init_multiply::sqr1_lo) ← (byte~) init_multiply::$5 + (byte~) init_multiply::$6 ← > (word) init_multiply::sqr + *((byte*) init_multiply::sqr1_hi) ← (byte~) init_multiply::$6 + (byte*) init_multiply::sqr1_hi ← ++ (byte*) init_multiply::sqr1_hi + (word~) init_multiply::$7 ← (word) init_multiply::sqr + (byte) init_multiply::x_2 + (word) init_multiply::sqr ← (word~) init_multiply::$7 + (byte*) init_multiply::sqr1_lo ← ++ (byte*) init_multiply::sqr1_lo + (byte*~) init_multiply::$8 ← (byte[512]) mul_sqr1_lo + (word/signed word) 512 + (boolean~) init_multiply::$9 ← (byte*) init_multiply::sqr1_lo != (byte*~) init_multiply::$8 + if((boolean~) init_multiply::$9) goto init_multiply::@1 + to:init_multiply::@6 +init_multiply::@5: scope:[init_multiply] from init_multiply::@1 + (byte) init_multiply::x_2 ← ++ (byte) init_multiply::x_2 + (word) init_multiply::sqr ← ++ (word) init_multiply::sqr + to:init_multiply::@2 +init_multiply::@6: scope:[init_multiply] from init_multiply::@2 + (signed byte/signed word~) init_multiply::$10 ← - (byte/signed byte/word/signed word) 1 + (byte~) init_multiply::$11 ← ((byte)) (signed byte/signed word~) init_multiply::$10 + (byte) init_multiply::x_255 ← (byte~) init_multiply::$11 + (byte) init_multiply::dir ← (byte/word/signed word) 255 + (byte*) init_multiply::sqr2_hi ← (byte[512]) mul_sqr2_hi + (byte*) init_multiply::sqr2_lo ← (byte[512]) mul_sqr2_lo + to:init_multiply::@3 +init_multiply::@3: scope:[init_multiply] from init_multiply::@4 init_multiply::@6 + *((byte*) init_multiply::sqr2_lo) ← *((byte[512]) mul_sqr1_lo + (byte) init_multiply::x_255) + *((byte*) init_multiply::sqr2_hi) ← *((byte[512]) mul_sqr1_hi + (byte) init_multiply::x_255) + (byte*) init_multiply::sqr2_hi ← ++ (byte*) init_multiply::sqr2_hi + (byte/word~) init_multiply::$12 ← (byte) init_multiply::x_255 + (byte) init_multiply::dir + (byte) init_multiply::x_255 ← (byte/word~) init_multiply::$12 + (boolean~) init_multiply::$13 ← (byte) init_multiply::x_255 == (byte/signed byte/word/signed word) 0 + (boolean~) init_multiply::$14 ← ! (boolean~) init_multiply::$13 + if((boolean~) init_multiply::$14) goto init_multiply::@4 + to:init_multiply::@7 +init_multiply::@4: scope:[init_multiply] from init_multiply::@3 init_multiply::@7 + (byte*) init_multiply::sqr2_lo ← ++ (byte*) init_multiply::sqr2_lo + (byte*~) init_multiply::$15 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 + (boolean~) init_multiply::$16 ← (byte*) init_multiply::sqr2_lo != (byte*~) init_multiply::$15 + if((boolean~) init_multiply::$16) goto init_multiply::@3 + to:init_multiply::@8 +init_multiply::@7: scope:[init_multiply] from init_multiply::@3 + (byte) init_multiply::dir ← (byte/signed byte/word/signed word) 1 + to:init_multiply::@4 +init_multiply::@8: scope:[init_multiply] from init_multiply::@4 + (byte*~) init_multiply::$17 ← (byte[512]) mul_sqr2_lo + (word/signed word) 511 + (byte*~) init_multiply::$18 ← (byte[512]) mul_sqr1_lo + (word/signed word) 256 + *((byte*~) init_multiply::$17) ← *((byte*~) init_multiply::$18) + (byte*~) init_multiply::$19 ← (byte[512]) mul_sqr2_hi + (word/signed word) 511 + (byte*~) init_multiply::$20 ← (byte[512]) mul_sqr1_hi + (word/signed word) 256 + *((byte*~) init_multiply::$19) ← *((byte*~) init_multiply::$20) + to:init_multiply::@return +init_multiply::@return: scope:[init_multiply] from init_multiply::@8 + return + to:@return +@7: scope:[] from @6 + to:@8 +multiply: scope:[multiply] from + (byte*) multiply::memA ← ((byte*)) (byte/word/signed word) 254 + (byte*) multiply::memB ← ((byte*)) (byte/word/signed word) 255 + *((byte*) multiply::memA) ← (byte) multiply::a + *((byte*) multiply::memB) ← (byte) multiply::b + asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + (word) multiply::return ← { *((byte*) multiply::memB), *((byte*) multiply::memA) } + to:multiply::@return +multiply::@return: scope:[multiply] from multiply multiply::@1 + (word) multiply::return ← (word) multiply::return + return (word) multiply::return + to:@return +multiply::@1: scope:[multiply] from + to:multiply::@return +@8: scope:[] from @7 + (byte*) BGCOL ← ((byte*)) (word) 53281 + to:@9 +main: scope:[main] from + *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 5 + (void~) main::$0 ← call print_cls + (void~) main::$1 ← call init_multiply + (void~) main::$2 ← call init_multiply_asm + (void~) main::$3 ← call multiply_tables_compare + (void~) main::$4 ← call multiply_results_compare + to:main::@return +main::@return: scope:[main] from main + return + to:@return +@9: scope:[] from @8 + to:@10 +slow_multiply: scope:[slow_multiply] from + (word) slow_multiply::m ← (byte/signed byte/word/signed word) 0 + (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a > (byte/signed byte/word/signed word) 0 + (boolean~) slow_multiply::$1 ← ! (boolean~) slow_multiply::$0 + if((boolean~) slow_multiply::$1) goto slow_multiply::@1 + to:slow_multiply::@3 +slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@4 + (word) slow_multiply::return ← (word) slow_multiply::m + to:slow_multiply::@return +slow_multiply::@3: scope:[slow_multiply] from slow_multiply + (byte) slow_multiply::i ← (byte/signed byte/word/signed word) 0 + to:slow_multiply::@2 +slow_multiply::@2: scope:[slow_multiply] from slow_multiply::@2 slow_multiply::@3 + (word~) slow_multiply::$2 ← (word) slow_multiply::m + (byte) slow_multiply::b + (word) slow_multiply::m ← (word~) slow_multiply::$2 + (byte) slow_multiply::i ← ++ (byte) slow_multiply::i + (boolean~) slow_multiply::$3 ← (byte) slow_multiply::i != (byte) slow_multiply::a + if((boolean~) slow_multiply::$3) goto slow_multiply::@2 + to:slow_multiply::@4 +slow_multiply::@4: scope:[slow_multiply] from slow_multiply::@2 + to:slow_multiply::@1 +slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 slow_multiply::@5 + (word) slow_multiply::return ← (word) slow_multiply::return + return (word) slow_multiply::return + to:@return +slow_multiply::@5: scope:[slow_multiply] from + to:slow_multiply::@return +@10: scope:[] from @9 + (byte[512]) asm_mul_sqr1_lo ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr1_hi ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr2_lo ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr2_hi ← { fill( 512, 0) } + to:@11 +init_multiply_asm: scope:[init_multiply_asm] from + asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + (byte*) init_multiply_asm::mem ← ((byte*)) (byte/word/signed word) 255 + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_lo) + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_hi) + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr2_lo) + *((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr2_hi) + to:init_multiply_asm::@return +init_multiply_asm::@return: scope:[init_multiply_asm] from init_multiply_asm + return + to:@return +@11: scope:[] from @10 + to:@12 +multiply_tables_compare: scope:[multiply_tables_compare] from + (byte*) multiply_tables_compare::asm_sqr ← (byte[512]) asm_mul_sqr1_lo + (byte*) multiply_tables_compare::kc_sqr ← (byte[512]) mul_sqr1_lo + to:multiply_tables_compare::@1 +multiply_tables_compare::@1: scope:[multiply_tables_compare] from multiply_tables_compare multiply_tables_compare::@2 + (boolean~) multiply_tables_compare::$0 ← *((byte*) multiply_tables_compare::kc_sqr) != *((byte*) multiply_tables_compare::asm_sqr) + (boolean~) multiply_tables_compare::$1 ← ! (boolean~) multiply_tables_compare::$0 + if((boolean~) multiply_tables_compare::$1) goto multiply_tables_compare::@2 + to:multiply_tables_compare::@3 +multiply_tables_compare::@2: scope:[multiply_tables_compare] from multiply_tables_compare::@1 multiply_tables_compare::@4 + (byte*) multiply_tables_compare::asm_sqr ← ++ (byte*) multiply_tables_compare::asm_sqr + (byte*) multiply_tables_compare::kc_sqr ← ++ (byte*) multiply_tables_compare::kc_sqr + (word/signed word~) multiply_tables_compare::$8 ← (word/signed word) 512 * (byte/signed byte/word/signed word) 4 + (byte*~) multiply_tables_compare::$9 ← (byte[512]) mul_sqr1_lo + (word/signed word~) multiply_tables_compare::$8 + (boolean~) multiply_tables_compare::$10 ← (byte*) multiply_tables_compare::kc_sqr < (byte*~) multiply_tables_compare::$9 + if((boolean~) multiply_tables_compare::$10) goto multiply_tables_compare::@1 + to:multiply_tables_compare::@5 +multiply_tables_compare::@3: scope:[multiply_tables_compare] from multiply_tables_compare::@1 + *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 + (void~) multiply_tables_compare::$2 ← call print_str (string) "multiply table mismatch at @" + (word~) multiply_tables_compare::$3 ← ((word)) (byte*) multiply_tables_compare::asm_sqr + (void~) multiply_tables_compare::$4 ← call print_word (word~) multiply_tables_compare::$3 + (void~) multiply_tables_compare::$5 ← call print_str (string) " / @" + (word~) multiply_tables_compare::$6 ← ((word)) (byte*) multiply_tables_compare::kc_sqr + (void~) multiply_tables_compare::$7 ← call print_word (word~) multiply_tables_compare::$6 + to:multiply_tables_compare::@return +multiply_tables_compare::@return: scope:[multiply_tables_compare] from multiply_tables_compare::@3 multiply_tables_compare::@5 + return + to:@return +multiply_tables_compare::@4: scope:[multiply_tables_compare] from + to:multiply_tables_compare::@2 +multiply_tables_compare::@5: scope:[multiply_tables_compare] from multiply_tables_compare::@2 + (void~) multiply_tables_compare::$11 ← call print_str (string) "multiply tables match!@" + (void~) multiply_tables_compare::$12 ← call print_ln + to:multiply_tables_compare::@return +@12: scope:[] from @11 + to:@13 +multiply_results_compare: scope:[multiply_results_compare] from + (byte) multiply_results_compare::a ← (byte/signed byte/word/signed word) 0 + to:multiply_results_compare::@1 +multiply_results_compare::@1: scope:[multiply_results_compare] from multiply_results_compare multiply_results_compare::@6 + (byte) multiply_results_compare::b ← (byte/signed byte/word/signed word) 0 + to:multiply_results_compare::@2 +multiply_results_compare::@2: scope:[multiply_results_compare] from multiply_results_compare::@1 multiply_results_compare::@3 + (word~) multiply_results_compare::$0 ← call slow_multiply (byte) multiply_results_compare::a (byte) multiply_results_compare::b + (word) multiply_results_compare::ms ← (word~) multiply_results_compare::$0 + (word~) multiply_results_compare::$1 ← call multiply (byte) multiply_results_compare::a (byte) multiply_results_compare::b + (word) multiply_results_compare::ma ← (word~) multiply_results_compare::$1 + (boolean~) multiply_results_compare::$2 ← (word) multiply_results_compare::ms != (word) multiply_results_compare::ma + (boolean~) multiply_results_compare::$3 ← ! (boolean~) multiply_results_compare::$2 + if((boolean~) multiply_results_compare::$3) goto multiply_results_compare::@3 + to:multiply_results_compare::@4 +multiply_results_compare::@3: scope:[multiply_results_compare] from multiply_results_compare::@2 multiply_results_compare::@5 + (byte) multiply_results_compare::b ← ++ (byte) multiply_results_compare::b + (boolean~) multiply_results_compare::$8 ← (byte) multiply_results_compare::b != (byte/signed byte/word/signed word) 0 + if((boolean~) multiply_results_compare::$8) goto multiply_results_compare::@2 + to:multiply_results_compare::@6 +multiply_results_compare::@4: scope:[multiply_results_compare] from multiply_results_compare::@2 + *((byte*) BGCOL) ← (byte/signed byte/word/signed word) 2 + (void~) multiply_results_compare::$4 ← call print_str (string) "multiply mismatch slow:@" + (void~) multiply_results_compare::$5 ← call print_word (word) multiply_results_compare::ms + (void~) multiply_results_compare::$6 ← call print_str (string) " / fast asm:" + (void~) multiply_results_compare::$7 ← call print_word (word) multiply_results_compare::ma + to:multiply_results_compare::@return +multiply_results_compare::@return: scope:[multiply_results_compare] from multiply_results_compare::@4 multiply_results_compare::@7 + return + to:@return +multiply_results_compare::@5: scope:[multiply_results_compare] from + to:multiply_results_compare::@3 +multiply_results_compare::@6: scope:[multiply_results_compare] from multiply_results_compare::@3 + (byte) multiply_results_compare::a ← ++ (byte) multiply_results_compare::a + (boolean~) multiply_results_compare::$9 ← (byte) multiply_results_compare::a != (byte/signed byte/word/signed word) 0 + if((boolean~) multiply_results_compare::$9) goto multiply_results_compare::@1 + to:multiply_results_compare::@7 +multiply_results_compare::@7: scope:[multiply_results_compare] from multiply_results_compare::@6 + (void~) multiply_results_compare::$10 ← call print_str (string) "multiply results match!@" + (void~) multiply_results_compare::$11 ← call print_ln + to:multiply_results_compare::@return +@13: scope:[] from @12 + call main + to:@end +@end: scope:[] from @13 + +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 - keeping the call (void~) main::$0 +Eliminating unused variable - keeping the call (void~) main::$1 +Eliminating unused variable - keeping the call (void~) main::$2 +Eliminating unused variable - keeping the call (void~) main::$3 +Eliminating unused variable - keeping the call (void~) main::$4 +Eliminating unused variable - keeping the call (void~) multiply_tables_compare::$2 +Eliminating unused variable - keeping the call (void~) multiply_tables_compare::$4 +Eliminating unused variable - keeping the call (void~) multiply_tables_compare::$5 +Eliminating unused variable - keeping the call (void~) multiply_tables_compare::$7 +Eliminating unused variable - keeping the call (void~) multiply_tables_compare::$11 +Eliminating unused variable - keeping the call (void~) multiply_tables_compare::$12 +Eliminating unused variable - keeping the call (void~) multiply_results_compare::$4 +Eliminating unused variable - keeping the call (void~) multiply_results_compare::$5 +Eliminating unused variable - keeping the call (void~) multiply_results_compare::$6 +Eliminating unused variable - keeping the call (void~) multiply_results_compare::$7 +Eliminating unused variable - keeping the call (void~) multiply_results_compare::$10 +Eliminating unused variable - keeping the call (void~) multiply_results_compare::$11 +Creating constant string variable for inline (const string) multiply_tables_compare::str "multiply table mismatch at @" +Creating constant string variable for inline (const string) multiply_tables_compare::str1 " / @" +Creating constant string variable for inline (const string) multiply_tables_compare::str2 "multiply tables match!@" +Creating constant string variable for inline (const string) multiply_results_compare::str "multiply mismatch slow:@" +Creating constant string variable for inline (const string) multiply_results_compare::str1 " / fast asm:" +Creating constant string variable for inline (const string) multiply_results_compare::str2 "multiply results match!@" +Removing empty block print_str::@4 +Removing empty block print_str::@3 +Removing empty block print_str::@5 +Removing empty block print_str::@6 +Removing empty block @1 +Removing empty block @2 +Removing empty block @3 +Removing empty block @4 +Removing empty block @5 +Removing empty block print_cls::@2 +Removing empty block @7 +Removing empty block multiply::@1 +Removing empty block @9 +Removing empty block slow_multiply::@4 +Removing empty block slow_multiply::@5 +Removing empty block @11 +Removing empty block multiply_tables_compare::@4 +Removing empty block @12 +Removing empty block multiply_results_compare::@5 +PROCEDURE MODIFY VARIABLE ANALYSIS +print_str modifies char_cursor +print_ln modifies line_cursor +print_ln modifies char_cursor +print_word modifies char_cursor +print_byte modifies char_cursor +print_char modifies char_cursor +main modifies char_cursor +main modifies line_cursor +multiply_tables_compare modifies char_cursor +multiply_tables_compare modifies line_cursor +multiply_results_compare modifies char_cursor +multiply_results_compare modifies line_cursor + +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... + +CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN +@begin: scope:[] from + (byte*) line_cursor#0 ← ((byte*)) (word/signed word) 1024 + (byte*) char_cursor#0 ← (byte*) line_cursor#0 + to:@6 +print_str: scope:[print_str] from multiply_results_compare::@11 multiply_results_compare::@4 multiply_results_compare::@7 multiply_tables_compare::@3 multiply_tables_compare::@5 multiply_tables_compare::@7 + (byte*) char_cursor#71 ← phi( multiply_results_compare::@11/(byte*) char_cursor#24 multiply_results_compare::@4/(byte*) char_cursor#68 multiply_results_compare::@7/(byte*) char_cursor#69 multiply_tables_compare::@3/(byte*) char_cursor#66 multiply_tables_compare::@5/(byte*) char_cursor#67 multiply_tables_compare::@7/(byte*) char_cursor#17 ) + (byte*) print_str::str#9 ← phi( multiply_results_compare::@11/(byte*) print_str::str#5 multiply_results_compare::@4/(byte*) print_str::str#4 multiply_results_compare::@7/(byte*) print_str::str#6 multiply_tables_compare::@3/(byte*) print_str::str#1 multiply_tables_compare::@5/(byte*) print_str::str#3 multiply_tables_compare::@7/(byte*) print_str::str#2 ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + (byte*) char_cursor#61 ← phi( print_str/(byte*) char_cursor#71 print_str::@2/(byte*) char_cursor#1 ) + (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 ) + (boolean~) print_str::$0 ← *((byte*) print_str::str#7) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + to:print_str::@return +print_str::@2: scope:[print_str] from print_str::@1 + (byte*) char_cursor#31 ← phi( print_str::@1/(byte*) char_cursor#61 ) + (byte*) print_str::str#8 ← phi( print_str::@1/(byte*) print_str::str#7 ) + *((byte*) char_cursor#31) ← *((byte*) print_str::str#8) + (byte*) char_cursor#1 ← ++ (byte*) char_cursor#31 + (byte*) print_str::str#0 ← ++ (byte*) print_str::str#8 + to:print_str::@1 +print_str::@return: scope:[print_str] from print_str::@1 + (byte*) char_cursor#32 ← phi( print_str::@1/(byte*) char_cursor#61 ) + (byte*) char_cursor#2 ← (byte*) char_cursor#32 + return + to:@return +print_ln: scope:[print_ln] from multiply_results_compare::@14 multiply_tables_compare::@10 + (byte*) char_cursor#62 ← phi( multiply_results_compare::@14/(byte*) char_cursor#28 multiply_tables_compare::@10/(byte*) char_cursor#21 ) + (byte*) line_cursor#22 ← phi( multiply_results_compare::@14/(byte*) line_cursor#27 multiply_tables_compare::@10/(byte*) line_cursor#25 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*) char_cursor#33 ← phi( print_ln/(byte*) char_cursor#62 print_ln::@1/(byte*) char_cursor#33 ) + (byte*) line_cursor#11 ← phi( print_ln/(byte*) line_cursor#22 print_ln::@1/(byte*) line_cursor#1 ) + (byte*~) print_ln::$0 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 + (byte*) line_cursor#1 ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor#1 < (byte*) char_cursor#33 + if((boolean~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) line_cursor#12 ← phi( print_ln::@1/(byte*) line_cursor#1 ) + (byte*) char_cursor#3 ← (byte*) line_cursor#12 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + (byte*) char_cursor#34 ← phi( print_ln::@2/(byte*) char_cursor#3 ) + (byte*) line_cursor#13 ← phi( print_ln::@2/(byte*) line_cursor#12 ) + (byte*) line_cursor#2 ← (byte*) line_cursor#13 + (byte*) char_cursor#4 ← (byte*) char_cursor#34 + return + to:@return +print_word: scope:[print_word] from multiply_results_compare::@10 multiply_results_compare::@12 multiply_tables_compare::@6 multiply_tables_compare::@8 + (byte*) char_cursor#63 ← phi( multiply_results_compare::@10/(byte*) char_cursor#23 multiply_results_compare::@12/(byte*) char_cursor#25 multiply_tables_compare::@6/(byte*) char_cursor#16 multiply_tables_compare::@8/(byte*) char_cursor#18 ) + (word) print_word::w#4 ← phi( multiply_results_compare::@10/(word) print_word::w#2 multiply_results_compare::@12/(word) print_word::w#3 multiply_tables_compare::@6/(word) print_word::w#0 multiply_tables_compare::@8/(word) print_word::w#1 ) + (byte~) print_word::$0 ← > (word) print_word::w#4 + (byte) print_byte::b#0 ← (byte~) print_word::$0 + call print_byte param-assignment + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + (word) print_word::w#5 ← phi( print_word/(word) print_word::w#4 ) + (byte*) char_cursor#35 ← phi( print_word/(byte*) char_cursor#10 ) + (byte*) char_cursor#5 ← (byte*) char_cursor#35 + (byte~) print_word::$2 ← < (word) print_word::w#5 + (byte) print_byte::b#1 ← (byte~) print_word::$2 + call print_byte param-assignment + to:print_word::@2 +print_word::@2: scope:[print_word] from print_word::@1 + (byte*) char_cursor#36 ← phi( print_word::@1/(byte*) char_cursor#10 ) + (byte*) char_cursor#6 ← (byte*) char_cursor#36 + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@2 + (byte*) char_cursor#37 ← phi( print_word::@2/(byte*) char_cursor#6 ) + (byte*) char_cursor#7 ← (byte*) char_cursor#37 + return + to:@return +print_byte: scope:[print_byte] from print_word print_word::@1 + (byte*) char_cursor#64 ← phi( print_word/(byte*) char_cursor#63 print_word::@1/(byte*) char_cursor#5 ) + (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) + (byte[]) print_byte::hextab#0 ← { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } + (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 + (byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) + call print_char param-assignment + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + (byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 ) + (byte*) char_cursor#38 ← phi( print_byte/(byte*) char_cursor#12 ) + (byte*) char_cursor#8 ← (byte*) char_cursor#38 + (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word) 15 + (byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) + call print_char param-assignment + to:print_byte::@2 +print_byte::@2: scope:[print_byte] from print_byte::@1 + (byte*) char_cursor#39 ← phi( print_byte::@1/(byte*) char_cursor#12 ) + (byte*) char_cursor#9 ← (byte*) char_cursor#39 + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@2 + (byte*) char_cursor#40 ← phi( print_byte::@2/(byte*) char_cursor#9 ) + (byte*) char_cursor#10 ← (byte*) char_cursor#40 + return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + (byte*) char_cursor#41 ← phi( print_byte/(byte*) char_cursor#64 print_byte::@1/(byte*) char_cursor#8 ) + (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) + *((byte*) char_cursor#41) ← (byte) print_char::ch#2 + (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + (byte*) char_cursor#42 ← phi( print_char/(byte*) char_cursor#11 ) + (byte*) char_cursor#12 ← (byte*) char_cursor#42 + return + to:@return +print_cls: scope:[print_cls] from main + (byte*) print_cls::sc#0 ← ((byte*)) (word/signed word) 1024 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 ) + *((byte*) print_cls::sc#2) ← (byte) ' ' + (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + (word/signed word~) print_cls::$0 ← (word/signed word) 1024 + (word/signed word) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc#1 != (word/signed word~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + return + to:@return +@6: scope:[] from @begin + (byte*) line_cursor#41 ← phi( @begin/(byte*) line_cursor#0 ) + (byte*) char_cursor#83 ← phi( @begin/(byte*) char_cursor#0 ) + (byte[512]) mul_sqr1_lo#0 ← { fill( 512, 0) } + (byte[512]) mul_sqr1_hi#0 ← { fill( 512, 0) } + (byte[512]) mul_sqr2_lo#0 ← { fill( 512, 0) } + (byte[512]) mul_sqr2_hi#0 ← { fill( 512, 0) } + to:@8 +init_multiply: scope:[init_multiply] from main::@1 + (word) init_multiply::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_multiply::x_2#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_multiply::c#0 ← (byte/signed byte/word/signed word) 0 + (byte*~) init_multiply::$0 ← (byte[512]) mul_sqr1_hi#0 + (byte/signed byte/word/signed word) 1 + (byte*) init_multiply::sqr1_hi#0 ← (byte*~) init_multiply::$0 + (byte*~) init_multiply::$1 ← (byte[512]) mul_sqr1_lo#0 + (byte/signed byte/word/signed word) 1 + (byte*) init_multiply::sqr1_lo#0 ← (byte*~) init_multiply::$1 + to:init_multiply::@1 +init_multiply::@1: scope:[init_multiply] from init_multiply init_multiply::@2 + (byte) init_multiply::x_2#4 ← phi( init_multiply/(byte) init_multiply::x_2#0 init_multiply::@2/(byte) init_multiply::x_2#2 ) + (byte*) init_multiply::sqr1_hi#3 ← phi( init_multiply/(byte*) init_multiply::sqr1_hi#0 init_multiply::@2/(byte*) init_multiply::sqr1_hi#1 ) + (byte*) init_multiply::sqr1_lo#3 ← phi( init_multiply/(byte*) init_multiply::sqr1_lo#0 init_multiply::@2/(byte*) init_multiply::sqr1_lo#1 ) + (word) init_multiply::sqr#5 ← phi( init_multiply/(word) init_multiply::sqr#0 init_multiply::@2/(word) init_multiply::sqr#1 ) + (byte) init_multiply::c#2 ← phi( init_multiply/(byte) init_multiply::c#0 init_multiply::@2/(byte) init_multiply::c#3 ) + (byte) init_multiply::c#1 ← ++ (byte) init_multiply::c#2 + (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 + (boolean~) init_multiply::$3 ← (byte~) init_multiply::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_multiply::$4 ← ! (boolean~) init_multiply::$3 + if((boolean~) init_multiply::$4) goto init_multiply::@2 + to:init_multiply::@5 +init_multiply::@2: scope:[init_multiply] from init_multiply::@1 init_multiply::@5 + (byte) init_multiply::c#3 ← phi( init_multiply::@1/(byte) init_multiply::c#1 init_multiply::@5/(byte) init_multiply::c#4 ) + (byte) init_multiply::x_2#2 ← phi( init_multiply::@1/(byte) init_multiply::x_2#4 init_multiply::@5/(byte) init_multiply::x_2#1 ) + (byte*) init_multiply::sqr1_hi#2 ← phi( init_multiply::@1/(byte*) init_multiply::sqr1_hi#3 init_multiply::@5/(byte*) init_multiply::sqr1_hi#4 ) + (byte*) init_multiply::sqr1_lo#2 ← phi( init_multiply::@1/(byte*) init_multiply::sqr1_lo#3 init_multiply::@5/(byte*) init_multiply::sqr1_lo#4 ) + (word) init_multiply::sqr#3 ← phi( init_multiply::@1/(word) init_multiply::sqr#5 init_multiply::@5/(word) init_multiply::sqr#2 ) + (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 + *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 + (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 + *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 + (byte*) init_multiply::sqr1_hi#1 ← ++ (byte*) init_multiply::sqr1_hi#2 + (word~) init_multiply::$7 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 + (word) init_multiply::sqr#1 ← (word~) init_multiply::$7 + (byte*) init_multiply::sqr1_lo#1 ← ++ (byte*) init_multiply::sqr1_lo#2 + (byte*~) init_multiply::$8 ← (byte[512]) mul_sqr1_lo#0 + (word/signed word) 512 + (boolean~) init_multiply::$9 ← (byte*) init_multiply::sqr1_lo#1 != (byte*~) init_multiply::$8 + if((boolean~) init_multiply::$9) goto init_multiply::@1 + to:init_multiply::@6 +init_multiply::@5: scope:[init_multiply] from init_multiply::@1 + (byte) init_multiply::c#4 ← phi( init_multiply::@1/(byte) init_multiply::c#1 ) + (byte*) init_multiply::sqr1_hi#4 ← phi( init_multiply::@1/(byte*) init_multiply::sqr1_hi#3 ) + (byte*) init_multiply::sqr1_lo#4 ← phi( init_multiply::@1/(byte*) init_multiply::sqr1_lo#3 ) + (word) init_multiply::sqr#4 ← phi( init_multiply::@1/(word) init_multiply::sqr#5 ) + (byte) init_multiply::x_2#3 ← phi( init_multiply::@1/(byte) init_multiply::x_2#4 ) + (byte) init_multiply::x_2#1 ← ++ (byte) init_multiply::x_2#3 + (word) init_multiply::sqr#2 ← ++ (word) init_multiply::sqr#4 + to:init_multiply::@2 +init_multiply::@6: scope:[init_multiply] from init_multiply::@2 + (signed byte/signed word~) init_multiply::$10 ← - (byte/signed byte/word/signed word) 1 + (byte~) init_multiply::$11 ← ((byte)) (signed byte/signed word~) init_multiply::$10 + (byte) init_multiply::x_255#0 ← (byte~) init_multiply::$11 + (byte) init_multiply::dir#0 ← (byte/word/signed word) 255 + (byte*) init_multiply::sqr2_hi#0 ← (byte[512]) mul_sqr2_hi#0 + (byte*) init_multiply::sqr2_lo#0 ← (byte[512]) mul_sqr2_lo#0 + to:init_multiply::@3 +init_multiply::@3: scope:[init_multiply] from init_multiply::@4 init_multiply::@6 + (byte) init_multiply::dir#2 ← phi( init_multiply::@4/(byte) init_multiply::dir#3 init_multiply::@6/(byte) init_multiply::dir#0 ) + (byte*) init_multiply::sqr2_hi#2 ← phi( init_multiply::@4/(byte*) init_multiply::sqr2_hi#3 init_multiply::@6/(byte*) init_multiply::sqr2_hi#0 ) + (byte*) init_multiply::sqr2_lo#2 ← phi( init_multiply::@4/(byte*) init_multiply::sqr2_lo#1 init_multiply::@6/(byte*) init_multiply::sqr2_lo#0 ) + (byte) init_multiply::x_255#2 ← phi( init_multiply::@4/(byte) init_multiply::x_255#3 init_multiply::@6/(byte) init_multiply::x_255#0 ) + *((byte*) init_multiply::sqr2_lo#2) ← *((byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) + *((byte*) init_multiply::sqr2_hi#2) ← *((byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) + (byte*) init_multiply::sqr2_hi#1 ← ++ (byte*) init_multiply::sqr2_hi#2 + (byte/word~) init_multiply::$12 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 + (byte) init_multiply::x_255#1 ← (byte/word~) init_multiply::$12 + (boolean~) init_multiply::$13 ← (byte) init_multiply::x_255#1 == (byte/signed byte/word/signed word) 0 + (boolean~) init_multiply::$14 ← ! (boolean~) init_multiply::$13 + if((boolean~) init_multiply::$14) goto init_multiply::@4 + to:init_multiply::@7 +init_multiply::@4: scope:[init_multiply] from init_multiply::@3 init_multiply::@7 + (byte) init_multiply::dir#3 ← phi( init_multiply::@3/(byte) init_multiply::dir#2 init_multiply::@7/(byte) init_multiply::dir#1 ) + (byte*) init_multiply::sqr2_hi#3 ← phi( init_multiply::@3/(byte*) init_multiply::sqr2_hi#1 init_multiply::@7/(byte*) init_multiply::sqr2_hi#4 ) + (byte) init_multiply::x_255#3 ← phi( init_multiply::@3/(byte) init_multiply::x_255#1 init_multiply::@7/(byte) init_multiply::x_255#4 ) + (byte*) init_multiply::sqr2_lo#3 ← phi( init_multiply::@3/(byte*) init_multiply::sqr2_lo#2 init_multiply::@7/(byte*) init_multiply::sqr2_lo#4 ) + (byte*) init_multiply::sqr2_lo#1 ← ++ (byte*) init_multiply::sqr2_lo#3 + (byte*~) init_multiply::$15 ← (byte[512]) mul_sqr2_lo#0 + (word/signed word) 511 + (boolean~) init_multiply::$16 ← (byte*) init_multiply::sqr2_lo#1 != (byte*~) init_multiply::$15 + if((boolean~) init_multiply::$16) goto init_multiply::@3 + to:init_multiply::@8 +init_multiply::@7: scope:[init_multiply] from init_multiply::@3 + (byte*) init_multiply::sqr2_hi#4 ← phi( init_multiply::@3/(byte*) init_multiply::sqr2_hi#1 ) + (byte) init_multiply::x_255#4 ← phi( init_multiply::@3/(byte) init_multiply::x_255#1 ) + (byte*) init_multiply::sqr2_lo#4 ← phi( init_multiply::@3/(byte*) init_multiply::sqr2_lo#2 ) + (byte) init_multiply::dir#1 ← (byte/signed byte/word/signed word) 1 + to:init_multiply::@4 +init_multiply::@8: scope:[init_multiply] from init_multiply::@4 + (byte*~) init_multiply::$17 ← (byte[512]) mul_sqr2_lo#0 + (word/signed word) 511 + (byte*~) init_multiply::$18 ← (byte[512]) mul_sqr1_lo#0 + (word/signed word) 256 + *((byte*~) init_multiply::$17) ← *((byte*~) init_multiply::$18) + (byte*~) init_multiply::$19 ← (byte[512]) mul_sqr2_hi#0 + (word/signed word) 511 + (byte*~) init_multiply::$20 ← (byte[512]) mul_sqr1_hi#0 + (word/signed word) 256 + *((byte*~) init_multiply::$19) ← *((byte*~) init_multiply::$20) + to:init_multiply::@return +init_multiply::@return: scope:[init_multiply] from init_multiply::@8 + return + to:@return +multiply: scope:[multiply] from multiply_results_compare::@8 + (byte) multiply::b#1 ← phi( multiply_results_compare::@8/(byte) multiply::b#0 ) + (byte) multiply::a#1 ← phi( multiply_results_compare::@8/(byte) multiply::a#0 ) + (byte*) multiply::memA#0 ← ((byte*)) (byte/word/signed word) 254 + (byte*) multiply::memB#0 ← ((byte*)) (byte/word/signed word) 255 + *((byte*) multiply::memA#0) ← (byte) multiply::a#1 + *((byte*) multiply::memB#0) ← (byte) multiply::b#1 + asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + (word) multiply::return#0 ← { *((byte*) multiply::memB#0), *((byte*) multiply::memA#0) } + to:multiply::@return +multiply::@return: scope:[multiply] from multiply + (word) multiply::return#3 ← phi( multiply/(word) multiply::return#0 ) + (word) multiply::return#1 ← (word) multiply::return#3 + return + to:@return +@8: scope:[] from @6 + (byte*) line_cursor#36 ← phi( @6/(byte*) line_cursor#41 ) + (byte*) char_cursor#79 ← phi( @6/(byte*) char_cursor#83 ) + (byte*) BGCOL#0 ← ((byte*)) (word) 53281 + to:@10 +main: scope:[main] from @13 + (byte*) line_cursor#42 ← phi( @13/(byte*) line_cursor#28 ) + (byte*) char_cursor#84 ← phi( @13/(byte*) char_cursor#70 ) + (byte*) BGCOL#1 ← phi( @13/(byte*) BGCOL#4 ) + *((byte*) BGCOL#1) ← (byte/signed byte/word/signed word) 5 + call print_cls param-assignment + to:main::@1 +main::@1: scope:[main] from main + (byte*) BGCOL#16 ← phi( main/(byte*) BGCOL#1 ) + (byte*) line_cursor#35 ← phi( main/(byte*) line_cursor#42 ) + (byte*) char_cursor#78 ← phi( main/(byte*) char_cursor#84 ) + call init_multiply param-assignment + to:main::@2 +main::@2: scope:[main] from main::@1 + (byte*) BGCOL#13 ← phi( main::@1/(byte*) BGCOL#16 ) + (byte*) line_cursor#29 ← phi( main::@1/(byte*) line_cursor#35 ) + (byte*) char_cursor#72 ← phi( main::@1/(byte*) char_cursor#78 ) + call init_multiply_asm param-assignment + to:main::@3 +main::@3: scope:[main] from main::@2 + (byte*) BGCOL#11 ← phi( main::@2/(byte*) BGCOL#13 ) + (byte*) line_cursor#23 ← phi( main::@2/(byte*) line_cursor#29 ) + (byte*) char_cursor#65 ← phi( main::@2/(byte*) char_cursor#72 ) + call multiply_tables_compare param-assignment + to:main::@4 +main::@4: scope:[main] from main::@3 + (byte*) BGCOL#19 ← phi( main::@3/(byte*) BGCOL#11 ) + (byte*) line_cursor#14 ← phi( main::@3/(byte*) line_cursor#6 ) + (byte*) char_cursor#43 ← phi( main::@3/(byte*) char_cursor#20 ) + (byte*) char_cursor#13 ← (byte*) char_cursor#43 + (byte*) line_cursor#3 ← (byte*) line_cursor#14 + call multiply_results_compare param-assignment + to:main::@5 +main::@5: scope:[main] from main::@4 + (byte*) line_cursor#15 ← phi( main::@4/(byte*) line_cursor#8 ) + (byte*) char_cursor#44 ← phi( main::@4/(byte*) char_cursor#27 ) + (byte*) char_cursor#14 ← (byte*) char_cursor#44 + (byte*) line_cursor#4 ← (byte*) line_cursor#15 + to:main::@return +main::@return: scope:[main] from main::@5 + (byte*) line_cursor#16 ← phi( main::@5/(byte*) line_cursor#4 ) + (byte*) char_cursor#45 ← phi( main::@5/(byte*) char_cursor#14 ) + (byte*) char_cursor#15 ← (byte*) char_cursor#45 + (byte*) line_cursor#5 ← (byte*) line_cursor#16 + return + to:@return +slow_multiply: scope:[slow_multiply] from multiply_results_compare::@2 + (byte) slow_multiply::b#3 ← phi( multiply_results_compare::@2/(byte) slow_multiply::b#0 ) + (byte) slow_multiply::a#1 ← phi( multiply_results_compare::@2/(byte) slow_multiply::a#0 ) + (word) slow_multiply::m#0 ← (byte/signed byte/word/signed word) 0 + (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a#1 > (byte/signed byte/word/signed word) 0 + (boolean~) slow_multiply::$1 ← ! (boolean~) slow_multiply::$0 + if((boolean~) slow_multiply::$1) goto slow_multiply::@1 + to:slow_multiply::@3 +slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@2 + (word) slow_multiply::m#2 ← phi( slow_multiply/(word) slow_multiply::m#0 slow_multiply::@2/(word) slow_multiply::m#1 ) + (word) slow_multiply::return#0 ← (word) slow_multiply::m#2 + to:slow_multiply::@return +slow_multiply::@3: scope:[slow_multiply] from slow_multiply + (byte) slow_multiply::a#3 ← phi( slow_multiply/(byte) slow_multiply::a#1 ) + (byte) slow_multiply::b#2 ← phi( slow_multiply/(byte) slow_multiply::b#3 ) + (word) slow_multiply::m#4 ← phi( slow_multiply/(word) slow_multiply::m#0 ) + (byte) slow_multiply::i#0 ← (byte/signed byte/word/signed word) 0 + to:slow_multiply::@2 +slow_multiply::@2: scope:[slow_multiply] from slow_multiply::@2 slow_multiply::@3 + (byte) slow_multiply::a#2 ← phi( slow_multiply::@2/(byte) slow_multiply::a#2 slow_multiply::@3/(byte) slow_multiply::a#3 ) + (byte) slow_multiply::i#2 ← phi( slow_multiply::@2/(byte) slow_multiply::i#1 slow_multiply::@3/(byte) slow_multiply::i#0 ) + (byte) slow_multiply::b#1 ← phi( slow_multiply::@2/(byte) slow_multiply::b#1 slow_multiply::@3/(byte) slow_multiply::b#2 ) + (word) slow_multiply::m#3 ← phi( slow_multiply::@2/(word) slow_multiply::m#1 slow_multiply::@3/(word) slow_multiply::m#4 ) + (word~) slow_multiply::$2 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#1 + (word) slow_multiply::m#1 ← (word~) slow_multiply::$2 + (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 + (boolean~) slow_multiply::$3 ← (byte) slow_multiply::i#1 != (byte) slow_multiply::a#2 + if((boolean~) slow_multiply::$3) goto slow_multiply::@2 + to:slow_multiply::@1 +slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 + (word) slow_multiply::return#3 ← phi( slow_multiply::@1/(word) slow_multiply::return#0 ) + (word) slow_multiply::return#1 ← (word) slow_multiply::return#3 + return + to:@return +@10: scope:[] from @8 + (byte*) line_cursor#34 ← phi( @8/(byte*) line_cursor#36 ) + (byte*) char_cursor#77 ← phi( @8/(byte*) char_cursor#79 ) + (byte*) BGCOL#10 ← phi( @8/(byte*) BGCOL#0 ) + (byte[512]) asm_mul_sqr1_lo#0 ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr1_hi#0 ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr2_lo#0 ← { fill( 512, 0) } + (byte[512]) asm_mul_sqr2_hi#0 ← { fill( 512, 0) } + to:@13 +init_multiply_asm: scope:[init_multiply_asm] from main::@2 + asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + (byte*) init_multiply_asm::mem#0 ← ((byte*)) (byte/word/signed word) 255 + *((byte*) init_multiply_asm::mem#0) ← *((byte[512]) asm_mul_sqr1_lo#0) + *((byte*) init_multiply_asm::mem#0) ← *((byte[512]) asm_mul_sqr1_hi#0) + *((byte*) init_multiply_asm::mem#0) ← *((byte[512]) asm_mul_sqr2_lo#0) + *((byte*) init_multiply_asm::mem#0) ← *((byte[512]) asm_mul_sqr2_hi#0) + to:init_multiply_asm::@return +init_multiply_asm::@return: scope:[init_multiply_asm] from init_multiply_asm + return + to:@return +multiply_tables_compare: scope:[multiply_tables_compare] from main::@3 + (byte*) line_cursor#47 ← phi( main::@3/(byte*) line_cursor#23 ) + (byte*) char_cursor#80 ← phi( main::@3/(byte*) char_cursor#65 ) + (byte*) BGCOL#7 ← phi( main::@3/(byte*) BGCOL#11 ) + (byte*) multiply_tables_compare::asm_sqr#0 ← (byte[512]) asm_mul_sqr1_lo#0 + (byte*) multiply_tables_compare::kc_sqr#0 ← (byte[512]) mul_sqr1_lo#0 + to:multiply_tables_compare::@1 +multiply_tables_compare::@1: scope:[multiply_tables_compare] from multiply_tables_compare multiply_tables_compare::@2 + (byte*) line_cursor#43 ← phi( multiply_tables_compare/(byte*) line_cursor#47 multiply_tables_compare::@2/(byte*) line_cursor#38 ) + (byte*) char_cursor#73 ← phi( multiply_tables_compare/(byte*) char_cursor#80 multiply_tables_compare::@2/(byte*) char_cursor#74 ) + (byte*) BGCOL#5 ← phi( multiply_tables_compare/(byte*) BGCOL#7 multiply_tables_compare::@2/(byte*) BGCOL#8 ) + (byte*) multiply_tables_compare::asm_sqr#2 ← phi( multiply_tables_compare/(byte*) multiply_tables_compare::asm_sqr#0 multiply_tables_compare::@2/(byte*) multiply_tables_compare::asm_sqr#1 ) + (byte*) multiply_tables_compare::kc_sqr#2 ← phi( multiply_tables_compare/(byte*) multiply_tables_compare::kc_sqr#0 multiply_tables_compare::@2/(byte*) multiply_tables_compare::kc_sqr#1 ) + (boolean~) multiply_tables_compare::$0 ← *((byte*) multiply_tables_compare::kc_sqr#2) != *((byte*) multiply_tables_compare::asm_sqr#2) + (boolean~) multiply_tables_compare::$1 ← ! (boolean~) multiply_tables_compare::$0 + if((boolean~) multiply_tables_compare::$1) goto multiply_tables_compare::@2 + to:multiply_tables_compare::@3 +multiply_tables_compare::@2: scope:[multiply_tables_compare] from multiply_tables_compare::@1 + (byte*) line_cursor#38 ← phi( multiply_tables_compare::@1/(byte*) line_cursor#43 ) + (byte*) char_cursor#74 ← phi( multiply_tables_compare::@1/(byte*) char_cursor#73 ) + (byte*) BGCOL#8 ← phi( multiply_tables_compare::@1/(byte*) BGCOL#5 ) + (byte*) multiply_tables_compare::kc_sqr#3 ← phi( multiply_tables_compare::@1/(byte*) multiply_tables_compare::kc_sqr#2 ) + (byte*) multiply_tables_compare::asm_sqr#3 ← phi( multiply_tables_compare::@1/(byte*) multiply_tables_compare::asm_sqr#2 ) + (byte*) multiply_tables_compare::asm_sqr#1 ← ++ (byte*) multiply_tables_compare::asm_sqr#3 + (byte*) multiply_tables_compare::kc_sqr#1 ← ++ (byte*) multiply_tables_compare::kc_sqr#3 + (word/signed word~) multiply_tables_compare::$8 ← (word/signed word) 512 * (byte/signed byte/word/signed word) 4 + (byte*~) multiply_tables_compare::$9 ← (byte[512]) mul_sqr1_lo#0 + (word/signed word~) multiply_tables_compare::$8 + (boolean~) multiply_tables_compare::$10 ← (byte*) multiply_tables_compare::kc_sqr#1 < (byte*~) multiply_tables_compare::$9 + if((boolean~) multiply_tables_compare::$10) goto multiply_tables_compare::@1 + to:multiply_tables_compare::@5 +multiply_tables_compare::@3: scope:[multiply_tables_compare] from multiply_tables_compare::@1 + (byte*) line_cursor#48 ← phi( multiply_tables_compare::@1/(byte*) line_cursor#43 ) + (byte*) multiply_tables_compare::kc_sqr#7 ← phi( multiply_tables_compare::@1/(byte*) multiply_tables_compare::kc_sqr#2 ) + (byte*) multiply_tables_compare::asm_sqr#5 ← phi( multiply_tables_compare::@1/(byte*) multiply_tables_compare::asm_sqr#2 ) + (byte*) char_cursor#66 ← phi( multiply_tables_compare::@1/(byte*) char_cursor#73 ) + (byte*) BGCOL#2 ← phi( multiply_tables_compare::@1/(byte*) BGCOL#5 ) + *((byte*) BGCOL#2) ← (byte/signed byte/word/signed word) 2 + (byte*) print_str::str#1 ← (const string) multiply_tables_compare::str + call print_str param-assignment + to:multiply_tables_compare::@6 +multiply_tables_compare::@6: scope:[multiply_tables_compare] from multiply_tables_compare::@3 + (byte*) line_cursor#44 ← phi( multiply_tables_compare::@3/(byte*) line_cursor#48 ) + (byte*) multiply_tables_compare::kc_sqr#6 ← phi( multiply_tables_compare::@3/(byte*) multiply_tables_compare::kc_sqr#7 ) + (byte*) multiply_tables_compare::asm_sqr#4 ← phi( multiply_tables_compare::@3/(byte*) multiply_tables_compare::asm_sqr#5 ) + (byte*) char_cursor#46 ← phi( multiply_tables_compare::@3/(byte*) char_cursor#2 ) + (byte*) char_cursor#16 ← (byte*) char_cursor#46 + (word~) multiply_tables_compare::$3 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#4 + (word) print_word::w#0 ← (word~) multiply_tables_compare::$3 + call print_word param-assignment + to:multiply_tables_compare::@7 +multiply_tables_compare::@7: scope:[multiply_tables_compare] from multiply_tables_compare::@6 + (byte*) line_cursor#37 ← phi( multiply_tables_compare::@6/(byte*) line_cursor#44 ) + (byte*) multiply_tables_compare::kc_sqr#5 ← phi( multiply_tables_compare::@6/(byte*) multiply_tables_compare::kc_sqr#6 ) + (byte*) char_cursor#47 ← phi( multiply_tables_compare::@6/(byte*) char_cursor#7 ) + (byte*) char_cursor#17 ← (byte*) char_cursor#47 + (byte*) print_str::str#2 ← (const string) multiply_tables_compare::str1 + call print_str param-assignment + to:multiply_tables_compare::@8 +multiply_tables_compare::@8: scope:[multiply_tables_compare] from multiply_tables_compare::@7 + (byte*) line_cursor#30 ← phi( multiply_tables_compare::@7/(byte*) line_cursor#37 ) + (byte*) multiply_tables_compare::kc_sqr#4 ← phi( multiply_tables_compare::@7/(byte*) multiply_tables_compare::kc_sqr#5 ) + (byte*) char_cursor#48 ← phi( multiply_tables_compare::@7/(byte*) char_cursor#2 ) + (byte*) char_cursor#18 ← (byte*) char_cursor#48 + (word~) multiply_tables_compare::$6 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#4 + (word) print_word::w#1 ← (word~) multiply_tables_compare::$6 + call print_word param-assignment + to:multiply_tables_compare::@9 +multiply_tables_compare::@9: scope:[multiply_tables_compare] from multiply_tables_compare::@8 + (byte*) line_cursor#24 ← phi( multiply_tables_compare::@8/(byte*) line_cursor#30 ) + (byte*) char_cursor#49 ← phi( multiply_tables_compare::@8/(byte*) char_cursor#7 ) + (byte*) char_cursor#19 ← (byte*) char_cursor#49 + to:multiply_tables_compare::@return +multiply_tables_compare::@return: scope:[multiply_tables_compare] from multiply_tables_compare::@11 multiply_tables_compare::@9 + (byte*) line_cursor#17 ← phi( multiply_tables_compare::@11/(byte*) line_cursor#7 multiply_tables_compare::@9/(byte*) line_cursor#24 ) + (byte*) char_cursor#50 ← phi( multiply_tables_compare::@11/(byte*) char_cursor#22 multiply_tables_compare::@9/(byte*) char_cursor#19 ) + (byte*) char_cursor#20 ← (byte*) char_cursor#50 + (byte*) line_cursor#6 ← (byte*) line_cursor#17 + return + to:@return +multiply_tables_compare::@5: scope:[multiply_tables_compare] from multiply_tables_compare::@2 + (byte*) line_cursor#31 ← phi( multiply_tables_compare::@2/(byte*) line_cursor#38 ) + (byte*) char_cursor#67 ← phi( multiply_tables_compare::@2/(byte*) char_cursor#74 ) + (byte*) print_str::str#3 ← (const string) multiply_tables_compare::str2 + call print_str param-assignment + to:multiply_tables_compare::@10 +multiply_tables_compare::@10: scope:[multiply_tables_compare] from multiply_tables_compare::@5 + (byte*) line_cursor#25 ← phi( multiply_tables_compare::@5/(byte*) line_cursor#31 ) + (byte*) char_cursor#51 ← phi( multiply_tables_compare::@5/(byte*) char_cursor#2 ) + (byte*) char_cursor#21 ← (byte*) char_cursor#51 + call print_ln param-assignment + to:multiply_tables_compare::@11 +multiply_tables_compare::@11: scope:[multiply_tables_compare] from multiply_tables_compare::@10 + (byte*) char_cursor#52 ← phi( multiply_tables_compare::@10/(byte*) char_cursor#4 ) + (byte*) line_cursor#18 ← phi( multiply_tables_compare::@10/(byte*) line_cursor#2 ) + (byte*) line_cursor#7 ← (byte*) line_cursor#18 + (byte*) char_cursor#22 ← (byte*) char_cursor#52 + to:multiply_tables_compare::@return +multiply_results_compare: scope:[multiply_results_compare] from main::@4 + (byte*) line_cursor#54 ← phi( main::@4/(byte*) line_cursor#3 ) + (byte*) char_cursor#87 ← phi( main::@4/(byte*) char_cursor#13 ) + (byte*) BGCOL#17 ← phi( main::@4/(byte*) BGCOL#19 ) + (byte) multiply_results_compare::a#0 ← (byte/signed byte/word/signed word) 0 + to:multiply_results_compare::@1 +multiply_results_compare::@1: scope:[multiply_results_compare] from multiply_results_compare multiply_results_compare::@6 + (byte*) line_cursor#53 ← phi( multiply_results_compare/(byte*) line_cursor#54 multiply_results_compare::@6/(byte*) line_cursor#40 ) + (byte*) char_cursor#86 ← phi( multiply_results_compare/(byte*) char_cursor#87 multiply_results_compare::@6/(byte*) char_cursor#76 ) + (byte*) BGCOL#14 ← phi( multiply_results_compare/(byte*) BGCOL#17 multiply_results_compare::@6/(byte*) BGCOL#18 ) + (byte) multiply_results_compare::a#5 ← phi( multiply_results_compare/(byte) multiply_results_compare::a#0 multiply_results_compare::@6/(byte) multiply_results_compare::a#1 ) + (byte) multiply_results_compare::b#0 ← (byte/signed byte/word/signed word) 0 + to:multiply_results_compare::@2 +multiply_results_compare::@2: scope:[multiply_results_compare] from multiply_results_compare::@1 multiply_results_compare::@3 + (byte*) line_cursor#52 ← phi( multiply_results_compare::@1/(byte*) line_cursor#53 multiply_results_compare::@3/(byte*) line_cursor#46 ) + (byte*) char_cursor#85 ← phi( multiply_results_compare::@1/(byte*) char_cursor#86 multiply_results_compare::@3/(byte*) char_cursor#82 ) + (byte*) BGCOL#12 ← phi( multiply_results_compare::@1/(byte*) BGCOL#14 multiply_results_compare::@3/(byte*) BGCOL#15 ) + (byte) multiply_results_compare::b#2 ← phi( multiply_results_compare::@1/(byte) multiply_results_compare::b#0 multiply_results_compare::@3/(byte) multiply_results_compare::b#1 ) + (byte) multiply_results_compare::a#2 ← phi( multiply_results_compare::@1/(byte) multiply_results_compare::a#5 multiply_results_compare::@3/(byte) multiply_results_compare::a#6 ) + (byte) slow_multiply::a#0 ← (byte) multiply_results_compare::a#2 + (byte) slow_multiply::b#0 ← (byte) multiply_results_compare::b#2 + call slow_multiply param-assignment + (word) slow_multiply::return#2 ← (word) slow_multiply::return#1 + to:multiply_results_compare::@8 +multiply_results_compare::@8: scope:[multiply_results_compare] from multiply_results_compare::@2 + (byte*) line_cursor#51 ← phi( multiply_results_compare::@2/(byte*) line_cursor#52 ) + (byte*) char_cursor#81 ← phi( multiply_results_compare::@2/(byte*) char_cursor#85 ) + (byte*) BGCOL#9 ← phi( multiply_results_compare::@2/(byte*) BGCOL#12 ) + (byte) multiply_results_compare::b#3 ← phi( multiply_results_compare::@2/(byte) multiply_results_compare::b#2 ) + (byte) multiply_results_compare::a#3 ← phi( multiply_results_compare::@2/(byte) multiply_results_compare::a#2 ) + (word) slow_multiply::return#4 ← phi( multiply_results_compare::@2/(word) slow_multiply::return#2 ) + (word~) multiply_results_compare::$0 ← (word) slow_multiply::return#4 + (word) multiply_results_compare::ms#0 ← (word~) multiply_results_compare::$0 + (byte) multiply::a#0 ← (byte) multiply_results_compare::a#3 + (byte) multiply::b#0 ← (byte) multiply_results_compare::b#3 + call multiply param-assignment + (word) multiply::return#2 ← (word) multiply::return#1 + to:multiply_results_compare::@9 +multiply_results_compare::@9: scope:[multiply_results_compare] from multiply_results_compare::@8 + (byte*) line_cursor#49 ← phi( multiply_results_compare::@8/(byte*) line_cursor#51 ) + (byte*) char_cursor#75 ← phi( multiply_results_compare::@8/(byte*) char_cursor#81 ) + (byte) multiply_results_compare::a#7 ← phi( multiply_results_compare::@8/(byte) multiply_results_compare::a#3 ) + (byte*) BGCOL#6 ← phi( multiply_results_compare::@8/(byte*) BGCOL#9 ) + (byte) multiply_results_compare::b#5 ← phi( multiply_results_compare::@8/(byte) multiply_results_compare::b#3 ) + (word) multiply_results_compare::ms#1 ← phi( multiply_results_compare::@8/(word) multiply_results_compare::ms#0 ) + (word) multiply::return#4 ← phi( multiply_results_compare::@8/(word) multiply::return#2 ) + (word~) multiply_results_compare::$1 ← (word) multiply::return#4 + (word) multiply_results_compare::ma#0 ← (word~) multiply_results_compare::$1 + (boolean~) multiply_results_compare::$2 ← (word) multiply_results_compare::ms#1 != (word) multiply_results_compare::ma#0 + (boolean~) multiply_results_compare::$3 ← ! (boolean~) multiply_results_compare::$2 + if((boolean~) multiply_results_compare::$3) goto multiply_results_compare::@3 + to:multiply_results_compare::@4 +multiply_results_compare::@3: scope:[multiply_results_compare] from multiply_results_compare::@9 + (byte*) line_cursor#46 ← phi( multiply_results_compare::@9/(byte*) line_cursor#49 ) + (byte*) BGCOL#15 ← phi( multiply_results_compare::@9/(byte*) BGCOL#6 ) + (byte*) char_cursor#82 ← phi( multiply_results_compare::@9/(byte*) char_cursor#75 ) + (byte) multiply_results_compare::a#6 ← phi( multiply_results_compare::@9/(byte) multiply_results_compare::a#7 ) + (byte) multiply_results_compare::b#4 ← phi( multiply_results_compare::@9/(byte) multiply_results_compare::b#5 ) + (byte) multiply_results_compare::b#1 ← ++ (byte) multiply_results_compare::b#4 + (boolean~) multiply_results_compare::$8 ← (byte) multiply_results_compare::b#1 != (byte/signed byte/word/signed word) 0 + if((boolean~) multiply_results_compare::$8) goto multiply_results_compare::@2 + to:multiply_results_compare::@6 +multiply_results_compare::@4: scope:[multiply_results_compare] from multiply_results_compare::@9 + (byte*) line_cursor#50 ← phi( multiply_results_compare::@9/(byte*) line_cursor#49 ) + (word) multiply_results_compare::ma#4 ← phi( multiply_results_compare::@9/(word) multiply_results_compare::ma#0 ) + (word) multiply_results_compare::ms#3 ← phi( multiply_results_compare::@9/(word) multiply_results_compare::ms#1 ) + (byte*) char_cursor#68 ← phi( multiply_results_compare::@9/(byte*) char_cursor#75 ) + (byte*) BGCOL#3 ← phi( multiply_results_compare::@9/(byte*) BGCOL#6 ) + *((byte*) BGCOL#3) ← (byte/signed byte/word/signed word) 2 + (byte*) print_str::str#4 ← (const string) multiply_results_compare::str + call print_str param-assignment + to:multiply_results_compare::@10 +multiply_results_compare::@10: scope:[multiply_results_compare] from multiply_results_compare::@4 + (byte*) line_cursor#45 ← phi( multiply_results_compare::@4/(byte*) line_cursor#50 ) + (word) multiply_results_compare::ma#3 ← phi( multiply_results_compare::@4/(word) multiply_results_compare::ma#4 ) + (word) multiply_results_compare::ms#2 ← phi( multiply_results_compare::@4/(word) multiply_results_compare::ms#3 ) + (byte*) char_cursor#53 ← phi( multiply_results_compare::@4/(byte*) char_cursor#2 ) + (byte*) char_cursor#23 ← (byte*) char_cursor#53 + (word) print_word::w#2 ← (word) multiply_results_compare::ms#2 + call print_word param-assignment + to:multiply_results_compare::@11 +multiply_results_compare::@11: scope:[multiply_results_compare] from multiply_results_compare::@10 + (byte*) line_cursor#39 ← phi( multiply_results_compare::@10/(byte*) line_cursor#45 ) + (word) multiply_results_compare::ma#2 ← phi( multiply_results_compare::@10/(word) multiply_results_compare::ma#3 ) + (byte*) char_cursor#54 ← phi( multiply_results_compare::@10/(byte*) char_cursor#7 ) + (byte*) char_cursor#24 ← (byte*) char_cursor#54 + (byte*) print_str::str#5 ← (const string) multiply_results_compare::str1 + call print_str param-assignment + to:multiply_results_compare::@12 +multiply_results_compare::@12: scope:[multiply_results_compare] from multiply_results_compare::@11 + (byte*) line_cursor#32 ← phi( multiply_results_compare::@11/(byte*) line_cursor#39 ) + (word) multiply_results_compare::ma#1 ← phi( multiply_results_compare::@11/(word) multiply_results_compare::ma#2 ) + (byte*) char_cursor#55 ← phi( multiply_results_compare::@11/(byte*) char_cursor#2 ) + (byte*) char_cursor#25 ← (byte*) char_cursor#55 + (word) print_word::w#3 ← (word) multiply_results_compare::ma#1 + call print_word param-assignment + to:multiply_results_compare::@13 +multiply_results_compare::@13: scope:[multiply_results_compare] from multiply_results_compare::@12 + (byte*) line_cursor#26 ← phi( multiply_results_compare::@12/(byte*) line_cursor#32 ) + (byte*) char_cursor#56 ← phi( multiply_results_compare::@12/(byte*) char_cursor#7 ) + (byte*) char_cursor#26 ← (byte*) char_cursor#56 + to:multiply_results_compare::@return +multiply_results_compare::@return: scope:[multiply_results_compare] from multiply_results_compare::@13 multiply_results_compare::@15 + (byte*) line_cursor#19 ← phi( multiply_results_compare::@13/(byte*) line_cursor#26 multiply_results_compare::@15/(byte*) line_cursor#9 ) + (byte*) char_cursor#57 ← phi( multiply_results_compare::@13/(byte*) char_cursor#26 multiply_results_compare::@15/(byte*) char_cursor#29 ) + (byte*) char_cursor#27 ← (byte*) char_cursor#57 + (byte*) line_cursor#8 ← (byte*) line_cursor#19 + return + to:@return +multiply_results_compare::@6: scope:[multiply_results_compare] from multiply_results_compare::@3 + (byte*) BGCOL#18 ← phi( multiply_results_compare::@3/(byte*) BGCOL#15 ) + (byte*) line_cursor#40 ← phi( multiply_results_compare::@3/(byte*) line_cursor#46 ) + (byte*) char_cursor#76 ← phi( multiply_results_compare::@3/(byte*) char_cursor#82 ) + (byte) multiply_results_compare::a#4 ← phi( multiply_results_compare::@3/(byte) multiply_results_compare::a#6 ) + (byte) multiply_results_compare::a#1 ← ++ (byte) multiply_results_compare::a#4 + (boolean~) multiply_results_compare::$9 ← (byte) multiply_results_compare::a#1 != (byte/signed byte/word/signed word) 0 + if((boolean~) multiply_results_compare::$9) goto multiply_results_compare::@1 + to:multiply_results_compare::@7 +multiply_results_compare::@7: scope:[multiply_results_compare] from multiply_results_compare::@6 + (byte*) line_cursor#33 ← phi( multiply_results_compare::@6/(byte*) line_cursor#40 ) + (byte*) char_cursor#69 ← phi( multiply_results_compare::@6/(byte*) char_cursor#76 ) + (byte*) print_str::str#6 ← (const string) multiply_results_compare::str2 + call print_str param-assignment + to:multiply_results_compare::@14 +multiply_results_compare::@14: scope:[multiply_results_compare] from multiply_results_compare::@7 + (byte*) line_cursor#27 ← phi( multiply_results_compare::@7/(byte*) line_cursor#33 ) + (byte*) char_cursor#58 ← phi( multiply_results_compare::@7/(byte*) char_cursor#2 ) + (byte*) char_cursor#28 ← (byte*) char_cursor#58 + call print_ln param-assignment + to:multiply_results_compare::@15 +multiply_results_compare::@15: scope:[multiply_results_compare] from multiply_results_compare::@14 + (byte*) char_cursor#59 ← phi( multiply_results_compare::@14/(byte*) char_cursor#4 ) + (byte*) line_cursor#20 ← phi( multiply_results_compare::@14/(byte*) line_cursor#2 ) + (byte*) line_cursor#9 ← (byte*) line_cursor#20 + (byte*) char_cursor#29 ← (byte*) char_cursor#59 + to:multiply_results_compare::@return +@13: scope:[] from @10 + (byte*) line_cursor#28 ← phi( @10/(byte*) line_cursor#34 ) + (byte*) char_cursor#70 ← phi( @10/(byte*) char_cursor#77 ) + (byte*) BGCOL#4 ← phi( @10/(byte*) BGCOL#10 ) + call main param-assignment + to:@14 +@14: scope:[] from @13 + (byte*) line_cursor#21 ← phi( @13/(byte*) line_cursor#5 ) + (byte*) char_cursor#60 ← phi( @13/(byte*) char_cursor#15 ) + (byte*) char_cursor#30 ← (byte*) char_cursor#60 + (byte*) line_cursor#10 ← (byte*) line_cursor#21 + to:@end +@end: scope:[] from @14 + +SYMBOL TABLE SSA +(label) @10 +(label) @13 +(label) @14 +(label) @6 +(label) @8 +(label) @begin +(label) @end +(byte*) BGCOL +(byte*) BGCOL#0 +(byte*) BGCOL#1 +(byte*) BGCOL#10 +(byte*) BGCOL#11 +(byte*) BGCOL#12 +(byte*) BGCOL#13 +(byte*) BGCOL#14 +(byte*) BGCOL#15 +(byte*) BGCOL#16 +(byte*) BGCOL#17 +(byte*) BGCOL#18 +(byte*) BGCOL#19 +(byte*) BGCOL#2 +(byte*) BGCOL#3 +(byte*) BGCOL#4 +(byte*) BGCOL#5 +(byte*) BGCOL#6 +(byte*) BGCOL#7 +(byte*) BGCOL#8 +(byte*) BGCOL#9 +(byte[512]) asm_mul_sqr1_hi +(byte[512]) asm_mul_sqr1_hi#0 +(byte[512]) asm_mul_sqr1_lo +(byte[512]) asm_mul_sqr1_lo#0 +(byte[512]) asm_mul_sqr2_hi +(byte[512]) asm_mul_sqr2_hi#0 +(byte[512]) asm_mul_sqr2_lo +(byte[512]) asm_mul_sqr2_lo#0 +(byte*) char_cursor +(byte*) char_cursor#0 +(byte*) char_cursor#1 +(byte*) char_cursor#10 +(byte*) char_cursor#11 +(byte*) char_cursor#12 +(byte*) char_cursor#13 +(byte*) char_cursor#14 +(byte*) char_cursor#15 +(byte*) char_cursor#16 +(byte*) char_cursor#17 +(byte*) char_cursor#18 +(byte*) char_cursor#19 +(byte*) char_cursor#2 +(byte*) char_cursor#20 +(byte*) char_cursor#21 +(byte*) char_cursor#22 +(byte*) char_cursor#23 +(byte*) char_cursor#24 +(byte*) char_cursor#25 +(byte*) char_cursor#26 +(byte*) char_cursor#27 +(byte*) char_cursor#28 +(byte*) char_cursor#29 +(byte*) char_cursor#3 +(byte*) char_cursor#30 +(byte*) char_cursor#31 +(byte*) char_cursor#32 +(byte*) char_cursor#33 +(byte*) char_cursor#34 +(byte*) char_cursor#35 +(byte*) char_cursor#36 +(byte*) char_cursor#37 +(byte*) char_cursor#38 +(byte*) char_cursor#39 +(byte*) char_cursor#4 +(byte*) char_cursor#40 +(byte*) char_cursor#41 +(byte*) char_cursor#42 +(byte*) char_cursor#43 +(byte*) char_cursor#44 +(byte*) char_cursor#45 +(byte*) char_cursor#46 +(byte*) char_cursor#47 +(byte*) char_cursor#48 +(byte*) char_cursor#49 +(byte*) char_cursor#5 +(byte*) char_cursor#50 +(byte*) char_cursor#51 +(byte*) char_cursor#52 +(byte*) char_cursor#53 +(byte*) char_cursor#54 +(byte*) char_cursor#55 +(byte*) char_cursor#56 +(byte*) char_cursor#57 +(byte*) char_cursor#58 +(byte*) char_cursor#59 +(byte*) char_cursor#6 +(byte*) char_cursor#60 +(byte*) char_cursor#61 +(byte*) char_cursor#62 +(byte*) char_cursor#63 +(byte*) char_cursor#64 +(byte*) char_cursor#65 +(byte*) char_cursor#66 +(byte*) char_cursor#67 +(byte*) char_cursor#68 +(byte*) char_cursor#69 +(byte*) char_cursor#7 +(byte*) char_cursor#70 +(byte*) char_cursor#71 +(byte*) char_cursor#72 +(byte*) char_cursor#73 +(byte*) char_cursor#74 +(byte*) char_cursor#75 +(byte*) char_cursor#76 +(byte*) char_cursor#77 +(byte*) char_cursor#78 +(byte*) char_cursor#79 +(byte*) char_cursor#8 +(byte*) char_cursor#80 +(byte*) char_cursor#81 +(byte*) char_cursor#82 +(byte*) char_cursor#83 +(byte*) char_cursor#84 +(byte*) char_cursor#85 +(byte*) char_cursor#86 +(byte*) char_cursor#87 +(byte*) char_cursor#9 +(void()) init_multiply() +(byte*~) init_multiply::$0 +(byte*~) init_multiply::$1 +(signed byte/signed word~) init_multiply::$10 +(byte~) init_multiply::$11 +(byte/word~) init_multiply::$12 +(boolean~) init_multiply::$13 +(boolean~) init_multiply::$14 +(byte*~) init_multiply::$15 +(boolean~) init_multiply::$16 +(byte*~) init_multiply::$17 +(byte*~) init_multiply::$18 +(byte*~) init_multiply::$19 +(byte~) init_multiply::$2 +(byte*~) init_multiply::$20 +(boolean~) init_multiply::$3 +(boolean~) init_multiply::$4 +(byte~) init_multiply::$5 +(byte~) init_multiply::$6 +(word~) init_multiply::$7 +(byte*~) init_multiply::$8 +(boolean~) init_multiply::$9 +(label) init_multiply::@1 +(label) init_multiply::@2 +(label) init_multiply::@3 +(label) init_multiply::@4 +(label) init_multiply::@5 +(label) init_multiply::@6 +(label) init_multiply::@7 +(label) init_multiply::@8 +(label) init_multiply::@return +(byte) init_multiply::c +(byte) init_multiply::c#0 +(byte) init_multiply::c#1 +(byte) init_multiply::c#2 +(byte) init_multiply::c#3 +(byte) init_multiply::c#4 +(byte) init_multiply::dir +(byte) init_multiply::dir#0 +(byte) init_multiply::dir#1 +(byte) init_multiply::dir#2 +(byte) init_multiply::dir#3 +(word) init_multiply::sqr +(word) init_multiply::sqr#0 +(word) init_multiply::sqr#1 +(word) init_multiply::sqr#2 +(word) init_multiply::sqr#3 +(word) init_multiply::sqr#4 +(word) init_multiply::sqr#5 +(byte*) init_multiply::sqr1_hi +(byte*) init_multiply::sqr1_hi#0 +(byte*) init_multiply::sqr1_hi#1 +(byte*) init_multiply::sqr1_hi#2 +(byte*) init_multiply::sqr1_hi#3 +(byte*) init_multiply::sqr1_hi#4 +(byte*) init_multiply::sqr1_lo +(byte*) init_multiply::sqr1_lo#0 +(byte*) init_multiply::sqr1_lo#1 +(byte*) init_multiply::sqr1_lo#2 +(byte*) init_multiply::sqr1_lo#3 +(byte*) init_multiply::sqr1_lo#4 +(byte*) init_multiply::sqr2_hi +(byte*) init_multiply::sqr2_hi#0 +(byte*) init_multiply::sqr2_hi#1 +(byte*) init_multiply::sqr2_hi#2 +(byte*) init_multiply::sqr2_hi#3 +(byte*) init_multiply::sqr2_hi#4 +(byte*) init_multiply::sqr2_lo +(byte*) init_multiply::sqr2_lo#0 +(byte*) init_multiply::sqr2_lo#1 +(byte*) init_multiply::sqr2_lo#2 +(byte*) init_multiply::sqr2_lo#3 +(byte*) init_multiply::sqr2_lo#4 +(byte) init_multiply::x_2 +(byte) init_multiply::x_2#0 +(byte) init_multiply::x_2#1 +(byte) init_multiply::x_2#2 +(byte) init_multiply::x_2#3 +(byte) init_multiply::x_2#4 +(byte) init_multiply::x_255 +(byte) init_multiply::x_255#0 +(byte) init_multiply::x_255#1 +(byte) init_multiply::x_255#2 +(byte) init_multiply::x_255#3 +(byte) init_multiply::x_255#4 +(void()) init_multiply_asm() +(label) init_multiply_asm::@return +(byte*) init_multiply_asm::mem +(byte*) init_multiply_asm::mem#0 +(byte*) line_cursor +(byte*) line_cursor#0 +(byte*) line_cursor#1 +(byte*) line_cursor#10 +(byte*) line_cursor#11 +(byte*) line_cursor#12 +(byte*) line_cursor#13 +(byte*) line_cursor#14 +(byte*) line_cursor#15 +(byte*) line_cursor#16 +(byte*) line_cursor#17 +(byte*) line_cursor#18 +(byte*) line_cursor#19 +(byte*) line_cursor#2 +(byte*) line_cursor#20 +(byte*) line_cursor#21 +(byte*) line_cursor#22 +(byte*) line_cursor#23 +(byte*) line_cursor#24 +(byte*) line_cursor#25 +(byte*) line_cursor#26 +(byte*) line_cursor#27 +(byte*) line_cursor#28 +(byte*) line_cursor#29 +(byte*) line_cursor#3 +(byte*) line_cursor#30 +(byte*) line_cursor#31 +(byte*) line_cursor#32 +(byte*) line_cursor#33 +(byte*) line_cursor#34 +(byte*) line_cursor#35 +(byte*) line_cursor#36 +(byte*) line_cursor#37 +(byte*) line_cursor#38 +(byte*) line_cursor#39 +(byte*) line_cursor#4 +(byte*) line_cursor#40 +(byte*) line_cursor#41 +(byte*) line_cursor#42 +(byte*) line_cursor#43 +(byte*) line_cursor#44 +(byte*) line_cursor#45 +(byte*) line_cursor#46 +(byte*) line_cursor#47 +(byte*) line_cursor#48 +(byte*) line_cursor#49 +(byte*) line_cursor#5 +(byte*) line_cursor#50 +(byte*) line_cursor#51 +(byte*) line_cursor#52 +(byte*) line_cursor#53 +(byte*) line_cursor#54 +(byte*) line_cursor#6 +(byte*) line_cursor#7 +(byte*) line_cursor#8 +(byte*) line_cursor#9 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@return +(byte[512]) mul_sqr1_hi +(byte[512]) mul_sqr1_hi#0 +(byte[512]) mul_sqr1_lo +(byte[512]) mul_sqr1_lo#0 +(byte[512]) mul_sqr2_hi +(byte[512]) mul_sqr2_hi#0 +(byte[512]) mul_sqr2_lo +(byte[512]) mul_sqr2_lo#0 +(word()) multiply((byte) multiply::a , (byte) multiply::b) +(label) multiply::@return +(byte) multiply::a +(byte) multiply::a#0 +(byte) multiply::a#1 +(byte) multiply::b +(byte) multiply::b#0 +(byte) multiply::b#1 +(byte*) multiply::memA +(byte*) multiply::memA#0 +(byte*) multiply::memB +(byte*) multiply::memB#0 +(word) multiply::return +(word) multiply::return#0 +(word) multiply::return#1 +(word) multiply::return#2 +(word) multiply::return#3 +(word) multiply::return#4 +(void()) multiply_results_compare() +(word~) multiply_results_compare::$0 +(word~) multiply_results_compare::$1 +(boolean~) multiply_results_compare::$2 +(boolean~) multiply_results_compare::$3 +(boolean~) multiply_results_compare::$8 +(boolean~) multiply_results_compare::$9 +(label) multiply_results_compare::@1 +(label) multiply_results_compare::@10 +(label) multiply_results_compare::@11 +(label) multiply_results_compare::@12 +(label) multiply_results_compare::@13 +(label) multiply_results_compare::@14 +(label) multiply_results_compare::@15 +(label) multiply_results_compare::@2 +(label) multiply_results_compare::@3 +(label) multiply_results_compare::@4 +(label) multiply_results_compare::@6 +(label) multiply_results_compare::@7 +(label) multiply_results_compare::@8 +(label) multiply_results_compare::@9 +(label) multiply_results_compare::@return +(byte) multiply_results_compare::a +(byte) multiply_results_compare::a#0 +(byte) multiply_results_compare::a#1 +(byte) multiply_results_compare::a#2 +(byte) multiply_results_compare::a#3 +(byte) multiply_results_compare::a#4 +(byte) multiply_results_compare::a#5 +(byte) multiply_results_compare::a#6 +(byte) multiply_results_compare::a#7 +(byte) multiply_results_compare::b +(byte) multiply_results_compare::b#0 +(byte) multiply_results_compare::b#1 +(byte) multiply_results_compare::b#2 +(byte) multiply_results_compare::b#3 +(byte) multiply_results_compare::b#4 +(byte) multiply_results_compare::b#5 +(word) multiply_results_compare::ma +(word) multiply_results_compare::ma#0 +(word) multiply_results_compare::ma#1 +(word) multiply_results_compare::ma#2 +(word) multiply_results_compare::ma#3 +(word) multiply_results_compare::ma#4 +(word) multiply_results_compare::ms +(word) multiply_results_compare::ms#0 +(word) multiply_results_compare::ms#1 +(word) multiply_results_compare::ms#2 +(word) multiply_results_compare::ms#3 +(const string) multiply_results_compare::str = (string) "multiply mismatch slow:@" +(const string) multiply_results_compare::str1 = (string) " / fast asm:" +(const string) multiply_results_compare::str2 = (string) "multiply results match!@" +(void()) multiply_tables_compare() +(boolean~) multiply_tables_compare::$0 +(boolean~) multiply_tables_compare::$1 +(boolean~) multiply_tables_compare::$10 +(word~) multiply_tables_compare::$3 +(word~) multiply_tables_compare::$6 +(word/signed word~) multiply_tables_compare::$8 +(byte*~) multiply_tables_compare::$9 +(label) multiply_tables_compare::@1 +(label) multiply_tables_compare::@10 +(label) multiply_tables_compare::@11 +(label) multiply_tables_compare::@2 +(label) multiply_tables_compare::@3 +(label) multiply_tables_compare::@5 +(label) multiply_tables_compare::@6 +(label) multiply_tables_compare::@7 +(label) multiply_tables_compare::@8 +(label) multiply_tables_compare::@9 +(label) multiply_tables_compare::@return +(byte*) multiply_tables_compare::asm_sqr +(byte*) multiply_tables_compare::asm_sqr#0 +(byte*) multiply_tables_compare::asm_sqr#1 +(byte*) multiply_tables_compare::asm_sqr#2 +(byte*) multiply_tables_compare::asm_sqr#3 +(byte*) multiply_tables_compare::asm_sqr#4 +(byte*) multiply_tables_compare::asm_sqr#5 +(byte*) multiply_tables_compare::kc_sqr +(byte*) multiply_tables_compare::kc_sqr#0 +(byte*) multiply_tables_compare::kc_sqr#1 +(byte*) multiply_tables_compare::kc_sqr#2 +(byte*) multiply_tables_compare::kc_sqr#3 +(byte*) multiply_tables_compare::kc_sqr#4 +(byte*) multiply_tables_compare::kc_sqr#5 +(byte*) multiply_tables_compare::kc_sqr#6 +(byte*) multiply_tables_compare::kc_sqr#7 +(const string) multiply_tables_compare::str = (string) "multiply table mismatch at @" +(const string) multiply_tables_compare::str1 = (string) " / @" +(const string) multiply_tables_compare::str2 = (string) "multiply tables match!@" +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(byte~) print_byte::$2 +(label) print_byte::@1 +(label) print_byte::@2 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 +(byte) print_byte::b#1 +(byte) print_byte::b#2 +(byte) print_byte::b#3 +(byte[]) print_byte::hextab +(byte[]) print_byte::hextab#0 +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 +(byte) print_char::ch#1 +(byte) print_char::ch#2 +(void()) print_cls() +(word/signed word~) print_cls::$0 +(boolean~) print_cls::$1 +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#0 +(byte*) print_cls::sc#1 +(byte*) print_cls::sc#2 +(void()) print_ln() +(byte*~) print_ln::$0 +(boolean~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@2 +(label) print_ln::@return +(void()) print_str((byte*) print_str::str) +(boolean~) print_str::$0 +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 +(byte*) print_str::str#1 +(byte*) print_str::str#2 +(byte*) print_str::str#3 +(byte*) print_str::str#4 +(byte*) print_str::str#5 +(byte*) print_str::str#6 +(byte*) print_str::str#7 +(byte*) print_str::str#8 +(byte*) print_str::str#9 +(void()) print_word((word) print_word::w) +(byte~) print_word::$0 +(byte~) print_word::$2 +(label) print_word::@1 +(label) print_word::@2 +(label) print_word::@return +(word) print_word::w +(word) print_word::w#0 +(word) print_word::w#1 +(word) print_word::w#2 +(word) print_word::w#3 +(word) print_word::w#4 +(word) print_word::w#5 +(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) +(boolean~) slow_multiply::$0 +(boolean~) slow_multiply::$1 +(word~) slow_multiply::$2 +(boolean~) slow_multiply::$3 +(label) slow_multiply::@1 +(label) slow_multiply::@2 +(label) slow_multiply::@3 +(label) slow_multiply::@return +(byte) slow_multiply::a +(byte) slow_multiply::a#0 +(byte) slow_multiply::a#1 +(byte) slow_multiply::a#2 +(byte) slow_multiply::a#3 +(byte) slow_multiply::b +(byte) slow_multiply::b#0 +(byte) slow_multiply::b#1 +(byte) slow_multiply::b#2 +(byte) slow_multiply::b#3 +(byte) slow_multiply::i +(byte) slow_multiply::i#0 +(byte) slow_multiply::i#1 +(byte) slow_multiply::i#2 +(word) slow_multiply::m +(word) slow_multiply::m#0 +(word) slow_multiply::m#1 +(word) slow_multiply::m#2 +(word) slow_multiply::m#3 +(word) slow_multiply::m#4 +(word) slow_multiply::return +(word) slow_multiply::return#0 +(word) slow_multiply::return#1 +(word) slow_multiply::return#2 +(word) slow_multiply::return#3 +(word) slow_multiply::return#4 + +OPTIMIZING CONTROL FLOW GRAPH +Inversing boolean not (boolean~) init_multiply::$4 ← (byte~) init_multiply::$2 != (byte/signed byte/word/signed word) 0 from (boolean~) init_multiply::$3 ← (byte~) init_multiply::$2 == (byte/signed byte/word/signed word) 0 +Inversing boolean not (boolean~) init_multiply::$14 ← (byte) init_multiply::x_255#1 != (byte/signed byte/word/signed word) 0 from (boolean~) init_multiply::$13 ← (byte) init_multiply::x_255#1 == (byte/signed byte/word/signed word) 0 +Inversing boolean not (boolean~) slow_multiply::$1 ← (byte) slow_multiply::a#1 <= (byte/signed byte/word/signed word) 0 from (boolean~) slow_multiply::$0 ← (byte) slow_multiply::a#1 > (byte/signed byte/word/signed word) 0 +Inversing boolean not (boolean~) multiply_tables_compare::$1 ← *((byte*) multiply_tables_compare::kc_sqr#2) == *((byte*) multiply_tables_compare::asm_sqr#2) from (boolean~) multiply_tables_compare::$0 ← *((byte*) multiply_tables_compare::kc_sqr#2) != *((byte*) multiply_tables_compare::asm_sqr#2) +Inversing boolean not (boolean~) multiply_results_compare::$3 ← (word) multiply_results_compare::ms#1 == (word) multiply_results_compare::ma#0 from (boolean~) multiply_results_compare::$2 ← (word) multiply_results_compare::ms#1 != (word) multiply_results_compare::ma#0 +Succesful SSA optimization Pass2UnaryNotSimplification +Not aliassing across scopes: print_str::str#9 print_str::str#5 +Not aliassing across scopes: char_cursor#71 char_cursor#24 +Not aliassing across scopes: line_cursor#22 line_cursor#27 +Not aliassing across scopes: char_cursor#62 char_cursor#28 +Not aliassing across scopes: print_word::w#4 print_word::w#2 +Not aliassing across scopes: char_cursor#63 char_cursor#23 +Not aliassing across scopes: char_cursor#35 char_cursor#10 +Not aliassing across scopes: char_cursor#36 char_cursor#10 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#64 char_cursor#63 +Not aliassing across scopes: char_cursor#38 char_cursor#12 +Not aliassing across scopes: char_cursor#39 char_cursor#12 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#41 char_cursor#64 +Not aliassing across scopes: init_multiply::sqr2_hi#0 mul_sqr2_hi#0 +Not aliassing across scopes: init_multiply::sqr2_lo#0 mul_sqr2_lo#0 +Not aliassing across scopes: multiply::a#1 multiply::a#0 +Not aliassing across scopes: multiply::b#1 multiply::b#0 +Not aliassing across scopes: BGCOL#1 BGCOL#4 +Not aliassing across scopes: char_cursor#84 char_cursor#70 +Not aliassing across scopes: line_cursor#42 line_cursor#28 +Not aliassing across scopes: char_cursor#43 char_cursor#20 +Not aliassing across scopes: line_cursor#14 line_cursor#6 +Not aliassing across scopes: char_cursor#44 char_cursor#27 +Not aliassing across scopes: line_cursor#15 line_cursor#8 +Not aliassing across scopes: slow_multiply::a#1 slow_multiply::a#0 +Not aliassing across scopes: slow_multiply::b#3 slow_multiply::b#0 +Not aliassing identity: slow_multiply::b#1 slow_multiply::b#1 +Not aliassing identity: slow_multiply::a#2 slow_multiply::a#2 +Not aliassing across scopes: BGCOL#7 BGCOL#11 +Not aliassing across scopes: char_cursor#80 char_cursor#65 +Not aliassing across scopes: line_cursor#47 line_cursor#23 +Not aliassing across scopes: multiply_tables_compare::asm_sqr#0 asm_mul_sqr1_lo#0 +Not aliassing across scopes: multiply_tables_compare::kc_sqr#0 mul_sqr1_lo#0 +Not aliassing across scopes: char_cursor#46 char_cursor#2 +Not aliassing across scopes: char_cursor#47 char_cursor#7 +Not aliassing across scopes: char_cursor#48 char_cursor#2 +Not aliassing across scopes: char_cursor#49 char_cursor#7 +Not aliassing across scopes: char_cursor#51 char_cursor#2 +Not aliassing across scopes: line_cursor#18 line_cursor#2 +Not aliassing across scopes: char_cursor#52 char_cursor#4 +Not aliassing across scopes: BGCOL#17 BGCOL#19 +Not aliassing across scopes: char_cursor#87 char_cursor#13 +Not aliassing across scopes: line_cursor#54 line_cursor#3 +Not aliassing across scopes: slow_multiply::a#0 multiply_results_compare::a#2 +Not aliassing across scopes: slow_multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#1 +Not aliassing across scopes: multiply_results_compare::$0 slow_multiply::return#4 +Not aliassing across scopes: multiply::a#0 multiply_results_compare::a#3 +Not aliassing across scopes: multiply::b#0 multiply_results_compare::b#3 +Not aliassing across scopes: multiply::return#2 multiply::return#1 +Not aliassing across scopes: multiply_results_compare::$1 multiply::return#4 +Not aliassing across scopes: char_cursor#53 char_cursor#2 +Not aliassing across scopes: print_word::w#2 multiply_results_compare::ms#2 +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 multiply_results_compare::ma#1 +Not aliassing across scopes: char_cursor#56 char_cursor#7 +Not aliassing across scopes: char_cursor#58 char_cursor#2 +Not aliassing across scopes: line_cursor#20 line_cursor#2 +Not aliassing across scopes: char_cursor#59 char_cursor#4 +Not aliassing across scopes: char_cursor#60 char_cursor#15 +Not aliassing across scopes: line_cursor#21 line_cursor#5 +Alias (byte*) char_cursor#0 = (byte*) line_cursor#0 (byte*) char_cursor#83 (byte*) line_cursor#41 (byte*) char_cursor#79 (byte*) line_cursor#36 (byte*) char_cursor#77 (byte*) line_cursor#34 (byte*) char_cursor#70 (byte*) line_cursor#28 +Alias (byte*) print_str::str#7 = (byte*) print_str::str#8 +Alias (byte*) char_cursor#2 = (byte*) char_cursor#31 (byte*) char_cursor#61 (byte*) char_cursor#32 +Alias (byte*) line_cursor#1 = (byte*~) print_ln::$0 (byte*) line_cursor#12 (byte*) char_cursor#3 (byte*) line_cursor#13 (byte*) char_cursor#34 (byte*) line_cursor#2 (byte*) char_cursor#4 +Alias (byte) print_byte::b#0 = (byte~) print_word::$0 +Alias (word) print_word::w#4 = (word) print_word::w#5 +Alias (byte*) char_cursor#35 = (byte*) char_cursor#5 +Alias (byte) print_byte::b#1 = (byte~) print_word::$2 +Alias (byte*) char_cursor#36 = (byte*) char_cursor#6 (byte*) char_cursor#37 (byte*) char_cursor#7 +Alias (byte) print_byte::b#2 = (byte) print_byte::b#3 +Alias (byte*) char_cursor#38 = (byte*) char_cursor#8 +Alias (byte*) char_cursor#10 = (byte*) char_cursor#9 (byte*) char_cursor#39 (byte*) char_cursor#40 +Alias (byte*) char_cursor#11 = (byte*) char_cursor#42 (byte*) char_cursor#12 +Alias (byte*) init_multiply::sqr1_hi#0 = (byte*~) init_multiply::$0 +Alias (byte*) init_multiply::sqr1_lo#0 = (byte*~) init_multiply::$1 +Alias (word) init_multiply::sqr#1 = (word~) init_multiply::$7 +Alias (byte) init_multiply::x_2#3 = (byte) init_multiply::x_2#4 +Alias (word) init_multiply::sqr#4 = (word) init_multiply::sqr#5 +Alias (byte*) init_multiply::sqr1_lo#3 = (byte*) init_multiply::sqr1_lo#4 +Alias (byte*) init_multiply::sqr1_hi#3 = (byte*) init_multiply::sqr1_hi#4 +Alias (byte) init_multiply::c#1 = (byte) init_multiply::c#4 +Alias (byte) init_multiply::x_255#0 = (byte~) init_multiply::$11 +Alias (byte) init_multiply::x_255#1 = (byte/word~) init_multiply::$12 (byte) init_multiply::x_255#4 +Alias (byte*) init_multiply::sqr2_lo#2 = (byte*) init_multiply::sqr2_lo#4 +Alias (byte*) init_multiply::sqr2_hi#1 = (byte*) init_multiply::sqr2_hi#4 +Alias (word) multiply::return#0 = (word) multiply::return#3 (word) multiply::return#1 +Alias (byte*) char_cursor#65 = (byte*) char_cursor#78 (byte*) char_cursor#84 (byte*) char_cursor#72 +Alias (byte*) line_cursor#23 = (byte*) line_cursor#35 (byte*) line_cursor#42 (byte*) line_cursor#29 +Alias (byte*) BGCOL#1 = (byte*) BGCOL#16 (byte*) BGCOL#13 (byte*) BGCOL#11 (byte*) BGCOL#19 +Alias (byte*) char_cursor#13 = (byte*) char_cursor#43 +Alias (byte*) line_cursor#14 = (byte*) line_cursor#3 +Alias (byte*) char_cursor#14 = (byte*) char_cursor#44 (byte*) char_cursor#45 (byte*) char_cursor#15 +Alias (byte*) line_cursor#15 = (byte*) line_cursor#4 (byte*) line_cursor#16 (byte*) line_cursor#5 +Alias (word) slow_multiply::return#0 = (word) slow_multiply::m#2 (word) slow_multiply::return#3 (word) slow_multiply::return#1 +Alias (word) slow_multiply::m#0 = (word) slow_multiply::m#4 +Alias (byte) slow_multiply::b#2 = (byte) slow_multiply::b#3 +Alias (byte) slow_multiply::a#1 = (byte) slow_multiply::a#3 +Alias (word) slow_multiply::m#1 = (word~) slow_multiply::$2 +Alias (byte*) BGCOL#0 = (byte*) BGCOL#10 (byte*) BGCOL#4 +Alias (byte*) multiply_tables_compare::asm_sqr#2 = (byte*) multiply_tables_compare::asm_sqr#3 (byte*) multiply_tables_compare::asm_sqr#5 (byte*) multiply_tables_compare::asm_sqr#4 +Alias (byte*) multiply_tables_compare::kc_sqr#2 = (byte*) multiply_tables_compare::kc_sqr#3 (byte*) multiply_tables_compare::kc_sqr#7 (byte*) multiply_tables_compare::kc_sqr#6 (byte*) multiply_tables_compare::kc_sqr#5 (byte*) multiply_tables_compare::kc_sqr#4 +Alias (byte*) BGCOL#2 = (byte*) BGCOL#8 (byte*) BGCOL#5 +Alias (byte*) char_cursor#66 = (byte*) char_cursor#74 (byte*) char_cursor#73 (byte*) char_cursor#67 +Alias (byte*) line_cursor#24 = (byte*) line_cursor#38 (byte*) line_cursor#43 (byte*) line_cursor#48 (byte*) line_cursor#44 (byte*) line_cursor#37 (byte*) line_cursor#30 (byte*) line_cursor#31 (byte*) line_cursor#25 +Alias (byte*) char_cursor#16 = (byte*) char_cursor#46 +Alias (word) print_word::w#0 = (word~) multiply_tables_compare::$3 +Alias (byte*) char_cursor#17 = (byte*) char_cursor#47 +Alias (byte*) char_cursor#18 = (byte*) char_cursor#48 +Alias (word) print_word::w#1 = (word~) multiply_tables_compare::$6 +Alias (byte*) char_cursor#19 = (byte*) char_cursor#49 +Alias (byte*) char_cursor#20 = (byte*) char_cursor#50 +Alias (byte*) line_cursor#17 = (byte*) line_cursor#6 +Alias (byte*) char_cursor#21 = (byte*) char_cursor#51 +Alias (byte*) line_cursor#18 = (byte*) line_cursor#7 +Alias (byte*) char_cursor#22 = (byte*) char_cursor#52 +Alias (word) slow_multiply::return#2 = (word) slow_multiply::return#4 +Alias (byte) multiply_results_compare::a#2 = (byte) multiply_results_compare::a#3 (byte) multiply_results_compare::a#7 (byte) multiply_results_compare::a#6 (byte) multiply_results_compare::a#4 +Alias (byte) multiply_results_compare::b#2 = (byte) multiply_results_compare::b#3 (byte) multiply_results_compare::b#5 (byte) multiply_results_compare::b#4 +Alias (byte*) BGCOL#12 = (byte*) BGCOL#9 (byte*) BGCOL#6 (byte*) BGCOL#15 (byte*) BGCOL#3 (byte*) BGCOL#18 +Alias (byte*) char_cursor#68 = (byte*) char_cursor#81 (byte*) char_cursor#85 (byte*) char_cursor#75 (byte*) char_cursor#82 (byte*) char_cursor#76 (byte*) char_cursor#69 +Alias (byte*) line_cursor#26 = (byte*) line_cursor#51 (byte*) line_cursor#52 (byte*) line_cursor#49 (byte*) line_cursor#46 (byte*) line_cursor#50 (byte*) line_cursor#45 (byte*) line_cursor#39 (byte*) line_cursor#32 (byte*) line_cursor#40 (byte*) line_cursor#33 (byte*) line_cursor#27 +Alias (word) multiply_results_compare::ms#0 = (word~) multiply_results_compare::$0 (word) multiply_results_compare::ms#1 (word) multiply_results_compare::ms#3 (word) multiply_results_compare::ms#2 +Alias (word) multiply::return#2 = (word) multiply::return#4 +Alias (word) multiply_results_compare::ma#0 = (word~) multiply_results_compare::$1 (word) multiply_results_compare::ma#4 (word) multiply_results_compare::ma#3 (word) multiply_results_compare::ma#2 (word) multiply_results_compare::ma#1 +Alias (byte*) char_cursor#23 = (byte*) char_cursor#53 +Alias (byte*) char_cursor#24 = (byte*) char_cursor#54 +Alias (byte*) char_cursor#25 = (byte*) char_cursor#55 +Alias (byte*) char_cursor#26 = (byte*) char_cursor#56 +Alias (byte*) char_cursor#27 = (byte*) char_cursor#57 +Alias (byte*) line_cursor#19 = (byte*) line_cursor#8 +Alias (byte*) char_cursor#28 = (byte*) char_cursor#58 +Alias (byte*) line_cursor#20 = (byte*) line_cursor#9 +Alias (byte*) char_cursor#29 = (byte*) char_cursor#59 +Alias (byte*) char_cursor#30 = (byte*) char_cursor#60 +Alias (byte*) line_cursor#10 = (byte*) line_cursor#21 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: print_str::str#9 print_str::str#5 +Not aliassing across scopes: char_cursor#71 char_cursor#24 +Not aliassing across scopes: line_cursor#22 line_cursor#26 +Not aliassing across scopes: char_cursor#62 char_cursor#28 +Not aliassing across scopes: print_word::w#4 print_word::w#2 +Not aliassing across scopes: char_cursor#63 char_cursor#23 +Not aliassing across scopes: char_cursor#35 char_cursor#10 +Not aliassing across scopes: char_cursor#36 char_cursor#10 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#64 char_cursor#63 +Not aliassing across scopes: char_cursor#38 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#41 char_cursor#64 +Not aliassing across scopes: init_multiply::sqr2_hi#0 mul_sqr2_hi#0 +Not aliassing across scopes: init_multiply::sqr2_lo#0 mul_sqr2_lo#0 +Not aliassing across scopes: multiply::a#1 multiply::a#0 +Not aliassing across scopes: multiply::b#1 multiply::b#0 +Not aliassing across scopes: BGCOL#1 BGCOL#0 +Not aliassing across scopes: char_cursor#65 char_cursor#0 +Not aliassing across scopes: line_cursor#23 char_cursor#0 +Not aliassing across scopes: char_cursor#13 char_cursor#20 +Not aliassing across scopes: line_cursor#14 line_cursor#17 +Not aliassing across scopes: char_cursor#14 char_cursor#27 +Not aliassing across scopes: line_cursor#15 line_cursor#19 +Not aliassing across scopes: slow_multiply::a#1 slow_multiply::a#0 +Not aliassing across scopes: slow_multiply::b#2 slow_multiply::b#0 +Not aliassing identity: slow_multiply::b#1 slow_multiply::b#1 +Not aliassing identity: slow_multiply::a#2 slow_multiply::a#2 +Not aliassing across scopes: BGCOL#7 BGCOL#1 +Not aliassing across scopes: char_cursor#80 char_cursor#65 +Not aliassing across scopes: line_cursor#47 line_cursor#23 +Not aliassing across scopes: multiply_tables_compare::asm_sqr#0 asm_mul_sqr1_lo#0 +Not aliassing across scopes: multiply_tables_compare::kc_sqr#0 mul_sqr1_lo#0 +Not aliassing across scopes: char_cursor#16 char_cursor#2 +Not aliassing across scopes: char_cursor#17 char_cursor#36 +Not aliassing across scopes: char_cursor#18 char_cursor#2 +Not aliassing across scopes: char_cursor#19 char_cursor#36 +Not aliassing across scopes: char_cursor#21 char_cursor#2 +Not aliassing across scopes: line_cursor#18 line_cursor#1 +Not aliassing across scopes: char_cursor#22 line_cursor#1 +Not aliassing across scopes: BGCOL#17 BGCOL#1 +Not aliassing across scopes: char_cursor#87 char_cursor#13 +Not aliassing across scopes: line_cursor#54 line_cursor#14 +Not aliassing across scopes: slow_multiply::a#0 multiply_results_compare::a#2 +Not aliassing across scopes: slow_multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ms#0 slow_multiply::return#2 +Not aliassing across scopes: multiply::a#0 multiply_results_compare::a#2 +Not aliassing across scopes: multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: multiply::return#2 multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ma#0 multiply::return#2 +Not aliassing across scopes: char_cursor#23 char_cursor#2 +Not aliassing across scopes: print_word::w#2 multiply_results_compare::ms#0 +Not aliassing across scopes: char_cursor#24 char_cursor#36 +Not aliassing across scopes: char_cursor#25 char_cursor#2 +Not aliassing across scopes: print_word::w#3 multiply_results_compare::ma#0 +Not aliassing across scopes: char_cursor#26 char_cursor#36 +Not aliassing across scopes: char_cursor#28 char_cursor#2 +Not aliassing across scopes: line_cursor#20 line_cursor#1 +Not aliassing across scopes: char_cursor#29 line_cursor#1 +Not aliassing across scopes: char_cursor#30 char_cursor#14 +Not aliassing across scopes: line_cursor#10 line_cursor#15 +Alias (byte*) init_multiply::sqr1_lo#2 = (byte*) init_multiply::sqr1_lo#3 +Alias (byte*) init_multiply::sqr1_hi#2 = (byte*) init_multiply::sqr1_hi#3 +Alias (byte) init_multiply::c#1 = (byte) init_multiply::c#3 +Alias (byte*) init_multiply::sqr2_lo#2 = (byte*) init_multiply::sqr2_lo#3 +Alias (byte) init_multiply::x_255#1 = (byte) init_multiply::x_255#3 +Alias (byte*) init_multiply::sqr2_hi#1 = (byte*) init_multiply::sqr2_hi#3 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: print_str::str#9 print_str::str#5 +Not aliassing across scopes: char_cursor#71 char_cursor#24 +Not aliassing across scopes: line_cursor#22 line_cursor#26 +Not aliassing across scopes: char_cursor#62 char_cursor#28 +Not aliassing across scopes: print_word::w#4 print_word::w#2 +Not aliassing across scopes: char_cursor#63 char_cursor#23 +Not aliassing across scopes: char_cursor#35 char_cursor#10 +Not aliassing across scopes: char_cursor#36 char_cursor#10 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#64 char_cursor#63 +Not aliassing across scopes: char_cursor#38 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#41 char_cursor#64 +Not aliassing across scopes: init_multiply::sqr2_hi#0 mul_sqr2_hi#0 +Not aliassing across scopes: init_multiply::sqr2_lo#0 mul_sqr2_lo#0 +Not aliassing across scopes: multiply::a#1 multiply::a#0 +Not aliassing across scopes: multiply::b#1 multiply::b#0 +Not aliassing across scopes: BGCOL#1 BGCOL#0 +Not aliassing across scopes: char_cursor#65 char_cursor#0 +Not aliassing across scopes: line_cursor#23 char_cursor#0 +Not aliassing across scopes: char_cursor#13 char_cursor#20 +Not aliassing across scopes: line_cursor#14 line_cursor#17 +Not aliassing across scopes: char_cursor#14 char_cursor#27 +Not aliassing across scopes: line_cursor#15 line_cursor#19 +Not aliassing across scopes: slow_multiply::a#1 slow_multiply::a#0 +Not aliassing across scopes: slow_multiply::b#2 slow_multiply::b#0 +Not aliassing identity: slow_multiply::b#1 slow_multiply::b#1 +Not aliassing identity: slow_multiply::a#2 slow_multiply::a#2 +Not aliassing across scopes: BGCOL#7 BGCOL#1 +Not aliassing across scopes: char_cursor#80 char_cursor#65 +Not aliassing across scopes: line_cursor#47 line_cursor#23 +Not aliassing across scopes: multiply_tables_compare::asm_sqr#0 asm_mul_sqr1_lo#0 +Not aliassing across scopes: multiply_tables_compare::kc_sqr#0 mul_sqr1_lo#0 +Not aliassing across scopes: char_cursor#16 char_cursor#2 +Not aliassing across scopes: char_cursor#17 char_cursor#36 +Not aliassing across scopes: char_cursor#18 char_cursor#2 +Not aliassing across scopes: char_cursor#19 char_cursor#36 +Not aliassing across scopes: char_cursor#21 char_cursor#2 +Not aliassing across scopes: line_cursor#18 line_cursor#1 +Not aliassing across scopes: char_cursor#22 line_cursor#1 +Not aliassing across scopes: BGCOL#17 BGCOL#1 +Not aliassing across scopes: char_cursor#87 char_cursor#13 +Not aliassing across scopes: line_cursor#54 line_cursor#14 +Not aliassing across scopes: slow_multiply::a#0 multiply_results_compare::a#2 +Not aliassing across scopes: slow_multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ms#0 slow_multiply::return#2 +Not aliassing across scopes: multiply::a#0 multiply_results_compare::a#2 +Not aliassing across scopes: multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: multiply::return#2 multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ma#0 multiply::return#2 +Not aliassing across scopes: char_cursor#23 char_cursor#2 +Not aliassing across scopes: print_word::w#2 multiply_results_compare::ms#0 +Not aliassing across scopes: char_cursor#24 char_cursor#36 +Not aliassing across scopes: char_cursor#25 char_cursor#2 +Not aliassing across scopes: print_word::w#3 multiply_results_compare::ma#0 +Not aliassing across scopes: char_cursor#26 char_cursor#36 +Not aliassing across scopes: char_cursor#28 char_cursor#2 +Not aliassing across scopes: line_cursor#20 line_cursor#1 +Not aliassing across scopes: char_cursor#29 line_cursor#1 +Not aliassing across scopes: char_cursor#30 char_cursor#14 +Not aliassing across scopes: line_cursor#10 line_cursor#15 +Self Phi Eliminated (byte*) char_cursor#33 +Self Phi Eliminated (byte) slow_multiply::b#1 +Self Phi Eliminated (byte) slow_multiply::a#2 +Self Phi Eliminated (byte*) BGCOL#2 +Self Phi Eliminated (byte*) char_cursor#66 +Self Phi Eliminated (byte*) line_cursor#24 +Self Phi Eliminated (byte) multiply_results_compare::a#2 +Self Phi Eliminated (byte*) BGCOL#12 +Self Phi Eliminated (byte*) char_cursor#68 +Self Phi Eliminated (byte*) line_cursor#26 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) char_cursor#33 (byte*) char_cursor#62 +Redundant Phi (byte*) char_cursor#35 (byte*) char_cursor#10 +Redundant Phi (byte*) char_cursor#36 (byte*) char_cursor#10 +Redundant Phi (byte*) char_cursor#38 (byte*) char_cursor#11 +Redundant Phi (byte*) char_cursor#10 (byte*) char_cursor#11 +Redundant Phi (byte) multiply::a#1 (byte) multiply::a#0 +Redundant Phi (byte) multiply::b#1 (byte) multiply::b#0 +Redundant Phi (byte*) BGCOL#1 (byte*) BGCOL#0 +Redundant Phi (byte*) char_cursor#65 (byte*) char_cursor#0 +Redundant Phi (byte*) line_cursor#23 (byte*) char_cursor#0 +Redundant Phi (byte*) char_cursor#13 (byte*) char_cursor#20 +Redundant Phi (byte*) line_cursor#14 (byte*) line_cursor#17 +Redundant Phi (byte*) char_cursor#14 (byte*) char_cursor#27 +Redundant Phi (byte*) line_cursor#15 (byte*) line_cursor#19 +Redundant Phi (byte) slow_multiply::a#1 (byte) slow_multiply::a#0 +Redundant Phi (byte) slow_multiply::b#2 (byte) slow_multiply::b#0 +Redundant Phi (byte) slow_multiply::b#1 (byte) slow_multiply::b#2 +Redundant Phi (byte) slow_multiply::a#2 (byte) slow_multiply::a#1 +Redundant Phi (byte*) BGCOL#7 (byte*) BGCOL#1 +Redundant Phi (byte*) char_cursor#80 (byte*) char_cursor#65 +Redundant Phi (byte*) line_cursor#47 (byte*) line_cursor#23 +Redundant Phi (byte*) BGCOL#2 (byte*) BGCOL#7 +Redundant Phi (byte*) char_cursor#66 (byte*) char_cursor#80 +Redundant Phi (byte*) line_cursor#24 (byte*) line_cursor#47 +Redundant Phi (byte*) char_cursor#16 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#17 (byte*) char_cursor#36 +Redundant Phi (byte*) char_cursor#18 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#19 (byte*) char_cursor#36 +Redundant Phi (byte*) char_cursor#21 (byte*) char_cursor#2 +Redundant Phi (byte*) line_cursor#18 (byte*) line_cursor#1 +Redundant Phi (byte*) char_cursor#22 (byte*) line_cursor#1 +Redundant Phi (byte*) BGCOL#17 (byte*) BGCOL#1 +Redundant Phi (byte*) char_cursor#87 (byte*) char_cursor#13 +Redundant Phi (byte*) line_cursor#54 (byte*) line_cursor#14 +Redundant Phi (byte) multiply_results_compare::a#2 (byte) multiply_results_compare::a#5 +Redundant Phi (byte*) BGCOL#12 (byte*) BGCOL#14 +Redundant Phi (byte*) char_cursor#68 (byte*) char_cursor#86 +Redundant Phi (byte*) line_cursor#26 (byte*) line_cursor#53 +Redundant Phi (byte*) char_cursor#23 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#24 (byte*) char_cursor#36 +Redundant Phi (byte*) char_cursor#25 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#26 (byte*) char_cursor#36 +Redundant Phi (byte*) char_cursor#28 (byte*) char_cursor#2 +Redundant Phi (byte*) line_cursor#20 (byte*) line_cursor#1 +Redundant Phi (byte*) char_cursor#29 (byte*) line_cursor#1 +Redundant Phi (byte*) char_cursor#30 (byte*) char_cursor#14 +Redundant Phi (byte*) line_cursor#10 (byte*) line_cursor#15 +Succesful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte*) char_cursor#62 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#63 (byte*) char_cursor#2 +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#2) goto print_ln::@1 +Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(word/signed word~) print_cls::$0) goto print_cls::@1 +Simple Condition (boolean~) init_multiply::$4 if((byte~) init_multiply::$2!=(byte/signed byte/word/signed word) 0) goto init_multiply::@2 +Simple Condition (boolean~) init_multiply::$9 if((byte*) init_multiply::sqr1_lo#1!=(byte*~) init_multiply::$8) goto init_multiply::@1 +Simple Condition (boolean~) init_multiply::$14 if((byte) init_multiply::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_multiply::@4 +Simple Condition (boolean~) init_multiply::$16 if((byte*) init_multiply::sqr2_lo#1!=(byte*~) init_multiply::$15) goto init_multiply::@3 +Simple Condition (boolean~) slow_multiply::$1 if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 +Simple Condition (boolean~) slow_multiply::$3 if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 +Simple Condition (boolean~) multiply_tables_compare::$1 if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 +Simple Condition (boolean~) multiply_tables_compare::$10 if((byte*) multiply_tables_compare::kc_sqr#1<(byte*~) multiply_tables_compare::$9) goto multiply_tables_compare::@1 +Simple Condition (boolean~) multiply_results_compare::$3 if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 +Simple Condition (boolean~) multiply_results_compare::$8 if((byte) multiply_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@2 +Simple Condition (boolean~) multiply_results_compare::$9 if((byte) multiply_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@1 +Succesful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) char_cursor#0 = ((byte*))1024 +Constant (const byte[]) print_byte::hextab#0 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' } +Constant (const byte*) print_cls::sc#0 = ((byte*))1024 +Constant (const word/signed word) print_cls::$0 = 1024+1000 +Constant (const byte[512]) mul_sqr1_lo#0 = { fill( 512, 0) } +Constant (const byte[512]) mul_sqr1_hi#0 = { fill( 512, 0) } +Constant (const byte[512]) mul_sqr2_lo#0 = { fill( 512, 0) } +Constant (const byte[512]) mul_sqr2_hi#0 = { fill( 512, 0) } +Constant (const word) init_multiply::sqr#0 = 0 +Constant (const byte) init_multiply::x_2#0 = 0 +Constant (const byte) init_multiply::c#0 = 0 +Constant (const signed byte/signed word) init_multiply::$10 = -1 +Constant (const byte) init_multiply::dir#0 = 255 +Constant (const byte) init_multiply::dir#1 = 1 +Constant (const byte*) multiply::memA#0 = ((byte*))254 +Constant (const byte*) multiply::memB#0 = ((byte*))255 +Constant (const byte*) BGCOL#0 = ((byte*))53281 +Constant (const word) slow_multiply::m#0 = 0 +Constant (const byte) slow_multiply::i#0 = 0 +Constant (const byte[512]) asm_mul_sqr1_lo#0 = { fill( 512, 0) } +Constant (const byte[512]) asm_mul_sqr1_hi#0 = { fill( 512, 0) } +Constant (const byte[512]) asm_mul_sqr2_lo#0 = { fill( 512, 0) } +Constant (const byte[512]) asm_mul_sqr2_hi#0 = { fill( 512, 0) } +Constant (const byte*) init_multiply_asm::mem#0 = ((byte*))255 +Constant (const word/signed word) multiply_tables_compare::$8 = 512*4 +Constant (const string) print_str::str#1 = multiply_tables_compare::str +Constant (const string) print_str::str#2 = multiply_tables_compare::str1 +Constant (const string) print_str::str#3 = multiply_tables_compare::str2 +Constant (const byte) multiply_results_compare::a#0 = 0 +Constant (const byte) multiply_results_compare::b#0 = 0 +Constant (const string) print_str::str#4 = multiply_results_compare::str +Constant (const string) print_str::str#5 = multiply_results_compare::str1 +Constant (const string) print_str::str#6 = multiply_results_compare::str2 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte*) init_multiply::sqr1_hi#0 = mul_sqr1_hi#0+1 +Constant (const byte*) init_multiply::sqr1_lo#0 = mul_sqr1_lo#0+1 +Constant (const byte*) init_multiply::$8 = mul_sqr1_lo#0+512 +Constant (const byte) init_multiply::x_255#0 = ((byte))init_multiply::$10 +Constant (const byte[512]) init_multiply::sqr2_hi#0 = mul_sqr2_hi#0 +Constant (const byte[512]) init_multiply::sqr2_lo#0 = mul_sqr2_lo#0 +Constant (const byte*) init_multiply::$15 = mul_sqr2_lo#0+511 +Constant (const byte*) init_multiply::$17 = mul_sqr2_lo#0+511 +Constant (const byte*) init_multiply::$18 = mul_sqr1_lo#0+256 +Constant (const byte*) init_multiply::$19 = mul_sqr2_hi#0+511 +Constant (const byte*) init_multiply::$20 = mul_sqr1_hi#0+256 +Constant (const byte[512]) multiply_tables_compare::asm_sqr#0 = asm_mul_sqr1_lo#0 +Constant (const byte[512]) multiply_tables_compare::kc_sqr#0 = mul_sqr1_lo#0 +Constant (const byte*) multiply_tables_compare::$9 = mul_sqr1_lo#0+multiply_tables_compare::$8 +Succesful SSA optimization Pass2ConstantIdentification +Fixing word constructor with multiply::$0 ← *(multiply::memB#0) w= *(multiply::memA#0) +Succesful SSA optimization Pass2FixWordConstructors +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) @6 +Culled Empty Block (label) init_multiply::@6 +Not culling empty block because it shares successor with its predecessor. (label) init_multiply::@7 +Culled Empty Block (label) @8 +Culled Empty Block (label) main::@5 +Culled Empty Block (label) slow_multiply::@3 +Culled Empty Block (label) @10 +Culled Empty Block (label) multiply_tables_compare::@9 +Culled Empty Block (label) multiply_tables_compare::@11 +Culled Empty Block (label) multiply_results_compare::@13 +Culled Empty Block (label) multiply_results_compare::@15 +Culled Empty Block (label) @14 +Succesful SSA optimization Pass2CullEmptyBlocks +Not culling empty block because it shares successor with its predecessor. (label) init_multiply::@7 +Not aliassing across scopes: char_cursor#71 char_cursor#11 +Not aliassing across scopes: line_cursor#22 line_cursor#53 +Not aliassing across scopes: print_word::w#4 print_word::w#2 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#64 char_cursor#2 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#41 char_cursor#64 +Not aliassing across scopes: char_cursor#20 line_cursor#1 +Not aliassing across scopes: line_cursor#17 line_cursor#1 +Not aliassing across scopes: char_cursor#86 char_cursor#20 +Not aliassing across scopes: line_cursor#53 line_cursor#17 +Not aliassing across scopes: slow_multiply::a#0 multiply_results_compare::a#5 +Not aliassing across scopes: slow_multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ms#0 slow_multiply::return#2 +Not aliassing across scopes: multiply::a#0 multiply_results_compare::a#5 +Not aliassing across scopes: multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: multiply::return#2 multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ma#0 multiply::return#2 +Not aliassing across scopes: print_word::w#2 multiply_results_compare::ms#0 +Not aliassing across scopes: print_word::w#3 multiply_results_compare::ma#0 +Not aliassing across scopes: char_cursor#27 char_cursor#11 +Alias (word) multiply::return#0 = (word~) multiply::$0 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: char_cursor#71 char_cursor#11 +Not aliassing across scopes: line_cursor#22 line_cursor#53 +Not aliassing across scopes: print_word::w#4 print_word::w#2 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#64 char_cursor#2 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#41 char_cursor#64 +Not aliassing across scopes: char_cursor#20 line_cursor#1 +Not aliassing across scopes: line_cursor#17 line_cursor#1 +Not aliassing across scopes: char_cursor#86 char_cursor#20 +Not aliassing across scopes: line_cursor#53 line_cursor#17 +Not aliassing across scopes: slow_multiply::a#0 multiply_results_compare::a#5 +Not aliassing across scopes: slow_multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ms#0 slow_multiply::return#2 +Not aliassing across scopes: multiply::a#0 multiply_results_compare::a#5 +Not aliassing across scopes: multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: multiply::return#2 multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ma#0 multiply::return#2 +Not aliassing across scopes: print_word::w#2 multiply_results_compare::ms#0 +Not aliassing across scopes: print_word::w#3 multiply_results_compare::ma#0 +Not aliassing across scopes: char_cursor#27 char_cursor#11 +Self Phi Eliminated (byte*) BGCOL#14 +Self Phi Eliminated (byte*) char_cursor#86 +Self Phi Eliminated (byte*) line_cursor#53 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) BGCOL#14 (const byte*) BGCOL#0 +Redundant Phi (byte*) char_cursor#86 (byte*) char_cursor#20 +Redundant Phi (byte*) line_cursor#53 (byte*) line_cursor#17 +Succesful SSA optimization Pass2RedundantPhiElimination +Not culling empty block because it shares successor with its predecessor. (label) init_multiply::@7 +Not aliassing across scopes: char_cursor#71 char_cursor#11 +Not aliassing across scopes: line_cursor#22 line_cursor#17 +Not aliassing across scopes: print_word::w#4 print_word::w#2 +Not aliassing across scopes: print_byte::b#2 print_byte::b#0 +Not aliassing across scopes: char_cursor#64 char_cursor#2 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#41 char_cursor#64 +Not aliassing across scopes: char_cursor#20 line_cursor#1 +Not aliassing across scopes: line_cursor#17 line_cursor#1 +Not aliassing across scopes: slow_multiply::a#0 multiply_results_compare::a#5 +Not aliassing across scopes: slow_multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: slow_multiply::return#2 slow_multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ms#0 slow_multiply::return#2 +Not aliassing across scopes: multiply::a#0 multiply_results_compare::a#5 +Not aliassing across scopes: multiply::b#0 multiply_results_compare::b#2 +Not aliassing across scopes: multiply::return#2 multiply::return#0 +Not aliassing across scopes: multiply_results_compare::ma#0 multiply::return#2 +Not aliassing across scopes: print_word::w#2 multiply_results_compare::ms#0 +Not aliassing across scopes: print_word::w#3 multiply_results_compare::ma#0 +Not aliassing across scopes: char_cursor#27 char_cursor#11 +Not aliassing across scopes: line_cursor#19 line_cursor#17 +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 +Inlining constant with var siblings (const string) print_str::str#1 +Inlining constant with var siblings (const string) print_str::str#2 +Inlining constant with var siblings (const string) print_str::str#2 +Inlining constant with var siblings (const string) print_str::str#2 +Inlining constant with var siblings (const string) print_str::str#3 +Inlining constant with var siblings (const string) print_str::str#3 +Inlining constant with var siblings (const string) print_str::str#3 +Inlining constant with var siblings (const string) print_str::str#4 +Inlining constant with var siblings (const string) print_str::str#4 +Inlining constant with var siblings (const string) print_str::str#4 +Inlining constant with var siblings (const string) print_str::str#5 +Inlining constant with var siblings (const string) print_str::str#5 +Inlining constant with var siblings (const string) print_str::str#5 +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 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 word) init_multiply::sqr#0 +Inlining constant with var siblings (const word) init_multiply::sqr#0 +Inlining constant with var siblings (const word) init_multiply::sqr#0 +Inlining constant with var siblings (const word) init_multiply::sqr#0 +Inlining constant with var siblings (const byte) init_multiply::x_2#0 +Inlining constant with var siblings (const byte) init_multiply::x_2#0 +Inlining constant with var siblings (const byte) init_multiply::x_2#0 +Inlining constant with var siblings (const byte) init_multiply::c#0 +Inlining constant with var siblings (const byte) init_multiply::c#0 +Inlining constant with var siblings (const byte) init_multiply::dir#0 +Inlining constant with var siblings (const byte) init_multiply::dir#0 +Inlining constant with different constant siblings (const byte) init_multiply::dir#0 +Inlining constant with var siblings (const byte) init_multiply::dir#1 +Inlining constant with var siblings (const byte) init_multiply::dir#1 +Inlining constant with different constant siblings (const byte) init_multiply::dir#1 +Inlining constant with var siblings (const byte*) init_multiply::sqr1_hi#0 +Inlining constant with var siblings (const byte*) init_multiply::sqr1_hi#0 +Inlining constant with var siblings (const byte*) init_multiply::sqr1_lo#0 +Inlining constant with var siblings (const byte*) init_multiply::sqr1_lo#0 +Inlining constant with var siblings (const byte) init_multiply::x_255#0 +Inlining constant with var siblings (const byte) init_multiply::x_255#0 +Inlining constant with var siblings (const byte[512]) init_multiply::sqr2_hi#0 +Inlining constant with var siblings (const byte[512]) init_multiply::sqr2_hi#0 +Inlining constant with var siblings (const byte[512]) init_multiply::sqr2_lo#0 +Inlining constant with var siblings (const byte[512]) init_multiply::sqr2_lo#0 +Inlining constant with var siblings (const word) slow_multiply::m#0 +Inlining constant with var siblings (const word) slow_multiply::m#0 +Inlining constant with var siblings (const byte) slow_multiply::i#0 +Inlining constant with var siblings (const byte) slow_multiply::i#0 +Inlining constant with var siblings (const byte[512]) multiply_tables_compare::asm_sqr#0 +Inlining constant with var siblings (const byte[512]) multiply_tables_compare::asm_sqr#0 +Inlining constant with var siblings (const byte[512]) multiply_tables_compare::kc_sqr#0 +Inlining constant with var siblings (const byte[512]) multiply_tables_compare::kc_sqr#0 +Inlining constant with var siblings (const byte) multiply_results_compare::a#0 +Inlining constant with var siblings (const byte) multiply_results_compare::a#0 +Inlining constant with var siblings (const byte) multiply_results_compare::b#0 +Inlining constant with var siblings (const byte) multiply_results_compare::b#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 +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 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Constant inlined slow_multiply::m#0 = (byte/signed byte/word/signed word) 0 +Constant inlined init_multiply::dir#0 = (byte/word/signed word) 255 +Constant inlined print_cls::$0 = (word/signed word) 1024+(word/signed word) 1000 +Constant inlined init_multiply::$8 = (const byte[512]) mul_sqr1_lo#0+(word/signed word) 512 +Constant inlined slow_multiply::i#0 = (byte/signed byte/word/signed word) 0 +Constant inlined init_multiply::x_255#0 = ((byte))-(byte/signed byte/word/signed word) 1 +Constant inlined init_multiply::dir#1 = (byte/signed byte/word/signed word) 1 +Constant inlined init_multiply::sqr#0 = (byte/signed byte/word/signed word) 0 +Constant inlined multiply_tables_compare::asm_sqr#0 = (const byte[512]) asm_mul_sqr1_lo#0 +Constant inlined init_multiply::$20 = (const byte[512]) mul_sqr1_hi#0+(word/signed word) 256 +Constant inlined multiply_tables_compare::$9 = (const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4 +Constant inlined multiply_tables_compare::$8 = (word/signed word) 512*(byte/signed byte/word/signed word) 4 +Constant inlined init_multiply::sqr2_hi#0 = (const byte[512]) mul_sqr2_hi#0 +Constant inlined init_multiply::sqr2_lo#0 = (const byte[512]) mul_sqr2_lo#0 +Constant inlined multiply_tables_compare::kc_sqr#0 = (const byte[512]) mul_sqr1_lo#0 +Constant inlined init_multiply::$18 = (const byte[512]) mul_sqr1_lo#0+(word/signed word) 256 +Constant inlined init_multiply::$19 = (const byte[512]) mul_sqr2_hi#0+(word/signed word) 511 +Constant inlined init_multiply::c#0 = (byte/signed byte/word/signed word) 0 +Constant inlined init_multiply::$10 = -(byte/signed byte/word/signed word) 1 +Constant inlined print_cls::sc#0 = ((byte*))(word/signed word) 1024 +Constant inlined init_multiply::$17 = (const byte[512]) mul_sqr2_lo#0+(word/signed word) 511 +Constant inlined init_multiply::sqr1_lo#0 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 +Constant inlined init_multiply::$15 = (const byte[512]) mul_sqr2_lo#0+(word/signed word) 511 +Constant inlined init_multiply::sqr1_hi#0 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 +Constant inlined multiply_results_compare::a#0 = (byte/signed byte/word/signed word) 0 +Constant inlined multiply_results_compare::b#0 = (byte/signed byte/word/signed word) 0 +Constant inlined print_str::str#4 = (const string) multiply_results_compare::str +Constant inlined print_str::str#3 = (const string) multiply_tables_compare::str2 +Constant inlined print_str::str#2 = (const string) multiply_tables_compare::str1 +Constant inlined char_cursor#0 = ((byte*))(word/signed word) 1024 +Constant inlined print_str::str#1 = (const string) multiply_tables_compare::str +Constant inlined print_str::str#6 = (const string) multiply_results_compare::str2 +Constant inlined print_str::str#5 = (const string) multiply_results_compare::str1 +Constant inlined init_multiply::x_2#0 = (byte/signed byte/word/signed word) 0 +Succesful SSA optimization Pass2ConstantInlining +Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@3 main::@4 main::@return multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@2 multiply_results_compare::@8 multiply_results_compare::@9 multiply_results_compare::@4 multiply_results_compare::@10 multiply_results_compare::@11 multiply_results_compare::@12 multiply_results_compare::@return multiply_results_compare::@3 multiply_results_compare::@6 multiply_results_compare::@7 multiply_results_compare::@14 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return multiply multiply::@return slow_multiply slow_multiply::@2 slow_multiply::@1 slow_multiply::@return multiply_tables_compare multiply_tables_compare::@1 multiply_tables_compare::@3 multiply_tables_compare::@6 multiply_tables_compare::@7 multiply_tables_compare::@8 multiply_tables_compare::@return multiply_tables_compare::@2 multiply_tables_compare::@5 multiply_tables_compare::@10 init_multiply_asm init_multiply_asm::@return init_multiply init_multiply::@1 init_multiply::@5 init_multiply::@2 init_multiply::@3 init_multiply::@7 init_multiply::@4 init_multiply::@8 init_multiply::@return print_cls print_cls::@1 print_cls::@return +Added new block during phi lifting multiply_results_compare::@16(between multiply_results_compare::@6 and multiply_results_compare::@1) +Added new block during phi lifting multiply_results_compare::@17(between multiply_results_compare::@3 and multiply_results_compare::@2) +Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting slow_multiply::@6(between slow_multiply::@2 and slow_multiply::@2) +Added new block during phi lifting slow_multiply::@7(between slow_multiply::@2 and slow_multiply::@1) +Added new block during phi lifting multiply_tables_compare::@12(between multiply_tables_compare::@2 and multiply_tables_compare::@1) +Added new block during phi lifting init_multiply::@9(between init_multiply::@2 and init_multiply::@1) +Added new block during phi lifting init_multiply::@10(between init_multiply::@1 and init_multiply::@2) +Added new block during phi lifting init_multiply::@11(between init_multiply::@4 and init_multiply::@3) +Added new block during phi lifting init_multiply::@12(between init_multiply::@3 and init_multiply::@4) +Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) +Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@3 main::@4 main::@return multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@2 multiply_results_compare::@8 multiply_results_compare::@9 multiply_results_compare::@4 multiply_results_compare::@10 multiply_results_compare::@11 multiply_results_compare::@12 multiply_results_compare::@return multiply_results_compare::@3 multiply_results_compare::@6 multiply_results_compare::@7 multiply_results_compare::@14 multiply_results_compare::@16 multiply_results_compare::@17 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return multiply multiply::@return slow_multiply slow_multiply::@2 slow_multiply::@7 slow_multiply::@1 slow_multiply::@return slow_multiply::@6 multiply_tables_compare multiply_tables_compare::@1 multiply_tables_compare::@3 multiply_tables_compare::@6 multiply_tables_compare::@7 multiply_tables_compare::@8 multiply_tables_compare::@return multiply_tables_compare::@2 multiply_tables_compare::@5 multiply_tables_compare::@10 multiply_tables_compare::@12 init_multiply_asm init_multiply_asm::@return init_multiply init_multiply::@1 init_multiply::@5 init_multiply::@2 init_multiply::@3 init_multiply::@7 init_multiply::@4 init_multiply::@8 init_multiply::@return init_multiply::@11 init_multiply::@12 init_multiply::@9 init_multiply::@10 print_cls print_cls::@1 print_cls::@return print_cls::@3 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @13 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of multiply_results_compare +Adding NOP phi() at start of multiply_tables_compare +Adding NOP phi() at start of multiply_tables_compare::@5 +Adding NOP phi() at start of multiply_tables_compare::@10 +Adding NOP phi() at start of init_multiply +Adding NOP phi() at start of init_multiply::@7 +Adding NOP phi() at start of print_cls +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to print_cls:5 init_multiply:7 init_multiply_asm:9 multiply_tables_compare:11 multiply_results_compare:13 +Calls in [multiply_results_compare] to slow_multiply:20 multiply:25 print_str:31 print_word:34 print_str:36 print_word:39 print_str:49 print_ln:51 +Calls in [print_word] to print_byte:78 print_byte:82 +Calls in [print_byte] to print_char:89 print_char:94 +Calls in [multiply_tables_compare] to print_str:119 print_word:122 print_str:124 print_word:127 print_str:135 print_ln:137 + +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Created 35 initial phi equivalence classes +Coalesced [30] char_cursor#91 ← char_cursor#20 +Coalesced [33] print_word::w#6 ← print_word::w#2 +Coalesced [35] char_cursor#90 ← char_cursor#11 +Coalesced [38] print_word::w#7 ← print_word::w#3 +Coalesced [40] char_cursor#88 ← char_cursor#11 +Coalesced [41] line_cursor#55 ← line_cursor#17 +Coalesced (already) [48] char_cursor#92 ← char_cursor#20 +Coalesced [50] line_cursor#57 ← line_cursor#17 +Not coalescing [52] char_cursor#89 ← line_cursor#1 +Coalesced [53] line_cursor#56 ← line_cursor#1 +Coalesced [54] multiply_results_compare::a#8 ← multiply_results_compare::a#1 +Coalesced [55] multiply_results_compare::b#6 ← multiply_results_compare::b#1 +Coalesced [57] line_cursor#58 ← line_cursor#22 +Coalesced (already) [62] line_cursor#59 ← line_cursor#1 +Coalesced [64] print_str::str#10 ← print_str::str#9 +Coalesced [65] char_cursor#94 ← char_cursor#71 +Coalesced [72] print_str::str#11 ← print_str::str#0 +Coalesced [73] char_cursor#95 ← char_cursor#1 +Coalesced [76] print_byte::b#4 ← print_byte::b#0 +Coalesced [77] char_cursor#96 ← char_cursor#2 +Coalesced [80] print_byte::b#5 ← print_byte::b#1 +Coalesced (already) [81] char_cursor#97 ← char_cursor#11 +Coalesced [87] print_char::ch#3 ← print_char::ch#0 +Coalesced [88] char_cursor#98 ← char_cursor#64 +Coalesced [92] print_char::ch#4 ← print_char::ch#1 +Coalesced (already) [93] char_cursor#99 ← char_cursor#11 +Coalesced [110] slow_multiply::return#5 ← slow_multiply::m#1 +Coalesced [113] slow_multiply::m#5 ← slow_multiply::m#1 +Coalesced [114] slow_multiply::i#3 ← slow_multiply::i#1 +Coalesced [121] print_word::w#8 ← print_word::w#0 +Coalesced (already) [123] char_cursor#93 ← char_cursor#11 +Coalesced [126] print_word::w#9 ← print_word::w#1 +Coalesced (already) [128] char_cursor#101 ← char_cursor#11 +Not coalescing [138] char_cursor#100 ← line_cursor#1 +Coalesced (already) [139] line_cursor#60 ← line_cursor#1 +Coalesced [140] multiply_tables_compare::kc_sqr#8 ← multiply_tables_compare::kc_sqr#1 +Coalesced [141] multiply_tables_compare::asm_sqr#6 ← multiply_tables_compare::asm_sqr#1 +Coalesced [155] init_multiply::sqr#8 ← init_multiply::sqr#2 +Coalesced [156] init_multiply::x_2#7 ← init_multiply::x_2#1 +Coalesced [179] init_multiply::x_255#5 ← init_multiply::x_255#1 +Coalesced [180] init_multiply::sqr2_lo#5 ← init_multiply::sqr2_lo#1 +Coalesced [181] init_multiply::sqr2_hi#5 ← init_multiply::sqr2_hi#1 +Coalesced [182] init_multiply::dir#4 ← init_multiply::dir#3 +Coalesced (already) [183] init_multiply::dir#5 ← init_multiply::dir#2 +Coalesced [184] init_multiply::c#5 ← init_multiply::c#1 +Coalesced [185] init_multiply::sqr#6 ← init_multiply::sqr#1 +Coalesced [186] init_multiply::sqr1_lo#5 ← init_multiply::sqr1_lo#1 +Coalesced [187] init_multiply::sqr1_hi#5 ← init_multiply::sqr1_hi#1 +Coalesced [188] init_multiply::x_2#5 ← init_multiply::x_2#2 +Coalesced [189] init_multiply::sqr#7 ← init_multiply::sqr#4 +Coalesced (already) [190] init_multiply::x_2#6 ← init_multiply::x_2#3 +Coalesced [197] print_cls::sc#3 ← print_cls::sc#1 +Coalesced down to 22 phi equivalence classes +Culled Empty Block (label) multiply_results_compare::@16 +Culled Empty Block (label) multiply_results_compare::@17 +Culled Empty Block (label) print_ln::@3 +Culled Empty Block (label) slow_multiply::@7 +Culled Empty Block (label) slow_multiply::@6 +Culled Empty Block (label) multiply_tables_compare::@12 +Culled Empty Block (label) init_multiply::@7 +Culled Empty Block (label) init_multiply::@11 +Not culling empty block because it shares successor with its predecessor. (label) init_multiply::@12 +Culled Empty Block (label) init_multiply::@9 +Culled Empty Block (label) init_multiply::@10 +Culled Empty Block (label) print_cls::@3 +Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@3 main::@4 main::@return multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@2 multiply_results_compare::@8 multiply_results_compare::@9 multiply_results_compare::@4 multiply_results_compare::@10 multiply_results_compare::@11 multiply_results_compare::@12 multiply_results_compare::@return multiply_results_compare::@3 multiply_results_compare::@6 multiply_results_compare::@7 multiply_results_compare::@14 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return multiply multiply::@return slow_multiply slow_multiply::@2 slow_multiply::@1 slow_multiply::@return multiply_tables_compare multiply_tables_compare::@1 multiply_tables_compare::@3 multiply_tables_compare::@6 multiply_tables_compare::@7 multiply_tables_compare::@8 multiply_tables_compare::@return multiply_tables_compare::@2 multiply_tables_compare::@5 multiply_tables_compare::@10 init_multiply_asm init_multiply_asm::@return init_multiply init_multiply::@1 init_multiply::@5 init_multiply::@2 init_multiply::@3 init_multiply::@4 init_multiply::@8 init_multiply::@return init_multiply::@12 print_cls print_cls::@1 print_cls::@return +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @13 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of multiply_results_compare +Adding NOP phi() at start of multiply_results_compare::@11 +Adding NOP phi() at start of multiply_results_compare::@7 +Adding NOP phi() at start of multiply_results_compare::@14 +Adding NOP phi() at start of multiply_tables_compare +Adding NOP phi() at start of multiply_tables_compare::@7 +Adding NOP phi() at start of multiply_tables_compare::@5 +Adding NOP phi() at start of multiply_tables_compare::@10 +Adding NOP phi() at start of init_multiply +Adding NOP phi() at start of init_multiply::@12 +Adding NOP phi() at start of print_cls +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@13 +@13: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @13 + [3] phi() [ ] ( ) +main: scope:[main] from @13 + [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) + [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + to:main::@1 +main::@1: scope:[main] from main + [6] phi() [ ] ( main:2 [ ] ) + [7] call init_multiply param-assignment [ ] ( main:2 [ ] ) + to:main::@2 +main::@2: scope:[main] from main::@1 + [8] phi() [ ] ( main:2 [ ] ) + [9] call init_multiply_asm param-assignment [ ] ( main:2 [ ] ) + to:main::@3 +main::@3: scope:[main] from main::@2 + [10] phi() [ ] ( main:2 [ ] ) + [11] call multiply_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) + to:main::@4 +main::@4: scope:[main] from main::@3 + [12] phi() [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) + [13] call multiply_results_compare param-assignment [ ] ( main:2 [ ] ) + to:main::@return +main::@return: scope:[main] from main::@4 + [14] return [ ] ( main:2 [ ] ) + to:@return +multiply_results_compare: scope:[multiply_results_compare] from main::@4 + [15] phi() [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ line_cursor#17 char_cursor#20 ] ) + to:multiply_results_compare::@1 +multiply_results_compare::@1: scope:[multiply_results_compare] from multiply_results_compare multiply_results_compare::@6 + [16] (byte) multiply_results_compare::a#5 ← phi( multiply_results_compare/(byte/signed byte/word/signed word) 0 multiply_results_compare::@6/(byte) multiply_results_compare::a#1 ) [ multiply_results_compare::a#5 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 line_cursor#17 char_cursor#20 ] ) + to:multiply_results_compare::@2 +multiply_results_compare::@2: scope:[multiply_results_compare] from multiply_results_compare::@1 multiply_results_compare::@3 + [17] (byte) multiply_results_compare::b#2 ← phi( multiply_results_compare::@1/(byte/signed byte/word/signed word) 0 multiply_results_compare::@3/(byte) multiply_results_compare::b#1 ) [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 ] ) + [18] (byte) slow_multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) + [19] (byte) slow_multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) + [20] call slow_multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) + [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) + to:multiply_results_compare::@8 +multiply_results_compare::@8: scope:[multiply_results_compare] from multiply_results_compare::@2 + [22] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) + [23] (byte) multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ) + [24] (byte) multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ) + [25] call multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ) + [26] (word) multiply::return#2 ← (word) multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ) + to:multiply_results_compare::@9 +multiply_results_compare::@9: scope:[multiply_results_compare] from multiply_results_compare::@8 + [27] (word) multiply_results_compare::ma#0 ← (word) multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) + [28] if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) + to:multiply_results_compare::@4 +multiply_results_compare::@4: scope:[multiply_results_compare] from multiply_results_compare::@9 + [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) + [30] call print_str param-assignment [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + to:multiply_results_compare::@10 +multiply_results_compare::@10: scope:[multiply_results_compare] from multiply_results_compare::@4 + [31] (word) print_word::w#2 ← (word) multiply_results_compare::ms#0 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) + [32] call print_word param-assignment [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) + to:multiply_results_compare::@11 +multiply_results_compare::@11: scope:[multiply_results_compare] from multiply_results_compare::@10 + [33] phi() [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) + [34] call print_str param-assignment [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + to:multiply_results_compare::@12 +multiply_results_compare::@12: scope:[multiply_results_compare] from multiply_results_compare::@11 + [35] (word) print_word::w#3 ← (word) multiply_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) + [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) + to:multiply_results_compare::@return +multiply_results_compare::@return: scope:[multiply_results_compare] from multiply_results_compare::@12 multiply_results_compare::@14 + [37] (byte*) line_cursor#19 ← phi( multiply_results_compare::@12/(byte*) line_cursor#17 multiply_results_compare::@14/(byte*) line_cursor#1 ) [ ] ( main:2::multiply_results_compare:13 [ ] ) + [37] (byte*) char_cursor#27 ← phi( multiply_results_compare::@12/(byte*) char_cursor#11 multiply_results_compare::@14/(byte*~) char_cursor#89 ) [ ] ( main:2::multiply_results_compare:13 [ ] ) + [38] return [ ] ( main:2::multiply_results_compare:13 [ ] ) + to:@return +multiply_results_compare::@3: scope:[multiply_results_compare] from multiply_results_compare::@9 + [39] (byte) multiply_results_compare::b#1 ← ++ (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) + [40] if((byte) multiply_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) + to:multiply_results_compare::@6 +multiply_results_compare::@6: scope:[multiply_results_compare] from multiply_results_compare::@3 + [41] (byte) multiply_results_compare::a#1 ← ++ (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) + [42] if((byte) multiply_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@1 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) + to:multiply_results_compare::@7 +multiply_results_compare::@7: scope:[multiply_results_compare] from multiply_results_compare::@6 + [43] phi() [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ line_cursor#17 char_cursor#20 ] ) + [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) + to:multiply_results_compare::@14 +multiply_results_compare::@14: scope:[multiply_results_compare] from multiply_results_compare::@7 + [45] phi() [ line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) + [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_results_compare:13 [ line_cursor#1 ] ) + [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::multiply_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) + to:multiply_results_compare::@return +print_ln: scope:[print_ln] from multiply_results_compare::@14 multiply_tables_compare::@10 + [48] (byte*) line_cursor#22 ← phi( multiply_results_compare::@14/(byte*) line_cursor#17 multiply_tables_compare::@10/((byte*))(word/signed word) 1024 ) [ line_cursor#22 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#22 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#22 char_cursor#2 ] ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [49] (byte*) line_cursor#11 ← phi( print_ln/(byte*) line_cursor#22 print_ln::@1/(byte*) line_cursor#1 ) [ line_cursor#11 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#11 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#11 char_cursor#2 ] ) + [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) + [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [52] return [ line_cursor#1 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) + to:@return +print_str: scope:[print_str] from multiply_results_compare::@11 multiply_results_compare::@4 multiply_results_compare::@7 multiply_tables_compare::@3 multiply_tables_compare::@5 multiply_tables_compare::@7 + [53] (byte*) char_cursor#71 ← phi( multiply_results_compare::@11/(byte*) char_cursor#11 multiply_results_compare::@4/(byte*) char_cursor#20 multiply_results_compare::@7/(byte*) char_cursor#20 multiply_tables_compare::@3/((byte*))(word/signed word) 1024 multiply_tables_compare::@5/((byte*))(word/signed word) 1024 multiply_tables_compare::@7/(byte*) char_cursor#11 ) [ print_str::str#9 char_cursor#71 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#9 char_cursor#71 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#9 char_cursor#71 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#9 char_cursor#71 ] ) + [53] (byte*) print_str::str#9 ← phi( multiply_results_compare::@11/(const string) multiply_results_compare::str1 multiply_results_compare::@4/(const string) multiply_results_compare::str multiply_results_compare::@7/(const string) multiply_results_compare::str2 multiply_tables_compare::@3/(const string) multiply_tables_compare::str multiply_tables_compare::@5/(const string) multiply_tables_compare::str2 multiply_tables_compare::@7/(const string) multiply_tables_compare::str1 ) [ print_str::str#9 char_cursor#71 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#9 char_cursor#71 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#9 char_cursor#71 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#9 char_cursor#71 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#9 char_cursor#71 ] ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + [54] (byte*) char_cursor#2 ← phi( print_str/(byte*) char_cursor#71 print_str::@2/(byte*) char_cursor#1 ) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) + [54] (byte*) print_str::str#7 ← phi( print_str/(byte*) print_str::str#9 print_str::@2/(byte*) print_str::str#0 ) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) + [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) + to:print_str::@return +print_str::@return: scope:[print_str] from print_str::@1 + [56] return [ char_cursor#2 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 ] ) + to:@return +print_str::@2: scope:[print_str] from print_str::@1 + [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) + [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) + [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) + to:print_str::@1 +print_word: scope:[print_word] from multiply_results_compare::@10 multiply_results_compare::@12 multiply_tables_compare::@6 multiply_tables_compare::@8 + [60] (word) print_word::w#4 ← phi( multiply_results_compare::@10/(word) print_word::w#2 multiply_results_compare::@12/(word) print_word::w#3 multiply_tables_compare::@6/(word) print_word::w#0 multiply_tables_compare::@8/(word) print_word::w#1 ) [ char_cursor#2 print_word::w#4 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 ] ) + [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) + [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) + [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [65] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + to:@return +print_byte: scope:[print_byte] from print_word print_word::@1 + [66] (byte*) char_cursor#64 ← phi( print_word/(byte*) char_cursor#2 print_word::@1/(byte*) char_cursor#11 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) + [66] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#2 char_cursor#64 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 ] ) + [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) + [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) + [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) + [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) + [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [73] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + [74] (byte*) char_cursor#41 ← phi( print_byte/(byte*) char_cursor#64 print_byte::@1/(byte*) char_cursor#11 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) + [74] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [ print_char::ch#2 char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_char::ch#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ print_char::ch#2 char_cursor#41 ] ) + [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) + [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [77] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) + to:@return +multiply: scope:[multiply] from multiply_results_compare::@8 + [78] *((const byte*) multiply::memA#0) ← (byte) multiply::a#0 [ multiply::b#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::b#0 ] ) + [79] *((const byte*) multiply::memB#0) ← (byte) multiply::b#0 [ ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) + asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + [81] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) + to:multiply::@return +multiply::@return: scope:[multiply] from multiply + [82] return [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) + to:@return +slow_multiply: scope:[slow_multiply] from multiply_results_compare::@2 + [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) + to:slow_multiply::@2 +slow_multiply::@2: scope:[slow_multiply] from slow_multiply slow_multiply::@2 + [84] (byte) slow_multiply::i#2 ← phi( slow_multiply::@2/(byte) slow_multiply::i#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) + [84] (word) slow_multiply::m#3 ← phi( slow_multiply::@2/(word) slow_multiply::m#1 slow_multiply/(byte/signed byte/word/signed word) 0 ) [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] ) + [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) + [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) + [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) + to:slow_multiply::@1 +slow_multiply::@1: scope:[slow_multiply] from slow_multiply slow_multiply::@2 + [88] (word) slow_multiply::return#0 ← phi( slow_multiply/(byte/signed byte/word/signed word) 0 slow_multiply::@2/(word) slow_multiply::m#1 ) [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) + to:slow_multiply::@return +slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1 + [89] return [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) + to:@return +multiply_tables_compare: scope:[multiply_tables_compare] from main::@3 + [90] phi() [ ] ( main:2::multiply_tables_compare:11 [ ] ) + to:multiply_tables_compare::@1 +multiply_tables_compare::@1: scope:[multiply_tables_compare] from multiply_tables_compare multiply_tables_compare::@2 + [91] (byte*) multiply_tables_compare::asm_sqr#2 ← phi( multiply_tables_compare/(const byte[512]) asm_mul_sqr1_lo#0 multiply_tables_compare::@2/(byte*) multiply_tables_compare::asm_sqr#1 ) [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + [91] (byte*) multiply_tables_compare::kc_sqr#2 ← phi( multiply_tables_compare/(const byte[512]) mul_sqr1_lo#0 multiply_tables_compare::@2/(byte*) multiply_tables_compare::kc_sqr#1 ) [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + [92] if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + to:multiply_tables_compare::@3 +multiply_tables_compare::@3: scope:[multiply_tables_compare] from multiply_tables_compare::@1 + [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + [94] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + to:multiply_tables_compare::@6 +multiply_tables_compare::@6: scope:[multiply_tables_compare] from multiply_tables_compare::@3 + [95] (word) print_word::w#0 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ) + [96] call print_word param-assignment [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ) + to:multiply_tables_compare::@7 +multiply_tables_compare::@7: scope:[multiply_tables_compare] from multiply_tables_compare::@6 + [97] phi() [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ) + [98] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ) + to:multiply_tables_compare::@8 +multiply_tables_compare::@8: scope:[multiply_tables_compare] from multiply_tables_compare::@7 + [99] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) + [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 ] ) + to:multiply_tables_compare::@return +multiply_tables_compare::@return: scope:[multiply_tables_compare] from multiply_tables_compare::@10 multiply_tables_compare::@8 + [101] (byte*) line_cursor#17 ← phi( multiply_tables_compare::@10/(byte*) line_cursor#1 multiply_tables_compare::@8/((byte*))(word/signed word) 1024 ) [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + [101] (byte*) char_cursor#20 ← phi( multiply_tables_compare::@10/(byte*~) char_cursor#100 multiply_tables_compare::@8/(byte*) char_cursor#11 ) [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + to:@return +multiply_tables_compare::@2: scope:[multiply_tables_compare] from multiply_tables_compare::@1 + [103] (byte*) multiply_tables_compare::asm_sqr#1 ← ++ (byte*) multiply_tables_compare::asm_sqr#2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ) + [104] (byte*) multiply_tables_compare::kc_sqr#1 ← ++ (byte*) multiply_tables_compare::kc_sqr#2 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) + [105] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) + to:multiply_tables_compare::@5 +multiply_tables_compare::@5: scope:[multiply_tables_compare] from multiply_tables_compare::@2 + [106] phi() [ ] ( main:2::multiply_tables_compare:11 [ ] ) + [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 ] ) + to:multiply_tables_compare::@10 +multiply_tables_compare::@10: scope:[multiply_tables_compare] from multiply_tables_compare::@5 + [108] phi() [ char_cursor#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 ] ) + [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 ] ) + [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) + to:multiply_tables_compare::@return +init_multiply_asm: scope:[init_multiply_asm] from main::@2 + asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + [112] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + [113] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + [114] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + [115] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) + to:init_multiply_asm::@return +init_multiply_asm::@return: scope:[init_multiply_asm] from init_multiply_asm + [116] return [ ] ( main:2::init_multiply_asm:9 [ ] ) + to:@return +init_multiply: scope:[init_multiply] from main::@1 + [117] phi() [ ] ( main:2::init_multiply:7 [ ] ) + to:init_multiply::@1 +init_multiply::@1: scope:[init_multiply] from init_multiply init_multiply::@2 + [118] (byte) init_multiply::x_2#3 ← phi( init_multiply/(byte/signed byte/word/signed word) 0 init_multiply::@2/(byte) init_multiply::x_2#2 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (byte*) init_multiply::sqr1_hi#2 ← phi( init_multiply/(const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 init_multiply::@2/(byte*) init_multiply::sqr1_hi#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (byte*) init_multiply::sqr1_lo#2 ← phi( init_multiply/(const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 init_multiply::@2/(byte*) init_multiply::sqr1_lo#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (word) init_multiply::sqr#4 ← phi( init_multiply/(byte/signed byte/word/signed word) 0 init_multiply::@2/(word) init_multiply::sqr#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [118] (byte) init_multiply::c#2 ← phi( init_multiply/(byte/signed byte/word/signed word) 0 init_multiply::@2/(byte) init_multiply::c#1 ) [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ( main:2::init_multiply:7 [ init_multiply::c#2 init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 ] ) + [119] (byte) init_multiply::c#1 ← ++ (byte) init_multiply::c#2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) + [120] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ) + [121] if((byte~) init_multiply::$2!=(byte/signed byte/word/signed word) 0) goto init_multiply::@2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) + to:init_multiply::@5 +init_multiply::@5: scope:[init_multiply] from init_multiply::@1 + [122] (byte) init_multiply::x_2#1 ← ++ (byte) init_multiply::x_2#3 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ) + [123] (word) init_multiply::sqr#2 ← ++ (word) init_multiply::sqr#4 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ) + to:init_multiply::@2 +init_multiply::@2: scope:[init_multiply] from init_multiply::@1 init_multiply::@5 + [124] (byte) init_multiply::x_2#2 ← phi( init_multiply::@1/(byte) init_multiply::x_2#3 init_multiply::@5/(byte) init_multiply::x_2#1 ) [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [124] (word) init_multiply::sqr#3 ← phi( init_multiply::@1/(word) init_multiply::sqr#4 init_multiply::@5/(word) init_multiply::sqr#2 ) [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [125] (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ) + [126] *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [127] (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ) + [128] *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [129] (byte*) init_multiply::sqr1_hi#1 ← ++ (byte*) init_multiply::sqr1_hi#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) + [130] (word) init_multiply::sqr#1 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) + [131] (byte*) init_multiply::sqr1_lo#1 ← ++ (byte*) init_multiply::sqr1_lo#2 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) + [132] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_multiply::@1 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) + to:init_multiply::@3 +init_multiply::@3: scope:[init_multiply] from init_multiply::@2 init_multiply::@4 + [133] (byte) init_multiply::dir#2 ← phi( init_multiply::@4/(byte) init_multiply::dir#3 init_multiply::@2/(byte/word/signed word) 255 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [133] (byte*) init_multiply::sqr2_hi#2 ← phi( init_multiply::@4/(byte*) init_multiply::sqr2_hi#1 init_multiply::@2/(const byte[512]) mul_sqr2_hi#0 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [133] (byte*) init_multiply::sqr2_lo#2 ← phi( init_multiply::@4/(byte*) init_multiply::sqr2_lo#1 init_multiply::@2/(const byte[512]) mul_sqr2_lo#0 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [133] (byte) init_multiply::x_255#2 ← phi( init_multiply::@4/(byte) init_multiply::x_255#1 init_multiply::@2/((byte))-(byte/signed byte/word/signed word) 1 ) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [134] *((byte*) init_multiply::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [135] *((byte*) init_multiply::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) + [136] (byte*) init_multiply::sqr2_hi#1 ← ++ (byte*) init_multiply::sqr2_hi#2 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ) + [137] (byte) init_multiply::x_255#1 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) + [138] if((byte) init_multiply::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_multiply::@12 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) + to:init_multiply::@4 +init_multiply::@4: scope:[init_multiply] from init_multiply::@12 init_multiply::@3 + [139] (byte) init_multiply::dir#3 ← phi( init_multiply::@12/(byte) init_multiply::dir#2 init_multiply::@3/(byte/signed byte/word/signed word) 1 ) [ init_multiply::sqr2_lo#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) + [140] (byte*) init_multiply::sqr2_lo#1 ← ++ (byte*) init_multiply::sqr2_lo#2 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) + [141] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_multiply::@3 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) + to:init_multiply::@8 +init_multiply::@8: scope:[init_multiply] from init_multiply::@4 + [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) + [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) + to:init_multiply::@return +init_multiply::@return: scope:[init_multiply] from init_multiply::@8 + [144] return [ ] ( main:2::init_multiply:7 [ ] ) + to:@return +init_multiply::@12: scope:[init_multiply] from init_multiply::@3 + [145] phi() [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) + to:init_multiply::@4 +print_cls: scope:[print_cls] from main + [146] phi() [ ] ( main:2::print_cls:5 [ ] ) + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [147] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [151] return [ ] ( main:2::print_cls:5 [ ] ) + to:@return + +DOMINATORS +@begin dominated by @begin +@13 dominated by @begin @13 +@end dominated by @end @begin @13 +main dominated by main @begin @13 +main::@1 dominated by main main::@1 @begin @13 +main::@2 dominated by main main::@1 main::@2 @begin @13 +main::@3 dominated by main main::@1 main::@2 main::@3 @begin @13 +main::@4 dominated by main main::@1 main::@2 main::@3 main::@4 @begin @13 +main::@return dominated by main main::@1 main::@2 main::@3 main::@4 @begin main::@return @13 +multiply_results_compare dominated by main main::@1 main::@2 main::@3 main::@4 @begin @13 multiply_results_compare +multiply_results_compare::@1 dominated by main main::@1 main::@2 main::@3 main::@4 @begin @13 multiply_results_compare multiply_results_compare::@1 +multiply_results_compare::@2 dominated by main main::@1 main::@2 main::@3 main::@4 @begin @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +multiply_results_compare::@8 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +multiply_results_compare::@9 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +multiply_results_compare::@4 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@4 +multiply_results_compare::@10 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@10 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@4 +multiply_results_compare::@11 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@10 multiply_results_compare::@11 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@4 +multiply_results_compare::@12 dominated by main main::@1 multiply_results_compare::@12 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@10 multiply_results_compare::@11 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@4 +multiply_results_compare::@return dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@return multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +multiply_results_compare::@3 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@3 +multiply_results_compare::@6 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 @13 multiply_results_compare::@9 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@3 multiply_results_compare::@6 +multiply_results_compare::@7 dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply_results_compare::@8 multiply_results_compare::@7 @13 multiply_results_compare::@9 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@3 multiply_results_compare::@6 +multiply_results_compare::@14 dominated by main main::@1 main::@2 multiply_results_compare::@14 main::@3 main::@4 @begin multiply_results_compare::@8 multiply_results_compare::@7 @13 multiply_results_compare::@9 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 multiply_results_compare::@3 multiply_results_compare::@6 +print_ln dominated by main main::@1 main::@2 main::@3 @begin print_ln @13 +print_ln::@1 dominated by print_ln::@1 main main::@1 main::@2 main::@3 @begin print_ln @13 +print_ln::@return dominated by print_ln::@1 main print_ln::@return main::@1 main::@2 main::@3 @begin print_ln @13 +print_str dominated by main main::@1 main::@2 main::@3 @begin @13 print_str +print_str::@1 dominated by main main::@1 main::@2 main::@3 @begin print_str::@1 @13 print_str +print_str::@return dominated by main main::@1 main::@2 main::@3 @begin print_str::@return print_str::@1 @13 print_str +print_str::@2 dominated by main main::@1 main::@2 main::@3 @begin print_str::@1 print_str::@2 @13 print_str +print_word dominated by main print_word main::@1 main::@2 main::@3 @begin @13 +print_word::@1 dominated by main print_word main::@1 main::@2 main::@3 @begin print_word::@1 @13 +print_word::@return dominated by main print_word main::@1 main::@2 main::@3 @begin print_word::@return print_word::@1 @13 +print_byte dominated by main print_word main::@1 main::@2 main::@3 @begin @13 print_byte +print_byte::@1 dominated by main print_word main::@1 main::@2 main::@3 @begin print_byte::@1 @13 print_byte +print_byte::@return dominated by main print_word main::@1 main::@2 main::@3 @begin print_byte::@return print_byte::@1 @13 print_byte +print_char dominated by main print_word print_char main::@1 main::@2 main::@3 @begin @13 print_byte +print_char::@return dominated by main print_word print_char main::@1 main::@2 main::@3 print_char::@return @begin @13 print_byte +multiply dominated by main main::@1 main::@2 main::@3 main::@4 @begin multiply multiply_results_compare::@8 @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +multiply::@return dominated by main multiply::@return main::@1 main::@2 main::@3 main::@4 @begin multiply multiply_results_compare::@8 @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +slow_multiply dominated by main main::@1 main::@2 main::@3 main::@4 @begin slow_multiply @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +slow_multiply::@2 dominated by main main::@1 main::@2 main::@3 main::@4 @begin slow_multiply::@2 slow_multiply @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +slow_multiply::@1 dominated by main main::@1 main::@2 main::@3 main::@4 @begin slow_multiply::@1 slow_multiply @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 +slow_multiply::@return dominated by main main::@1 main::@2 main::@3 main::@4 @begin slow_multiply::@1 slow_multiply @13 multiply_results_compare::@2 multiply_results_compare multiply_results_compare::@1 slow_multiply::@return +multiply_tables_compare dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare @13 +multiply_tables_compare::@1 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@3 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@3 multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@6 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@6 multiply_tables_compare::@3 multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@7 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@7 multiply_tables_compare::@6 multiply_tables_compare::@3 multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@8 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@7 multiply_tables_compare::@6 multiply_tables_compare::@8 multiply_tables_compare::@3 multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@return dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@return multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@2 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@2 multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@5 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@2 multiply_tables_compare::@5 multiply_tables_compare::@1 multiply_tables_compare @13 +multiply_tables_compare::@10 dominated by main main::@1 main::@2 main::@3 @begin multiply_tables_compare::@2 multiply_tables_compare::@5 multiply_tables_compare::@1 multiply_tables_compare @13 multiply_tables_compare::@10 +init_multiply_asm dominated by main main::@1 main::@2 @begin @13 init_multiply_asm +init_multiply_asm::@return dominated by init_multiply_asm::@return main main::@1 main::@2 @begin @13 init_multiply_asm +init_multiply dominated by main main::@1 @begin @13 init_multiply +init_multiply::@1 dominated by main main::@1 @begin @13 init_multiply::@1 init_multiply +init_multiply::@5 dominated by main main::@1 @begin @13 init_multiply::@1 init_multiply::@5 init_multiply +init_multiply::@2 dominated by main main::@1 @begin @13 init_multiply::@1 init_multiply::@2 init_multiply +init_multiply::@3 dominated by main main::@1 @begin @13 init_multiply::@3 init_multiply::@1 init_multiply::@2 init_multiply +init_multiply::@4 dominated by main main::@1 @begin @13 init_multiply::@3 init_multiply::@4 init_multiply::@1 init_multiply::@2 init_multiply +init_multiply::@8 dominated by main main::@1 @begin @13 init_multiply::@3 init_multiply::@4 init_multiply::@1 init_multiply::@2 init_multiply::@8 init_multiply +init_multiply::@return dominated by main main::@1 @begin @13 init_multiply::@3 init_multiply::@4 init_multiply::@1 init_multiply::@2 init_multiply::@8 init_multiply init_multiply::@return +init_multiply::@12 dominated by main init_multiply::@12 main::@1 @begin @13 init_multiply::@3 init_multiply::@1 init_multiply::@2 init_multiply +print_cls dominated by main @begin @13 print_cls +print_cls::@1 dominated by main @begin @13 print_cls::@1 print_cls +print_cls::@return dominated by main @begin print_cls::@return @13 print_cls::@1 print_cls + +NATURAL LOOPS +Found back edge: Loop head: multiply_results_compare::@2 tails: multiply_results_compare::@3 blocks: null +Found back edge: Loop head: multiply_results_compare::@1 tails: multiply_results_compare::@6 blocks: null +Found back edge: Loop head: print_ln::@1 tails: print_ln::@1 blocks: null +Found back edge: Loop head: print_str::@1 tails: print_str::@2 blocks: null +Found back edge: Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: null +Found back edge: Loop head: multiply_tables_compare::@1 tails: multiply_tables_compare::@2 blocks: null +Found back edge: Loop head: init_multiply::@1 tails: init_multiply::@2 blocks: null +Found back edge: Loop head: init_multiply::@3 tails: init_multiply::@4 blocks: null +Found back edge: Loop head: print_cls::@1 tails: print_cls::@1 blocks: null +Populated: Loop head: multiply_results_compare::@2 tails: multiply_results_compare::@3 blocks: multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 +Populated: Loop head: multiply_results_compare::@1 tails: multiply_results_compare::@6 blocks: multiply_results_compare::@6 multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 multiply_results_compare::@1 +Populated: Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Populated: Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 +Populated: Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 +Populated: Loop head: multiply_tables_compare::@1 tails: multiply_tables_compare::@2 blocks: multiply_tables_compare::@2 multiply_tables_compare::@1 +Populated: Loop head: init_multiply::@1 tails: init_multiply::@2 blocks: init_multiply::@2 init_multiply::@1 init_multiply::@5 +Populated: Loop head: init_multiply::@3 tails: init_multiply::@4 blocks: init_multiply::@4 init_multiply::@12 init_multiply::@3 +Populated: Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 +Loop head: multiply_results_compare::@2 tails: multiply_results_compare::@3 blocks: multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 +Loop head: multiply_results_compare::@1 tails: multiply_results_compare::@6 blocks: multiply_results_compare::@6 multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 multiply_results_compare::@1 +Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 +Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 +Loop head: multiply_tables_compare::@1 tails: multiply_tables_compare::@2 blocks: multiply_tables_compare::@2 multiply_tables_compare::@1 +Loop head: init_multiply::@1 tails: init_multiply::@2 blocks: init_multiply::@2 init_multiply::@1 init_multiply::@5 +Loop head: init_multiply::@3 tails: init_multiply::@4 blocks: init_multiply::@4 init_multiply::@12 init_multiply::@3 +Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 + +NATURAL LOOPS WITH DEPTH +Found 0 loops in scope [] +Found 0 loops in scope [main] +Found 1 loops in scope [print_cls] + Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 +Found 2 loops in scope [init_multiply] + Loop head: init_multiply::@1 tails: init_multiply::@2 blocks: init_multiply::@2 init_multiply::@1 init_multiply::@5 + Loop head: init_multiply::@3 tails: init_multiply::@4 blocks: init_multiply::@4 init_multiply::@12 init_multiply::@3 +Found 0 loops in scope [init_multiply_asm] +Found 1 loops in scope [multiply_tables_compare] + Loop head: multiply_tables_compare::@1 tails: multiply_tables_compare::@2 blocks: multiply_tables_compare::@2 multiply_tables_compare::@1 +Found 2 loops in scope [multiply_results_compare] + Loop head: multiply_results_compare::@2 tails: multiply_results_compare::@3 blocks: multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 + Loop head: multiply_results_compare::@1 tails: multiply_results_compare::@6 blocks: multiply_results_compare::@6 multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 multiply_results_compare::@1 +Found 1 loops in scope [print_str] + Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 +Found 0 loops in scope [print_word] +Found 1 loops in scope [print_ln] + Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Found 1 loops in scope [slow_multiply] + Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 +Found 0 loops in scope [multiply] +Found 0 loops in scope [print_byte] +Found 0 loops in scope [print_char] +Loop head: multiply_results_compare::@2 tails: multiply_results_compare::@3 blocks: multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 depth: 2 +Loop head: multiply_results_compare::@1 tails: multiply_results_compare::@6 blocks: multiply_results_compare::@6 multiply_results_compare::@3 multiply_results_compare::@9 multiply_results_compare::@8 multiply_results_compare::@2 multiply_results_compare::@1 depth: 1 +Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 depth: 1 +Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 depth: 1 +Loop head: slow_multiply::@2 tails: slow_multiply::@2 blocks: slow_multiply::@2 depth: 3 +Loop head: multiply_tables_compare::@1 tails: multiply_tables_compare::@2 blocks: multiply_tables_compare::@2 multiply_tables_compare::@1 depth: 1 +Loop head: init_multiply::@1 tails: init_multiply::@2 blocks: init_multiply::@2 init_multiply::@1 init_multiply::@5 depth: 1 +Loop head: init_multiply::@3 tails: init_multiply::@4 blocks: init_multiply::@4 init_multiply::@12 init_multiply::@3 depth: 1 +Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 depth: 1 + + +VARIABLE REGISTER WEIGHTS +(byte*) BGCOL +(byte[512]) asm_mul_sqr1_hi +(byte[512]) asm_mul_sqr1_lo +(byte[512]) asm_mul_sqr2_hi +(byte[512]) asm_mul_sqr2_lo +(byte*) char_cursor +(byte*) char_cursor#1 11.0 +(byte*~) char_cursor#100 4.0 +(byte*) char_cursor#11 0.823529411764706 +(byte*) char_cursor#2 2.1818181818181817 +(byte*) char_cursor#20 0.3333333333333333 +(byte*) char_cursor#27 40.0 +(byte*) char_cursor#41 4.0 +(byte*) char_cursor#64 2.0 +(byte*) char_cursor#71 10.0 +(byte*~) char_cursor#89 4.0 +(void()) init_multiply() +(byte~) init_multiply::$2 22.0 +(byte~) init_multiply::$5 22.0 +(byte~) init_multiply::$6 22.0 +(byte) init_multiply::c +(byte) init_multiply::c#1 2.357142857142857 +(byte) init_multiply::c#2 22.0 +(byte) init_multiply::dir +(byte) init_multiply::dir#2 4.714285714285714 +(byte) init_multiply::dir#3 7.333333333333333 +(word) init_multiply::sqr +(word) init_multiply::sqr#1 7.333333333333333 +(word) init_multiply::sqr#2 22.0 +(word) init_multiply::sqr#3 9.166666666666666 +(word) init_multiply::sqr#4 6.6000000000000005 +(byte*) init_multiply::sqr1_hi +(byte*) init_multiply::sqr1_hi#1 5.5 +(byte*) init_multiply::sqr1_hi#2 3.0 +(byte*) init_multiply::sqr1_lo +(byte*) init_multiply::sqr1_lo#1 16.5 +(byte*) init_multiply::sqr1_lo#2 2.5384615384615383 +(byte*) init_multiply::sqr2_hi +(byte*) init_multiply::sqr2_hi#1 3.142857142857143 +(byte*) init_multiply::sqr2_hi#2 11.0 +(byte*) init_multiply::sqr2_lo +(byte*) init_multiply::sqr2_lo#1 16.5 +(byte*) init_multiply::sqr2_lo#2 4.125 +(byte) init_multiply::x_2 +(byte) init_multiply::x_2#1 11.0 +(byte) init_multiply::x_2#2 4.888888888888889 +(byte) init_multiply::x_2#3 8.25 +(byte) init_multiply::x_255 +(byte) init_multiply::x_255#1 5.5 +(byte) init_multiply::x_255#2 11.0 +(void()) init_multiply_asm() +(byte*) init_multiply_asm::mem +(byte*) line_cursor +(byte*) line_cursor#1 5.857142857142857 +(byte*) line_cursor#11 24.0 +(byte*) line_cursor#17 0.18181818181818182 +(byte*) line_cursor#19 40.0 +(byte*) line_cursor#22 4.0 +(void()) main() +(byte[512]) mul_sqr1_hi +(byte[512]) mul_sqr1_lo +(byte[512]) mul_sqr2_hi +(byte[512]) mul_sqr2_lo +(word()) multiply((byte) multiply::a , (byte) multiply::b) +(byte) multiply::a +(byte) multiply::a#0 51.5 +(byte) multiply::b +(byte) multiply::b#0 51.5 +(byte*) multiply::memA +(byte*) multiply::memB +(word) multiply::return +(word) multiply::return#0 34.33333333333333 +(word) multiply::return#2 202.0 +(void()) multiply_results_compare() +(byte) multiply_results_compare::a +(byte) multiply_results_compare::a#1 16.5 +(byte) multiply_results_compare::a#5 14.933333333333332 +(byte) multiply_results_compare::b +(byte) multiply_results_compare::b#1 151.5 +(byte) multiply_results_compare::b#2 33.666666666666664 +(word) multiply_results_compare::ma +(word) multiply_results_compare::ma#0 25.5 +(word) multiply_results_compare::ms +(word) multiply_results_compare::ms#0 22.666666666666664 +(void()) multiply_tables_compare() +(byte*) multiply_tables_compare::asm_sqr +(byte*) multiply_tables_compare::asm_sqr#1 7.333333333333333 +(byte*) multiply_tables_compare::asm_sqr#2 8.75 +(byte*) multiply_tables_compare::kc_sqr +(byte*) multiply_tables_compare::kc_sqr#1 16.5 +(byte*) multiply_tables_compare::kc_sqr#2 3.8888888888888893 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 4.0 +(byte~) print_byte::$2 4.0 +(byte) print_byte::b +(byte) print_byte::b#0 4.0 +(byte) print_byte::b#1 4.0 +(byte) print_byte::b#2 2.0 +(byte[]) print_byte::hextab +(void()) print_char((byte) print_char::ch) +(byte) print_char::ch +(byte) print_char::ch#0 4.0 +(byte) print_char::ch#1 4.0 +(byte) print_char::ch#2 6.0 +(void()) print_cls() +(byte*) print_cls::sc +(byte*) print_cls::sc#1 16.5 +(byte*) print_cls::sc#2 16.5 +(void()) print_ln() +(void()) print_str((byte*) print_str::str) +(byte*) print_str::str +(byte*) print_str::str#0 22.0 +(byte*) print_str::str#7 11.5 +(byte*) print_str::str#9 2.0 +(void()) print_word((word) print_word::w) +(word) print_word::w +(word) print_word::w#0 4.0 +(word) print_word::w#1 4.0 +(word) print_word::w#2 4.0 +(word) print_word::w#3 4.0 +(word) print_word::w#4 3.9999999999999996 +(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) +(byte) slow_multiply::a +(byte) slow_multiply::a#0 157.71428571428572 +(byte) slow_multiply::b +(byte) slow_multiply::b#0 183.66666666666669 +(byte) slow_multiply::i +(byte) slow_multiply::i#1 1501.5 +(byte) slow_multiply::i#2 1001.0 +(word) slow_multiply::m +(word) slow_multiply::m#1 1001.0 +(word) slow_multiply::m#3 2002.0 +(word) slow_multiply::return +(word) slow_multiply::return#0 367.33333333333337 +(word) slow_multiply::return#2 202.0 + +Initial phi equivalence classes +[ multiply_results_compare::a#5 multiply_results_compare::a#1 ] +[ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +[ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] +[ print_str::str#7 print_str::str#9 print_str::str#0 ] +[ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] +[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +[ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] +[ slow_multiply::i#2 slow_multiply::i#1 ] +[ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] +[ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] +[ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ] +[ init_multiply::c#2 init_multiply::c#1 ] +[ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] +[ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] +[ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] +[ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] +[ init_multiply::x_255#2 init_multiply::x_255#1 ] +[ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] +[ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] +[ init_multiply::dir#2 init_multiply::dir#3 ] +[ print_cls::sc#2 print_cls::sc#1 ] +Added variable slow_multiply::a#0 to zero page equivalence class [ slow_multiply::a#0 ] +Added variable slow_multiply::b#0 to zero page equivalence class [ slow_multiply::b#0 ] +Added variable slow_multiply::return#2 to zero page equivalence class [ slow_multiply::return#2 ] +Added variable multiply_results_compare::ms#0 to zero page equivalence class [ multiply_results_compare::ms#0 ] +Added variable multiply::a#0 to zero page equivalence class [ multiply::a#0 ] +Added variable multiply::b#0 to zero page equivalence class [ multiply::b#0 ] +Added variable multiply::return#2 to zero page equivalence class [ multiply::return#2 ] +Added variable multiply_results_compare::ma#0 to zero page equivalence class [ multiply_results_compare::ma#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 ] +Added variable multiply::return#0 to zero page equivalence class [ multiply::return#0 ] +Added variable init_multiply::$2 to zero page equivalence class [ init_multiply::$2 ] +Added variable init_multiply::$5 to zero page equivalence class [ init_multiply::$5 ] +Added variable init_multiply::$6 to zero page equivalence class [ init_multiply::$6 ] +Complete equivalence classes +[ multiply_results_compare::a#5 multiply_results_compare::a#1 ] +[ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +[ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] +[ print_str::str#7 print_str::str#9 print_str::str#0 ] +[ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] +[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +[ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] +[ slow_multiply::i#2 slow_multiply::i#1 ] +[ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] +[ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] +[ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ] +[ init_multiply::c#2 init_multiply::c#1 ] +[ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] +[ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] +[ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] +[ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] +[ init_multiply::x_255#2 init_multiply::x_255#1 ] +[ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] +[ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] +[ init_multiply::dir#2 init_multiply::dir#3 ] +[ print_cls::sc#2 print_cls::sc#1 ] +[ slow_multiply::a#0 ] +[ slow_multiply::b#0 ] +[ slow_multiply::return#2 ] +[ multiply_results_compare::ms#0 ] +[ multiply::a#0 ] +[ multiply::b#0 ] +[ multiply::return#2 ] +[ multiply_results_compare::ma#0 ] +[ print_byte::$0 ] +[ print_byte::$2 ] +[ multiply::return#0 ] +[ init_multiply::$2 ] +[ init_multiply::$5 ] +[ init_multiply::$6 ] +Allocated zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] +Allocated zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +Allocated zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] +Allocated zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] +Allocated zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] +Allocated zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Allocated zp ZP_BYTE:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Allocated zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] +Allocated zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] +Allocated zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] +Allocated zp ZP_WORD:17 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] +Allocated zp ZP_WORD:19 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ] +Allocated zp ZP_BYTE:21 [ init_multiply::c#2 init_multiply::c#1 ] +Allocated zp ZP_WORD:22 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] +Allocated zp ZP_WORD:24 [ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] +Allocated zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] +Allocated zp ZP_WORD:27 [ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] +Allocated zp ZP_BYTE:29 [ init_multiply::x_255#2 init_multiply::x_255#1 ] +Allocated zp ZP_WORD:30 [ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] +Allocated zp ZP_WORD:32 [ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] +Allocated zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] +Allocated zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] +Allocated zp ZP_BYTE:37 [ slow_multiply::a#0 ] +Allocated zp ZP_BYTE:38 [ slow_multiply::b#0 ] +Allocated zp ZP_WORD:39 [ slow_multiply::return#2 ] +Allocated zp ZP_WORD:41 [ multiply_results_compare::ms#0 ] +Allocated zp ZP_BYTE:43 [ multiply::a#0 ] +Allocated zp ZP_BYTE:44 [ multiply::b#0 ] +Allocated zp ZP_WORD:45 [ multiply::return#2 ] +Allocated zp ZP_WORD:47 [ multiply_results_compare::ma#0 ] +Allocated zp ZP_BYTE:49 [ print_byte::$0 ] +Allocated zp ZP_BYTE:50 [ print_byte::$2 ] +Allocated zp ZP_WORD:51 [ multiply::return#0 ] +Allocated zp ZP_BYTE:53 [ init_multiply::$2 ] +Allocated zp ZP_BYTE:54 [ init_multiply::$5 ] +Allocated zp ZP_BYTE:55 [ init_multiply::$6 ] + +INITIAL ASM +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .const BGCOL = $d021 + .label char_cursor = $c + .label line_cursor = 4 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @13 [phi:@begin->@13] +b13_from_bbegin: + jmp b13 +//SEG4 @13 +b13: +//SEG5 [2] call main param-assignment [ ] ( ) + jsr main +//SEG6 [3] phi from @13 to @end [phi:@13->@end] +bend_from_b13: + jmp bend +//SEG7 @end +bend: +//SEG8 main +main: { + //SEG9 [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #5 + sta BGCOL + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [146] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + //SEG13 main::@1 + b1: + //SEG14 [7] call init_multiply param-assignment [ ] ( main:2 [ ] ) + //SEG15 [117] phi from main::@1 to init_multiply [phi:main::@1->init_multiply] + init_multiply_from_b1: + jsr init_multiply + //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + //SEG17 main::@2 + b2: + //SEG18 [9] call init_multiply_asm param-assignment [ ] ( main:2 [ ] ) + jsr init_multiply_asm + //SEG19 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + jmp b3 + //SEG20 main::@3 + b3: + //SEG21 [11] call multiply_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) + //SEG22 [90] phi from main::@3 to multiply_tables_compare [phi:main::@3->multiply_tables_compare] + multiply_tables_compare_from_b3: + jsr multiply_tables_compare + //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + jmp b4 + //SEG24 main::@4 + b4: + //SEG25 [13] call multiply_results_compare param-assignment [ ] ( main:2 [ ] ) + //SEG26 [15] phi from main::@4 to multiply_results_compare [phi:main::@4->multiply_results_compare] + multiply_results_compare_from_b4: + jsr multiply_results_compare + jmp breturn + //SEG27 main::@return + breturn: + //SEG28 [14] return [ ] ( main:2 [ ] ) + rts +} +//SEG29 multiply_results_compare +multiply_results_compare: { + .label ms = $29 + .label ma = $2f + .label b = 3 + .label a = 2 + //SEG30 [16] phi from multiply_results_compare to multiply_results_compare::@1 [phi:multiply_results_compare->multiply_results_compare::@1] + b1_from_multiply_results_compare: + //SEG31 [16] phi (byte) multiply_results_compare::a#5 = (byte/signed byte/word/signed word) 0 [phi:multiply_results_compare->multiply_results_compare::@1#0] -- vbuz1=vbuc1 + lda #0 + sta a + jmp b1 + //SEG32 [16] phi from multiply_results_compare::@6 to multiply_results_compare::@1 [phi:multiply_results_compare::@6->multiply_results_compare::@1] + b1_from_b6: + //SEG33 [16] phi (byte) multiply_results_compare::a#5 = (byte) multiply_results_compare::a#1 [phi:multiply_results_compare::@6->multiply_results_compare::@1#0] -- register_copy + jmp b1 + //SEG34 multiply_results_compare::@1 + b1: + //SEG35 [17] phi from multiply_results_compare::@1 to multiply_results_compare::@2 [phi:multiply_results_compare::@1->multiply_results_compare::@2] + b2_from_b1: + //SEG36 [17] phi (byte) multiply_results_compare::b#2 = (byte/signed byte/word/signed word) 0 [phi:multiply_results_compare::@1->multiply_results_compare::@2#0] -- vbuz1=vbuc1 + lda #0 + sta b + jmp b2 + //SEG37 [17] phi from multiply_results_compare::@3 to multiply_results_compare::@2 [phi:multiply_results_compare::@3->multiply_results_compare::@2] + b2_from_b3: + //SEG38 [17] phi (byte) multiply_results_compare::b#2 = (byte) multiply_results_compare::b#1 [phi:multiply_results_compare::@3->multiply_results_compare::@2#0] -- register_copy + jmp b2 + //SEG39 multiply_results_compare::@2 + b2: + //SEG40 [18] (byte) slow_multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 + lda a + sta slow_multiply.a + //SEG41 [19] (byte) slow_multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 + lda b + sta slow_multiply.b + //SEG42 [20] call slow_multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) + jsr slow_multiply + //SEG43 [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda slow_multiply.return + sta slow_multiply.return_2 + lda slow_multiply.return+1 + sta slow_multiply.return_2+1 + jmp b8 + //SEG44 multiply_results_compare::@8 + b8: + //SEG45 [22] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda slow_multiply.return_2 + sta ms + lda slow_multiply.return_2+1 + sta ms+1 + //SEG46 [23] (byte) multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 + lda a + sta multiply.a + //SEG47 [24] (byte) multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuz1=vbuz2 + lda b + sta multiply.b + //SEG48 [25] call multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ) + jsr multiply + //SEG49 [26] (word) multiply::return#2 ← (word) multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda multiply.return + sta multiply.return_2 + lda multiply.return+1 + sta multiply.return_2+1 + jmp b9 + //SEG50 multiply_results_compare::@9 + b9: + //SEG51 [27] (word) multiply_results_compare::ma#0 ← (word) multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda multiply.return_2 + sta ma + lda multiply.return_2+1 + sta ma+1 + //SEG52 [28] if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp ma + bne !+ + lda ms+1 + cmp ma+1 + beq b3 + !: + jmp b4 + //SEG53 multiply_results_compare::@4 + b4: + //SEG54 [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + //SEG55 [30] call print_str param-assignment [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + //SEG56 [53] phi from multiply_results_compare::@4 to print_str [phi:multiply_results_compare::@4->print_str] + print_str_from_b4: + //SEG57 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:multiply_results_compare::@4->print_str#0] -- register_copy + //SEG58 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str [phi:multiply_results_compare::@4->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b10 + //SEG59 multiply_results_compare::@10 + b10: + //SEG60 [31] (word) print_word::w#2 ← (word) multiply_results_compare::ms#0 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 + lda ms + sta print_word.w + lda ms+1 + sta print_word.w+1 + //SEG61 [32] call print_word param-assignment [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) + //SEG62 [60] phi from multiply_results_compare::@10 to print_word [phi:multiply_results_compare::@10->print_word] + print_word_from_b10: + //SEG63 [60] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:multiply_results_compare::@10->print_word#0] -- register_copy + jsr print_word + //SEG64 [33] phi from multiply_results_compare::@10 to multiply_results_compare::@11 [phi:multiply_results_compare::@10->multiply_results_compare::@11] + b11_from_b10: + jmp b11 + //SEG65 multiply_results_compare::@11 + b11: + //SEG66 [34] call print_str param-assignment [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + //SEG67 [53] phi from multiply_results_compare::@11 to print_str [phi:multiply_results_compare::@11->print_str] + print_str_from_b11: + //SEG68 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:multiply_results_compare::@11->print_str#0] -- register_copy + //SEG69 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str1 [phi:multiply_results_compare::@11->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b12 + //SEG70 multiply_results_compare::@12 + b12: + //SEG71 [35] (word) print_word::w#3 ← (word) multiply_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 + lda ma + sta print_word.w + lda ma+1 + sta print_word.w+1 + //SEG72 [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) + //SEG73 [60] phi from multiply_results_compare::@12 to print_word [phi:multiply_results_compare::@12->print_word] + print_word_from_b12: + //SEG74 [60] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:multiply_results_compare::@12->print_word#0] -- register_copy + jsr print_word + //SEG75 [37] phi from multiply_results_compare::@12 multiply_results_compare::@14 to multiply_results_compare::@return [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return] + breturn_from_b12: + breturn_from_b14: + //SEG76 [37] phi (byte*) line_cursor#19 = (byte*) line_cursor#17 [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return#0] -- register_copy + //SEG77 [37] phi (byte*) char_cursor#27 = (byte*) char_cursor#11 [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return#1] -- register_copy + jmp breturn + //SEG78 multiply_results_compare::@return + breturn: + //SEG79 [38] return [ ] ( main:2::multiply_results_compare:13 [ ] ) + rts + //SEG80 multiply_results_compare::@3 + b3: + //SEG81 [39] (byte) multiply_results_compare::b#1 ← ++ (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 + inc b + //SEG82 [40] if((byte) multiply_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 + lda b + bne b2_from_b3 + jmp b6 + //SEG83 multiply_results_compare::@6 + b6: + //SEG84 [41] (byte) multiply_results_compare::a#1 ← ++ (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 + inc a + //SEG85 [42] if((byte) multiply_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@1 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 + lda a + bne b1_from_b6 + //SEG86 [43] phi from multiply_results_compare::@6 to multiply_results_compare::@7 [phi:multiply_results_compare::@6->multiply_results_compare::@7] + b7_from_b6: + jmp b7 + //SEG87 multiply_results_compare::@7 + b7: + //SEG88 [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) + //SEG89 [53] phi from multiply_results_compare::@7 to print_str [phi:multiply_results_compare::@7->print_str] + print_str_from_b7: + //SEG90 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:multiply_results_compare::@7->print_str#0] -- register_copy + //SEG91 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str2 [phi:multiply_results_compare::@7->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + //SEG92 [45] phi from multiply_results_compare::@7 to multiply_results_compare::@14 [phi:multiply_results_compare::@7->multiply_results_compare::@14] + b14_from_b7: + jmp b14 + //SEG93 multiply_results_compare::@14 + b14: + //SEG94 [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_results_compare:13 [ line_cursor#1 ] ) + //SEG95 [48] phi from multiply_results_compare::@14 to print_ln [phi:multiply_results_compare::@14->print_ln] + print_ln_from_b14: + //SEG96 [48] phi (byte*) line_cursor#22 = (byte*) line_cursor#17 [phi:multiply_results_compare::@14->print_ln#0] -- register_copy + jsr print_ln + //SEG97 [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::multiply_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + jmp breturn_from_b14 + str: .text "multiply mismatch slow:@" + str1: .text " / fast asm:" + str2: .text "multiply results match!@" +} +//SEG98 print_ln +print_ln: { + //SEG99 [49] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG100 [49] phi (byte*) line_cursor#11 = (byte*) line_cursor#22 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG101 print_ln::@1 + b1: + //SEG102 [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG103 [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1_from_b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG104 print_ln::@return + breturn: + //SEG105 [52] return [ line_cursor#1 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) + rts +} +//SEG106 print_str +print_str: { + .label str = 6 + //SEG107 [54] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + //SEG108 [54] phi (byte*) char_cursor#2 = (byte*) char_cursor#71 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG109 [54] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + //SEG110 print_str::@1 + b1: + //SEG111 [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG112 print_str::@return + breturn: + //SEG113 [56] return [ char_cursor#2 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 ] ) + rts + //SEG114 print_str::@2 + b2: + //SEG115 [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (char_cursor),y + //SEG116 [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG117 [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} +//SEG118 print_word +print_word: { + .label w = 8 + //SEG119 [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) -- vbuz1=_hi_vwuz2 + lda w+1 + sta print_byte.b + //SEG120 [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) + //SEG121 [66] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + //SEG122 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#2 [phi:print_word->print_byte#0] -- register_copy + //SEG123 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + //SEG124 print_word::@1 + b1: + //SEG125 [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) -- vbuz1=_lo_vwuz2 + lda w + sta print_byte.b + //SEG126 [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + //SEG127 [66] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + //SEG128 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#11 [phi:print_word::@1->print_byte#0] -- register_copy + //SEG129 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + //SEG130 print_word::@return + breturn: + //SEG131 [65] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + rts +} +//SEG132 print_byte +print_byte: { + .label _0 = $31 + .label _2 = $32 + .label b = $a + //SEG133 [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) -- vbuz1=vbuz2_ror_4 + lda b + lsr + lsr + lsr + lsr + sta _0 + //SEG134 [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldx _0 + lda hextab,x + sta print_char.ch + //SEG135 [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) + //SEG136 [74] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG137 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#64 [phi:print_byte->print_char#0] -- register_copy + //SEG138 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG139 print_byte::@1 + b1: + //SEG140 [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda b + and #$f + sta _2 + //SEG141 [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldx _2 + lda hextab,x + sta print_char.ch + //SEG142 [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + //SEG143 [74] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG144 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#11 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG145 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG146 print_byte::@return + breturn: + //SEG147 [73] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + rts + hextab: .byte '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' +} +//SEG148 print_char +print_char: { + .label ch = $b + //SEG149 [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) -- _deref_pbuz1=vbuz2 + ldy #0 + lda ch + sta (char_cursor),y + //SEG150 [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + jmp breturn + //SEG151 print_char::@return + breturn: + //SEG152 [77] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) + rts +} +//SEG153 multiply +multiply: { + .const memA = $fe + .const memB = $ff + .label return = $33 + .label a = $2b + .label b = $2c + .label return_2 = $2d + //SEG154 [78] *((const byte*) multiply::memA#0) ← (byte) multiply::a#0 [ multiply::b#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::b#0 ] ) -- _deref_pbuc1=vbuz1 + lda a + sta memA + //SEG155 [79] *((const byte*) multiply::memB#0) ← (byte) multiply::b#0 [ ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuz1 + lda b + sta memB + //SEG156 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + lda memA + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + ldx memB + sec + sm1: + lda mul_sqr1_lo,x + sm2: + sbc mul_sqr2_lo,x + sta memA + sm3: + lda mul_sqr1_hi,x + sm4: + sbc mul_sqr2_hi,x + sta memB + //SEG157 [81] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + lda memA + sta return + lda memB + sta return+1 + jmp breturn + //SEG158 multiply::@return + breturn: + //SEG159 [82] return [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) + rts +} +//SEG160 slow_multiply +slow_multiply: { + .label return = $f + .label m = $f + .label i = $e + .label a = $25 + .label b = $26 + .label return_2 = $27 + //SEG161 [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) -- vbuz1_le_0_then_la1 + lda a + cmp #0 + beq b1_from_slow_multiply + //SEG162 [84] phi from slow_multiply to slow_multiply::@2 [phi:slow_multiply->slow_multiply::@2] + b2_from_slow_multiply: + //SEG163 [84] phi (byte) slow_multiply::i#2 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#0] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG164 [84] phi (word) slow_multiply::m#3 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#1] -- vwuz1=vbuc1 + lda #0 + sta m + lda #0 + sta m+1 + jmp b2 + //SEG165 [84] phi from slow_multiply::@2 to slow_multiply::@2 [phi:slow_multiply::@2->slow_multiply::@2] + b2_from_b2: + //SEG166 [84] phi (byte) slow_multiply::i#2 = (byte) slow_multiply::i#1 [phi:slow_multiply::@2->slow_multiply::@2#0] -- register_copy + //SEG167 [84] phi (word) slow_multiply::m#3 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@2#1] -- register_copy + jmp b2 + //SEG168 slow_multiply::@2 + b2: + //SEG169 [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda b + clc + adc m + sta m + bcc !+ + inc m+1 + !: + //SEG170 [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG171 [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuz1_neq_vbuz2_then_la1 + lda i + cmp a + bne b2_from_b2 + //SEG172 [88] phi from slow_multiply::@2 to slow_multiply::@1 [phi:slow_multiply::@2->slow_multiply::@1] + b1_from_b2: + //SEG173 [88] phi (word) slow_multiply::return#0 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@1#0] -- register_copy + jmp b1 + //SEG174 [88] phi from slow_multiply to slow_multiply::@1 [phi:slow_multiply->slow_multiply::@1] + b1_from_slow_multiply: + //SEG175 [88] phi (word) slow_multiply::return#0 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@1#0] -- vwuz1=vbuc1 + lda #0 + sta return + lda #0 + sta return+1 + jmp b1 + //SEG176 slow_multiply::@1 + b1: + jmp breturn + //SEG177 slow_multiply::@return + breturn: + //SEG178 [89] return [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) + rts +} +//SEG179 multiply_tables_compare +multiply_tables_compare: { + .label asm_sqr = $13 + .label kc_sqr = $11 + //SEG180 [91] phi from multiply_tables_compare to multiply_tables_compare::@1 [phi:multiply_tables_compare->multiply_tables_compare::@1] + b1_from_multiply_tables_compare: + //SEG181 [91] phi (byte*) multiply_tables_compare::asm_sqr#2 = (const byte[512]) asm_mul_sqr1_lo#0 [phi:multiply_tables_compare->multiply_tables_compare::@1#0] -- pbuz1=pbuc1 + lda #asm_mul_sqr1_lo + sta asm_sqr+1 + //SEG182 [91] phi (byte*) multiply_tables_compare::kc_sqr#2 = (const byte[512]) mul_sqr1_lo#0 [phi:multiply_tables_compare->multiply_tables_compare::@1#1] -- pbuz1=pbuc1 + lda #mul_sqr1_lo + sta kc_sqr+1 + jmp b1 + //SEG183 [91] phi from multiply_tables_compare::@2 to multiply_tables_compare::@1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1] + b1_from_b2: + //SEG184 [91] phi (byte*) multiply_tables_compare::asm_sqr#2 = (byte*) multiply_tables_compare::asm_sqr#1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1#0] -- register_copy + //SEG185 [91] phi (byte*) multiply_tables_compare::kc_sqr#2 = (byte*) multiply_tables_compare::kc_sqr#1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1#1] -- register_copy + jmp b1 + //SEG186 multiply_tables_compare::@1 + b1: + //SEG187 [92] if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + ldy #0 + lda (kc_sqr),y + ldy #0 + cmp (asm_sqr),y + beq b2 + jmp b3 + //SEG188 multiply_tables_compare::@3 + b3: + //SEG189 [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + //SEG190 [94] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + //SEG191 [53] phi from multiply_tables_compare::@3 to print_str [phi:multiply_tables_compare::@3->print_str] + print_str_from_b3: + //SEG192 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@3->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG193 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str [phi:multiply_tables_compare::@3->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b6 + //SEG194 multiply_tables_compare::@6 + b6: + //SEG195 [95] (word) print_word::w#0 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ) -- vwuz1=_word_pbuz2 + lda asm_sqr + sta print_word.w + lda asm_sqr+1 + sta print_word.w+1 + //SEG196 [96] call print_word param-assignment [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ) + //SEG197 [60] phi from multiply_tables_compare::@6 to print_word [phi:multiply_tables_compare::@6->print_word] + print_word_from_b6: + //SEG198 [60] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:multiply_tables_compare::@6->print_word#0] -- register_copy + jsr print_word + //SEG199 [97] phi from multiply_tables_compare::@6 to multiply_tables_compare::@7 [phi:multiply_tables_compare::@6->multiply_tables_compare::@7] + b7_from_b6: + jmp b7 + //SEG200 multiply_tables_compare::@7 + b7: + //SEG201 [98] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ) + //SEG202 [53] phi from multiply_tables_compare::@7 to print_str [phi:multiply_tables_compare::@7->print_str] + print_str_from_b7: + //SEG203 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:multiply_tables_compare::@7->print_str#0] -- register_copy + //SEG204 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str1 [phi:multiply_tables_compare::@7->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b8 + //SEG205 multiply_tables_compare::@8 + b8: + //SEG206 [99] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) -- vwuz1=_word_pbuz2 + lda kc_sqr + sta print_word.w + lda kc_sqr+1 + sta print_word.w+1 + //SEG207 [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 ] ) + //SEG208 [60] phi from multiply_tables_compare::@8 to print_word [phi:multiply_tables_compare::@8->print_word] + print_word_from_b8: + //SEG209 [60] phi (word) print_word::w#4 = (word) print_word::w#1 [phi:multiply_tables_compare::@8->print_word#0] -- register_copy + jsr print_word + //SEG210 [101] phi from multiply_tables_compare::@8 to multiply_tables_compare::@return [phi:multiply_tables_compare::@8->multiply_tables_compare::@return] + breturn_from_b8: + //SEG211 [101] phi (byte*) line_cursor#17 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@8->multiply_tables_compare::@return#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG212 [101] phi (byte*) char_cursor#20 = (byte*) char_cursor#11 [phi:multiply_tables_compare::@8->multiply_tables_compare::@return#1] -- register_copy + jmp breturn + //SEG213 multiply_tables_compare::@return + breturn: + //SEG214 [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + rts + //SEG215 multiply_tables_compare::@2 + b2: + //SEG216 [103] (byte*) multiply_tables_compare::asm_sqr#1 ← ++ (byte*) multiply_tables_compare::asm_sqr#2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 + inc asm_sqr + bne !+ + inc asm_sqr+1 + !: + //SEG217 [104] (byte*) multiply_tables_compare::kc_sqr#1 ← ++ (byte*) multiply_tables_compare::kc_sqr#2 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 + inc kc_sqr + bne !+ + inc kc_sqr+1 + !: + //SEG218 [105] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1_lt_pbuc1_then_la1 + lda kc_sqr+1 + cmp #>mul_sqr1_lo+$200*4 + bcc b1_from_b2 + bne !+ + lda kc_sqr + cmp #multiply_tables_compare::@5] + b5_from_b2: + jmp b5 + //SEG220 multiply_tables_compare::@5 + b5: + //SEG221 [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 ] ) + //SEG222 [53] phi from multiply_tables_compare::@5 to print_str [phi:multiply_tables_compare::@5->print_str] + print_str_from_b5: + //SEG223 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@5->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG224 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str2 [phi:multiply_tables_compare::@5->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + //SEG225 [108] phi from multiply_tables_compare::@5 to multiply_tables_compare::@10 [phi:multiply_tables_compare::@5->multiply_tables_compare::@10] + b10_from_b5: + jmp b10 + //SEG226 multiply_tables_compare::@10 + b10: + //SEG227 [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 ] ) + //SEG228 [48] phi from multiply_tables_compare::@10 to print_ln [phi:multiply_tables_compare::@10->print_ln] + print_ln_from_b10: + //SEG229 [48] phi (byte*) line_cursor#22 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@10->print_ln#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + jsr print_ln + //SEG230 [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG231 [101] phi from multiply_tables_compare::@10 to multiply_tables_compare::@return [phi:multiply_tables_compare::@10->multiply_tables_compare::@return] + breturn_from_b10: + //SEG232 [101] phi (byte*) line_cursor#17 = (byte*) line_cursor#1 [phi:multiply_tables_compare::@10->multiply_tables_compare::@return#0] -- register_copy + //SEG233 [101] phi (byte*) char_cursor#20 = (byte*~) char_cursor#100 [phi:multiply_tables_compare::@10->multiply_tables_compare::@return#1] -- register_copy + jmp breturn + str: .text "multiply table mismatch at @" + str1: .text " / @" + str2: .text "multiply tables match!@" +} +//SEG234 init_multiply_asm +init_multiply_asm: { + .const mem = $ff + //SEG235 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + ldx #0 + txa + .byte $c9 + lb1: + tya + adc #0 + ml1: + sta asm_mul_sqr1_hi,x + tay + cmp #$40 + txa + ror + ml9: + adc #0 + sta ml9+1 + inx + ml0: + sta asm_mul_sqr1_lo,x + bne lb1 + inc ml0+2 + inc ml1+2 + clc + iny + bne lb1 + ldx #0 + ldy #$ff + !: + lda asm_mul_sqr1_hi+1,x + sta asm_mul_sqr2_hi+$100,x + lda asm_mul_sqr1_hi,x + sta asm_mul_sqr2_hi,y + lda asm_mul_sqr1_lo+1,x + sta asm_mul_sqr2_lo+$100,x + lda asm_mul_sqr1_lo,x + sta asm_mul_sqr2_lo,y + dey + inx + bne !- + //SEG236 [112] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr1_lo + sta mem + //SEG237 [113] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr1_hi + sta mem + //SEG238 [114] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr2_lo + sta mem + //SEG239 [115] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr2_hi + sta mem + jmp breturn + //SEG240 init_multiply_asm::@return + breturn: + //SEG241 [116] return [ ] ( main:2::init_multiply_asm:9 [ ] ) + rts +} +//SEG242 init_multiply +init_multiply: { + .label _2 = $35 + .label _5 = $36 + .label _6 = $37 + .label c = $15 + .label sqr1_hi = $18 + .label sqr = $1b + .label sqr1_lo = $16 + .label x_2 = $1a + .label sqr2_hi = $20 + .label x_255 = $1d + .label sqr2_lo = $1e + .label dir = $22 + //SEG243 [118] phi from init_multiply to init_multiply::@1 [phi:init_multiply->init_multiply::@1] + b1_from_init_multiply: + //SEG244 [118] phi (byte) init_multiply::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#0] -- vbuz1=vbuc1 + lda #0 + sta x_2 + //SEG245 [118] phi (byte*) init_multiply::sqr1_hi#2 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_multiply->init_multiply::@1#1] -- pbuz1=pbuc1 + lda #mul_sqr1_hi+1 + sta sqr1_hi+1 + //SEG246 [118] phi (byte*) init_multiply::sqr1_lo#2 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_multiply->init_multiply::@1#2] -- pbuz1=pbuc1 + lda #mul_sqr1_lo+1 + sta sqr1_lo+1 + //SEG247 [118] phi (word) init_multiply::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#3] -- vwuz1=vbuc1 + lda #0 + sta sqr + lda #0 + sta sqr+1 + //SEG248 [118] phi (byte) init_multiply::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#4] -- vbuz1=vbuc1 + lda #0 + sta c + jmp b1 + //SEG249 [118] phi from init_multiply::@2 to init_multiply::@1 [phi:init_multiply::@2->init_multiply::@1] + b1_from_b2: + //SEG250 [118] phi (byte) init_multiply::x_2#3 = (byte) init_multiply::x_2#2 [phi:init_multiply::@2->init_multiply::@1#0] -- register_copy + //SEG251 [118] phi (byte*) init_multiply::sqr1_hi#2 = (byte*) init_multiply::sqr1_hi#1 [phi:init_multiply::@2->init_multiply::@1#1] -- register_copy + //SEG252 [118] phi (byte*) init_multiply::sqr1_lo#2 = (byte*) init_multiply::sqr1_lo#1 [phi:init_multiply::@2->init_multiply::@1#2] -- register_copy + //SEG253 [118] phi (word) init_multiply::sqr#4 = (word) init_multiply::sqr#1 [phi:init_multiply::@2->init_multiply::@1#3] -- register_copy + //SEG254 [118] phi (byte) init_multiply::c#2 = (byte) init_multiply::c#1 [phi:init_multiply::@2->init_multiply::@1#4] -- register_copy + jmp b1 + //SEG255 init_multiply::@1 + b1: + //SEG256 [119] (byte) init_multiply::c#1 ← ++ (byte) init_multiply::c#2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) -- vbuz1=_inc_vbuz1 + inc c + //SEG257 [120] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda c + and #1 + sta _2 + //SEG258 [121] if((byte~) init_multiply::$2!=(byte/signed byte/word/signed word) 0) goto init_multiply::@2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) -- vbuz1_neq_0_then_la1 + lda _2 + bne b2_from_b1 + jmp b5 + //SEG259 init_multiply::@5 + b5: + //SEG260 [122] (byte) init_multiply::x_2#1 ← ++ (byte) init_multiply::x_2#3 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ) -- vbuz1=_inc_vbuz1 + inc x_2 + //SEG261 [123] (word) init_multiply::sqr#2 ← ++ (word) init_multiply::sqr#4 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ) -- vwuz1=_inc_vwuz1 + inc sqr + bne !+ + inc sqr+1 + !: + //SEG262 [124] phi from init_multiply::@1 init_multiply::@5 to init_multiply::@2 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2] + b2_from_b1: + b2_from_b5: + //SEG263 [124] phi (byte) init_multiply::x_2#2 = (byte) init_multiply::x_2#3 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2#0] -- register_copy + //SEG264 [124] phi (word) init_multiply::sqr#3 = (word) init_multiply::sqr#4 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2#1] -- register_copy + jmp b2 + //SEG265 init_multiply::@2 + b2: + //SEG266 [125] (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ) -- vbuz1=_lo_vwuz2 + lda sqr + sta _5 + //SEG267 [126] *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- _deref_pbuz1=vbuz2 + ldy #0 + lda _5 + sta (sqr1_lo),y + //SEG268 [127] (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ) -- vbuz1=_hi_vwuz2 + lda sqr+1 + sta _6 + //SEG269 [128] *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- _deref_pbuz1=vbuz2 + ldy #0 + lda _6 + sta (sqr1_hi),y + //SEG270 [129] (byte*) init_multiply::sqr1_hi#1 ← ++ (byte*) init_multiply::sqr1_hi#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + inc sqr1_hi + bne !+ + inc sqr1_hi+1 + !: + //SEG271 [130] (word) init_multiply::sqr#1 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda x_2 + clc + adc sqr + sta sqr + bcc !+ + inc sqr+1 + !: + //SEG272 [131] (byte*) init_multiply::sqr1_lo#1 ← ++ (byte*) init_multiply::sqr1_lo#2 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- pbuz1=_inc_pbuz1 + inc sqr1_lo + bne !+ + inc sqr1_lo+1 + !: + //SEG273 [132] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_multiply::@1 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- pbuz1_neq_pbuc1_then_la1 + lda sqr1_lo+1 + cmp #>mul_sqr1_lo+$200 + bne b1_from_b2 + lda sqr1_lo + cmp #init_multiply::@3] + b3_from_b2: + //SEG275 [133] phi (byte) init_multiply::dir#2 = (byte/word/signed word) 255 [phi:init_multiply::@2->init_multiply::@3#0] -- vbuz1=vbuc1 + lda #$ff + sta dir + //SEG276 [133] phi (byte*) init_multiply::sqr2_hi#2 = (const byte[512]) mul_sqr2_hi#0 [phi:init_multiply::@2->init_multiply::@3#1] -- pbuz1=pbuc1 + lda #mul_sqr2_hi + sta sqr2_hi+1 + //SEG277 [133] phi (byte*) init_multiply::sqr2_lo#2 = (const byte[512]) mul_sqr2_lo#0 [phi:init_multiply::@2->init_multiply::@3#2] -- pbuz1=pbuc1 + lda #mul_sqr2_lo + sta sqr2_lo+1 + //SEG278 [133] phi (byte) init_multiply::x_255#2 = ((byte))-(byte/signed byte/word/signed word) 1 [phi:init_multiply::@2->init_multiply::@3#3] -- vbuz1=vbuc1 + lda #-1 + sta x_255 + jmp b3 + //SEG279 [133] phi from init_multiply::@4 to init_multiply::@3 [phi:init_multiply::@4->init_multiply::@3] + b3_from_b4: + //SEG280 [133] phi (byte) init_multiply::dir#2 = (byte) init_multiply::dir#3 [phi:init_multiply::@4->init_multiply::@3#0] -- register_copy + //SEG281 [133] phi (byte*) init_multiply::sqr2_hi#2 = (byte*) init_multiply::sqr2_hi#1 [phi:init_multiply::@4->init_multiply::@3#1] -- register_copy + //SEG282 [133] phi (byte*) init_multiply::sqr2_lo#2 = (byte*) init_multiply::sqr2_lo#1 [phi:init_multiply::@4->init_multiply::@3#2] -- register_copy + //SEG283 [133] phi (byte) init_multiply::x_255#2 = (byte) init_multiply::x_255#1 [phi:init_multiply::@4->init_multiply::@3#3] -- register_copy + jmp b3 + //SEG284 init_multiply::@3 + b3: + //SEG285 [134] *((byte*) init_multiply::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldx x_255 + lda mul_sqr1_lo,x + ldy #0 + sta (sqr2_lo),y + //SEG286 [135] *((byte*) init_multiply::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldx x_255 + lda mul_sqr1_hi,x + ldy #0 + sta (sqr2_hi),y + //SEG287 [136] (byte*) init_multiply::sqr2_hi#1 ← ++ (byte*) init_multiply::sqr2_hi#2 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ) -- pbuz1=_inc_pbuz1 + inc sqr2_hi + bne !+ + inc sqr2_hi+1 + !: + //SEG288 [137] (byte) init_multiply::x_255#1 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) -- vbuz1=vbuz1_plus_vbuz2 + lda x_255 + clc + adc dir + sta x_255 + //SEG289 [138] if((byte) init_multiply::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_multiply::@12 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) -- vbuz1_neq_0_then_la1 + lda x_255 + bne b12_from_b3 + //SEG290 [139] phi from init_multiply::@3 to init_multiply::@4 [phi:init_multiply::@3->init_multiply::@4] + b4_from_b3: + //SEG291 [139] phi (byte) init_multiply::dir#3 = (byte/signed byte/word/signed word) 1 [phi:init_multiply::@3->init_multiply::@4#0] -- vbuz1=vbuc1 + lda #1 + sta dir + jmp b4 + //SEG292 init_multiply::@4 + b4: + //SEG293 [140] (byte*) init_multiply::sqr2_lo#1 ← ++ (byte*) init_multiply::sqr2_lo#2 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) -- pbuz1=_inc_pbuz1 + inc sqr2_lo + bne !+ + inc sqr2_lo+1 + !: + //SEG294 [141] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_multiply::@3 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) -- pbuz1_neq_pbuc1_then_la1 + lda sqr2_lo+1 + cmp #>mul_sqr2_lo+$1ff + bne b3_from_b4 + lda sqr2_lo + cmp #init_multiply::@12] + b12_from_b3: + jmp b12 + //SEG301 init_multiply::@12 + b12: + //SEG302 [139] phi from init_multiply::@12 to init_multiply::@4 [phi:init_multiply::@12->init_multiply::@4] + b4_from_b12: + //SEG303 [139] phi (byte) init_multiply::dir#3 = (byte) init_multiply::dir#2 [phi:init_multiply::@12->init_multiply::@4#0] -- register_copy + jmp b4 +} +//SEG304 print_cls +print_cls: { + .label sc = $23 + //SEG305 [147] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG306 [147] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG307 [147] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG308 [147] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG309 print_cls::@1 + b1: + //SEG310 [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + ldy #0 + lda #' ' + sta (sc),y + //SEG311 [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG312 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG313 print_cls::@return + breturn: + //SEG314 [151] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + .align $100 + mul_sqr1_lo: .fill $200, 0 + .align $100 + mul_sqr1_hi: .fill $200, 0 + .align $100 + mul_sqr2_lo: .fill $200, 0 + .align $100 + mul_sqr2_hi: .fill $200, 0 + .align $100 + asm_mul_sqr1_lo: .fill $200, 0 + .align $100 + asm_mul_sqr1_hi: .fill $200, 0 + .align $100 + asm_mul_sqr2_lo: .fill $200, 0 + .align $100 + asm_mul_sqr2_hi: .fill $200, 0 + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +Statement [22] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [26] (word) multiply::return#2 ← (word) multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [27] (word) multiply_results_compare::ma#0 ← (word) multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [28] if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [31] (word) print_word::w#2 ← (word) multiply_results_compare::ms#0 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a +Statement [35] (word) print_word::w#3 ← (word) multiply_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a +Statement [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::multiply_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) always clobbers reg byte a +Statement [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a +Statement [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a +Statement [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y +Statement [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y +Statement [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) always clobbers reg byte a +Statement [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a +Statement [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a +Statement [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Statement asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +Statement [81] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) always clobbers reg byte a +Statement [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ slow_multiply::a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ slow_multiply::b#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] +Statement [92] if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a reg byte y +Statement [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a +Statement [95] (word) print_word::w#0 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ) always clobbers reg byte a +Statement [99] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) always clobbers reg byte a +Statement [105] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) always clobbers reg byte a +Statement [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) always clobbers reg byte a +Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } always clobbers reg byte a reg byte x reg byte y +Statement [112] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [113] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [114] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [115] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [120] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ init_multiply::c#2 init_multiply::c#1 ] +Statement [125] (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ) always clobbers reg byte a +Statement [126] *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ init_multiply::c#2 init_multiply::c#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] +Statement [127] (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ) always clobbers reg byte a +Statement [128] *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) always clobbers reg byte y +Statement [130] (word) init_multiply::sqr#1 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) always clobbers reg byte a +Statement [132] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_multiply::@1 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) always clobbers reg byte a +Statement [134] *((byte*) init_multiply::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ init_multiply::x_255#2 init_multiply::x_255#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ init_multiply::x_255#2 init_multiply::x_255#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] +Statement [135] *((byte*) init_multiply::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [137] (byte) init_multiply::x_255#1 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [141] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_multiply::@3 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) always clobbers reg byte a +Statement [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) always clobbers reg byte a +Statement [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) always clobbers reg byte a +Statement [148] *((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 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Statement [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [22] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [26] (word) multiply::return#2 ← (word) multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [27] (word) multiply_results_compare::ma#0 ← (word) multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [28] if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) always clobbers reg byte a +Statement [31] (word) print_word::w#2 ← (word) multiply_results_compare::ms#0 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a +Statement [35] (word) print_word::w#3 ← (word) multiply_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) always clobbers reg byte a +Statement [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::multiply_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) always clobbers reg byte a +Statement [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a +Statement [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) always clobbers reg byte a +Statement [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y +Statement [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) always clobbers reg byte a reg byte y +Statement [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) always clobbers reg byte a +Statement [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) always clobbers reg byte a +Statement [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) always clobbers reg byte a +Statement [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) always clobbers reg byte y +Statement asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } always clobbers reg byte a reg byte x +Statement [81] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) always clobbers reg byte a +Potential register analysis [83] if(slow_multiply::a#0<=0) goto slow_multiply::@1 missing fragment vbuxx_le_0_then_la1 allocation: reg byte x [ slow_multiply::a#0 ] +Potential register analysis [83] if(slow_multiply::a#0<=0) goto slow_multiply::@1 missing fragment vbuyy_le_0_then_la1 allocation: reg byte y [ slow_multiply::a#0 ] +MISSING FRAGMENTS + vbuxx_le_0_then_la1 + vbuyy_le_0_then_la1 +Statement [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) always clobbers reg byte a +Statement [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) always clobbers reg byte a +Statement [92] if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a reg byte y +Statement [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) always clobbers reg byte a +Statement [95] (word) print_word::w#0 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ) always clobbers reg byte a +Statement [99] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) always clobbers reg byte a +Statement [105] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) always clobbers reg byte a +Statement [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) always clobbers reg byte a +Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } always clobbers reg byte a reg byte x reg byte y +Statement [112] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [113] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [114] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [115] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a +Statement [120] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ) always clobbers reg byte a +Statement [125] (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ) always clobbers reg byte a +Statement [126] *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) always clobbers reg byte y +Statement [127] (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ) always clobbers reg byte a +Statement [128] *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) always clobbers reg byte y +Statement [130] (word) init_multiply::sqr#1 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) always clobbers reg byte a +Statement [132] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_multiply::@1 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) always clobbers reg byte a +Statement [134] *((byte*) init_multiply::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [135] *((byte*) init_multiply::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [137] (byte) init_multiply::x_255#1 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [141] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_multiply::@3 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) always clobbers reg byte a +Statement [142] *((const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) always clobbers reg byte a +Statement [143] *((const byte[512]) mul_sqr2_hi#0+(word/signed word) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word) 256) [ ] ( main:2::init_multiply:7 [ ] ) always clobbers reg byte a +Statement [148] *((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 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 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 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] : zp ZP_BYTE:2 , reg byte y , +Potential registers zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] : zp ZP_BYTE:3 , reg byte y , +Potential registers zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] : zp ZP_WORD:8 , +Potential registers zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , +Potential registers zp ZP_BYTE:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] : zp ZP_WORD:12 , +Potential registers zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:17 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] : zp ZP_WORD:17 , +Potential registers zp ZP_WORD:19 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ] : zp ZP_WORD:19 , +Potential registers zp ZP_BYTE:21 [ init_multiply::c#2 init_multiply::c#1 ] : zp ZP_BYTE:21 , reg byte x , +Potential registers zp ZP_WORD:22 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] : zp ZP_WORD:22 , +Potential registers zp ZP_WORD:24 [ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] : zp ZP_WORD:24 , +Potential registers zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] : zp ZP_BYTE:26 , reg byte x , +Potential registers zp ZP_WORD:27 [ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] : zp ZP_WORD:27 , +Potential registers zp ZP_BYTE:29 [ init_multiply::x_255#2 init_multiply::x_255#1 ] : zp ZP_BYTE:29 , reg byte x , +Potential registers zp ZP_WORD:30 [ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] : zp ZP_WORD:30 , +Potential registers zp ZP_WORD:32 [ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] : zp ZP_WORD:32 , +Potential registers zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] : zp ZP_BYTE:34 , reg byte x , +Potential registers zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:35 , +Potential registers zp ZP_BYTE:37 [ slow_multiply::a#0 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:38 [ slow_multiply::b#0 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:39 [ slow_multiply::return#2 ] : zp ZP_WORD:39 , +Potential registers zp ZP_WORD:41 [ multiply_results_compare::ms#0 ] : zp ZP_WORD:41 , +Potential registers zp ZP_BYTE:43 [ multiply::a#0 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:44 [ multiply::b#0 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:45 [ multiply::return#2 ] : zp ZP_WORD:45 , +Potential registers zp ZP_WORD:47 [ multiply_results_compare::ma#0 ] : zp ZP_WORD:47 , +Potential registers zp ZP_BYTE:49 [ print_byte::$0 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:50 [ print_byte::$2 ] : zp ZP_BYTE:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:51 [ multiply::return#0 ] : zp ZP_WORD:51 , +Potential registers zp ZP_BYTE:53 [ init_multiply::$2 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:54 [ init_multiply::$5 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:55 [ init_multiply::$6 ] : zp ZP_BYTE:55 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [slow_multiply] 3,370.33: zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] 2,502.5: zp ZP_BYTE:14 [ slow_multiply::i#2 slow_multiply::i#1 ] 202: zp ZP_WORD:39 [ slow_multiply::return#2 ] 183.67: zp ZP_BYTE:38 [ slow_multiply::b#0 ] 157.71: zp ZP_BYTE:37 [ slow_multiply::a#0 ] +Uplift Scope [multiply] 202: zp ZP_WORD:45 [ multiply::return#2 ] 51.5: zp ZP_BYTE:43 [ multiply::a#0 ] 51.5: zp ZP_BYTE:44 [ multiply::b#0 ] 34.33: zp ZP_WORD:51 [ multiply::return#0 ] +Uplift Scope [multiply_results_compare] 185.17: zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] 31.43: zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] 25.5: zp ZP_WORD:47 [ multiply_results_compare::ma#0 ] 22.67: zp ZP_WORD:41 [ multiply_results_compare::ms#0 ] +Uplift Scope [init_multiply] 45.1: zp ZP_WORD:27 [ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] 24.36: zp ZP_BYTE:21 [ init_multiply::c#2 init_multiply::c#1 ] 24.14: zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] 22: zp ZP_BYTE:53 [ init_multiply::$2 ] 22: zp ZP_BYTE:54 [ init_multiply::$5 ] 22: zp ZP_BYTE:55 [ init_multiply::$6 ] 20.62: zp ZP_WORD:30 [ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] 19.04: zp ZP_WORD:22 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] 16.5: zp ZP_BYTE:29 [ init_multiply::x_255#2 init_multiply::x_255#1 ] 14.14: zp ZP_WORD:32 [ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] 12.05: zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] 8.5: zp ZP_WORD:24 [ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] +Uplift Scope [] 78.34: zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] 74.04: zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] +Uplift Scope [multiply_tables_compare] 20.39: zp ZP_WORD:17 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] 16.08: zp ZP_WORD:19 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ] +Uplift Scope [print_str] 35.5: zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] +Uplift Scope [print_cls] 33: zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] +Uplift Scope [print_word] 20: zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] +Uplift Scope [print_byte] 10: zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:49 [ print_byte::$0 ] 4: zp ZP_BYTE:50 [ print_byte::$2 ] +Uplift Scope [print_char] 14: zp ZP_BYTE:11 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplift Scope [print_ln] +Uplift Scope [main] +Uplift Scope [init_multiply_asm] + +Uplifting [slow_multiply] best 66221 combination zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] zp ZP_WORD:39 [ slow_multiply::return#2 ] reg byte x [ slow_multiply::b#0 ] zp ZP_BYTE:37 [ slow_multiply::a#0 ] +Uplifting [multiply] best 65615 combination zp ZP_WORD:45 [ multiply::return#2 ] reg byte x [ multiply::a#0 ] reg byte a [ multiply::b#0 ] zp ZP_WORD:51 [ multiply::return#0 ] +Uplifting [multiply_results_compare] best 65615 combination zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] zp ZP_WORD:47 [ multiply_results_compare::ma#0 ] zp ZP_WORD:41 [ multiply_results_compare::ms#0 ] +Uplifting [init_multiply] best 65265 combination zp ZP_WORD:27 [ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] reg byte x [ init_multiply::c#2 init_multiply::c#1 ] zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] reg byte a [ init_multiply::$2 ] reg byte a [ init_multiply::$5 ] reg byte a [ init_multiply::$6 ] zp ZP_WORD:30 [ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] zp ZP_WORD:22 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] reg byte x [ init_multiply::x_255#2 init_multiply::x_255#1 ] zp ZP_WORD:32 [ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] zp ZP_WORD:24 [ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] +Uplifting [] best 65265 combination zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] +Uplifting [multiply_tables_compare] best 65265 combination zp ZP_WORD:17 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] zp ZP_WORD:19 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ] +Uplifting [print_str] best 65265 combination zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] +Uplifting [print_cls] best 65265 combination zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] +Uplifting [print_word] best 65265 combination zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] +Uplifting [print_byte] best 65253 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte y [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_char] best 65244 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_ln] best 65244 combination +Uplifting [main] best 65244 combination +Uplifting [init_multiply_asm] best 65244 combination +MISSING FRAGMENTS + vbuxx_le_0_then_la1 + vbuyy_le_0_then_la1 +Attempting to uplift remaining variables inzp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +Uplifting [multiply_results_compare] best 65244 combination zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:37 [ slow_multiply::a#0 ] +Uplifting [slow_multiply] best 65244 combination zp ZP_BYTE:37 [ slow_multiply::a#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] +Uplifting [multiply_results_compare] best 65244 combination zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] +Uplifting [init_multiply] best 65244 combination zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] +Uplifting [init_multiply] best 65244 combination zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] +Coalescing zero page register [ zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 ] ] with [ zp ZP_BYTE:26 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] ] with [ zp ZP_BYTE:34 [ init_multiply::dir#2 init_multiply::dir#3 ] ] +Coalescing zero page register [ zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 init_multiply::dir#2 init_multiply::dir#3 ] ] with [ zp ZP_BYTE:37 [ slow_multiply::a#0 ] ] +Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 ] ] with [ zp ZP_WORD:17 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] ] +Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] ] with [ zp ZP_WORD:22 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] ] +Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] ] with [ zp ZP_WORD:30 [ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] ] +Coalescing zero page register [ zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] ] with [ zp ZP_WORD:35 [ print_cls::sc#2 print_cls::sc#1 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 ] ] with [ zp ZP_WORD:8 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 ] ] with [ zp ZP_WORD:15 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] ] with [ zp ZP_WORD:24 [ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ] ] with [ zp ZP_WORD:32 [ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] ] with [ zp ZP_WORD:39 [ slow_multiply::return#2 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 slow_multiply::return#2 ] ] with [ zp ZP_WORD:45 [ multiply::return#2 ] ] +Coalescing zero page register [ zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 slow_multiply::return#2 multiply::return#2 ] ] with [ zp ZP_WORD:51 [ multiply::return#0 ] ] +Coalescing zero page register [ zp ZP_WORD:12 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 ] ] with [ zp ZP_WORD:27 [ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] ] +Coalescing zero page register [ zp ZP_WORD:19 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ] ] with [ zp ZP_WORD:41 [ multiply_results_compare::ms#0 ] ] +Allocated (was zp ZP_WORD:12) zp ZP_WORD:8 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] +Allocated (was zp ZP_WORD:19) zp ZP_WORD:10 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 multiply_results_compare::ms#0 ] +Allocated (was zp ZP_WORD:47) zp ZP_WORD:12 [ multiply_results_compare::ma#0 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .const BGCOL = $d021 + .label char_cursor = 8 + .label line_cursor = 4 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @13 [phi:@begin->@13] +b13_from_bbegin: + jmp b13 +//SEG4 @13 +b13: +//SEG5 [2] call main param-assignment [ ] ( ) + jsr main +//SEG6 [3] phi from @13 to @end [phi:@13->@end] +bend_from_b13: + jmp bend +//SEG7 @end +bend: +//SEG8 main +main: { + //SEG9 [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #5 + sta BGCOL + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [146] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + //SEG13 main::@1 + b1: + //SEG14 [7] call init_multiply param-assignment [ ] ( main:2 [ ] ) + //SEG15 [117] phi from main::@1 to init_multiply [phi:main::@1->init_multiply] + init_multiply_from_b1: + jsr init_multiply + //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + //SEG17 main::@2 + b2: + //SEG18 [9] call init_multiply_asm param-assignment [ ] ( main:2 [ ] ) + jsr init_multiply_asm + //SEG19 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + jmp b3 + //SEG20 main::@3 + b3: + //SEG21 [11] call multiply_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) + //SEG22 [90] phi from main::@3 to multiply_tables_compare [phi:main::@3->multiply_tables_compare] + multiply_tables_compare_from_b3: + jsr multiply_tables_compare + //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + jmp b4 + //SEG24 main::@4 + b4: + //SEG25 [13] call multiply_results_compare param-assignment [ ] ( main:2 [ ] ) + //SEG26 [15] phi from main::@4 to multiply_results_compare [phi:main::@4->multiply_results_compare] + multiply_results_compare_from_b4: + jsr multiply_results_compare + jmp breturn + //SEG27 main::@return + breturn: + //SEG28 [14] return [ ] ( main:2 [ ] ) + rts +} +//SEG29 multiply_results_compare +multiply_results_compare: { + .label ms = $a + .label ma = $c + .label b = 3 + .label a = 2 + //SEG30 [16] phi from multiply_results_compare to multiply_results_compare::@1 [phi:multiply_results_compare->multiply_results_compare::@1] + b1_from_multiply_results_compare: + //SEG31 [16] phi (byte) multiply_results_compare::a#5 = (byte/signed byte/word/signed word) 0 [phi:multiply_results_compare->multiply_results_compare::@1#0] -- vbuz1=vbuc1 + lda #0 + sta a + jmp b1 + //SEG32 [16] phi from multiply_results_compare::@6 to multiply_results_compare::@1 [phi:multiply_results_compare::@6->multiply_results_compare::@1] + b1_from_b6: + //SEG33 [16] phi (byte) multiply_results_compare::a#5 = (byte) multiply_results_compare::a#1 [phi:multiply_results_compare::@6->multiply_results_compare::@1#0] -- register_copy + jmp b1 + //SEG34 multiply_results_compare::@1 + b1: + //SEG35 [17] phi from multiply_results_compare::@1 to multiply_results_compare::@2 [phi:multiply_results_compare::@1->multiply_results_compare::@2] + b2_from_b1: + //SEG36 [17] phi (byte) multiply_results_compare::b#2 = (byte/signed byte/word/signed word) 0 [phi:multiply_results_compare::@1->multiply_results_compare::@2#0] -- vbuz1=vbuc1 + lda #0 + sta b + jmp b2 + //SEG37 [17] phi from multiply_results_compare::@3 to multiply_results_compare::@2 [phi:multiply_results_compare::@3->multiply_results_compare::@2] + b2_from_b3: + //SEG38 [17] phi (byte) multiply_results_compare::b#2 = (byte) multiply_results_compare::b#1 [phi:multiply_results_compare::@3->multiply_results_compare::@2#0] -- register_copy + jmp b2 + //SEG39 multiply_results_compare::@2 + b2: + //SEG40 [18] (byte) slow_multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) + // (byte) slow_multiply::a#0 = (byte) multiply_results_compare::a#5 // register copy zp ZP_BYTE:2 + //SEG41 [19] (byte) slow_multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 + ldx b + //SEG42 [20] call slow_multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) + jsr slow_multiply + //SEG43 [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) + // (word) slow_multiply::return#2 = (word) slow_multiply::return#0 // register copy zp ZP_WORD:6 + jmp b8 + //SEG44 multiply_results_compare::@8 + b8: + //SEG45 [22] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda slow_multiply.return + sta ms + lda slow_multiply.return+1 + sta ms+1 + //SEG46 [23] (byte) multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 + ldx a + //SEG47 [24] (byte) multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuaa=vbuz1 + lda b + //SEG48 [25] call multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ) + jsr multiply + //SEG49 [26] (word) multiply::return#2 ← (word) multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ) + // (word) multiply::return#2 = (word) multiply::return#0 // register copy zp ZP_WORD:6 + jmp b9 + //SEG50 multiply_results_compare::@9 + b9: + //SEG51 [27] (word) multiply_results_compare::ma#0 ← (word) multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda multiply.return + sta ma + lda multiply.return+1 + sta ma+1 + //SEG52 [28] if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp ma + bne !+ + lda ms+1 + cmp ma+1 + beq b3 + !: + jmp b4 + //SEG53 multiply_results_compare::@4 + b4: + //SEG54 [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + //SEG55 [30] call print_str param-assignment [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + //SEG56 [53] phi from multiply_results_compare::@4 to print_str [phi:multiply_results_compare::@4->print_str] + print_str_from_b4: + //SEG57 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:multiply_results_compare::@4->print_str#0] -- register_copy + //SEG58 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str [phi:multiply_results_compare::@4->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b10 + //SEG59 multiply_results_compare::@10 + b10: + //SEG60 [31] (word) print_word::w#2 ← (word) multiply_results_compare::ms#0 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 + lda ms + sta print_word.w + lda ms+1 + sta print_word.w+1 + //SEG61 [32] call print_word param-assignment [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) + //SEG62 [60] phi from multiply_results_compare::@10 to print_word [phi:multiply_results_compare::@10->print_word] + print_word_from_b10: + //SEG63 [60] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:multiply_results_compare::@10->print_word#0] -- register_copy + jsr print_word + //SEG64 [33] phi from multiply_results_compare::@10 to multiply_results_compare::@11 [phi:multiply_results_compare::@10->multiply_results_compare::@11] + b11_from_b10: + jmp b11 + //SEG65 multiply_results_compare::@11 + b11: + //SEG66 [34] call print_str param-assignment [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + //SEG67 [53] phi from multiply_results_compare::@11 to print_str [phi:multiply_results_compare::@11->print_str] + print_str_from_b11: + //SEG68 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:multiply_results_compare::@11->print_str#0] -- register_copy + //SEG69 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str1 [phi:multiply_results_compare::@11->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b12 + //SEG70 multiply_results_compare::@12 + b12: + //SEG71 [35] (word) print_word::w#3 ← (word) multiply_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 + lda ma + sta print_word.w + lda ma+1 + sta print_word.w+1 + //SEG72 [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) + //SEG73 [60] phi from multiply_results_compare::@12 to print_word [phi:multiply_results_compare::@12->print_word] + print_word_from_b12: + //SEG74 [60] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:multiply_results_compare::@12->print_word#0] -- register_copy + jsr print_word + //SEG75 [37] phi from multiply_results_compare::@12 multiply_results_compare::@14 to multiply_results_compare::@return [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return] + breturn_from_b12: + breturn_from_b14: + //SEG76 [37] phi (byte*) line_cursor#19 = (byte*) line_cursor#17 [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return#0] -- register_copy + //SEG77 [37] phi (byte*) char_cursor#27 = (byte*) char_cursor#11 [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return#1] -- register_copy + jmp breturn + //SEG78 multiply_results_compare::@return + breturn: + //SEG79 [38] return [ ] ( main:2::multiply_results_compare:13 [ ] ) + rts + //SEG80 multiply_results_compare::@3 + b3: + //SEG81 [39] (byte) multiply_results_compare::b#1 ← ++ (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 + inc b + //SEG82 [40] if((byte) multiply_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 + lda b + bne b2_from_b3 + jmp b6 + //SEG83 multiply_results_compare::@6 + b6: + //SEG84 [41] (byte) multiply_results_compare::a#1 ← ++ (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 + inc a + //SEG85 [42] if((byte) multiply_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@1 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 + lda a + bne b1_from_b6 + //SEG86 [43] phi from multiply_results_compare::@6 to multiply_results_compare::@7 [phi:multiply_results_compare::@6->multiply_results_compare::@7] + b7_from_b6: + jmp b7 + //SEG87 multiply_results_compare::@7 + b7: + //SEG88 [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) + //SEG89 [53] phi from multiply_results_compare::@7 to print_str [phi:multiply_results_compare::@7->print_str] + print_str_from_b7: + //SEG90 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:multiply_results_compare::@7->print_str#0] -- register_copy + //SEG91 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str2 [phi:multiply_results_compare::@7->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + //SEG92 [45] phi from multiply_results_compare::@7 to multiply_results_compare::@14 [phi:multiply_results_compare::@7->multiply_results_compare::@14] + b14_from_b7: + jmp b14 + //SEG93 multiply_results_compare::@14 + b14: + //SEG94 [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_results_compare:13 [ line_cursor#1 ] ) + //SEG95 [48] phi from multiply_results_compare::@14 to print_ln [phi:multiply_results_compare::@14->print_ln] + print_ln_from_b14: + //SEG96 [48] phi (byte*) line_cursor#22 = (byte*) line_cursor#17 [phi:multiply_results_compare::@14->print_ln#0] -- register_copy + jsr print_ln + //SEG97 [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::multiply_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + jmp breturn_from_b14 + str: .text "multiply mismatch slow:@" + str1: .text " / fast asm:" + str2: .text "multiply results match!@" +} +//SEG98 print_ln +print_ln: { + //SEG99 [49] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG100 [49] phi (byte*) line_cursor#11 = (byte*) line_cursor#22 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG101 print_ln::@1 + b1: + //SEG102 [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG103 [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1_from_b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG104 print_ln::@return + breturn: + //SEG105 [52] return [ line_cursor#1 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) + rts +} +//SEG106 print_str +print_str: { + .label str = 6 + //SEG107 [54] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + //SEG108 [54] phi (byte*) char_cursor#2 = (byte*) char_cursor#71 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG109 [54] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + //SEG110 print_str::@1 + b1: + //SEG111 [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG112 print_str::@return + breturn: + //SEG113 [56] return [ char_cursor#2 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 ] ) + rts + //SEG114 print_str::@2 + b2: + //SEG115 [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (char_cursor),y + //SEG116 [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG117 [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} +//SEG118 print_word +print_word: { + .label w = 6 + //SEG119 [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) -- vbuxx=_hi_vwuz1 + lda w+1 + tax + //SEG120 [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) + //SEG121 [66] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + //SEG122 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#2 [phi:print_word->print_byte#0] -- register_copy + //SEG123 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + //SEG124 print_word::@1 + b1: + //SEG125 [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) -- vbuxx=_lo_vwuz1 + lda w + tax + //SEG126 [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + //SEG127 [66] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + //SEG128 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#11 [phi:print_word::@1->print_byte#0] -- register_copy + //SEG129 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + //SEG130 print_word::@return + breturn: + //SEG131 [65] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + rts +} +//SEG132 print_byte +print_byte: { + //SEG133 [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + tay + //SEG134 [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy + lda hextab,y + //SEG135 [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) + //SEG136 [74] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG137 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#64 [phi:print_byte->print_char#0] -- register_copy + //SEG138 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG139 print_byte::@1 + b1: + //SEG140 [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + //SEG141 [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa + tax + lda hextab,x + //SEG142 [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + //SEG143 [74] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG144 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#11 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG145 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG146 print_byte::@return + breturn: + //SEG147 [73] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + rts + hextab: .byte '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' +} +//SEG148 print_char +print_char: { + //SEG149 [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (char_cursor),y + //SEG150 [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + jmp breturn + //SEG151 print_char::@return + breturn: + //SEG152 [77] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) + rts +} +//SEG153 multiply +multiply: { + .const memA = $fe + .const memB = $ff + .label return = 6 + //SEG154 [78] *((const byte*) multiply::memA#0) ← (byte) multiply::a#0 [ multiply::b#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::b#0 ] ) -- _deref_pbuc1=vbuxx + stx memA + //SEG155 [79] *((const byte*) multiply::memB#0) ← (byte) multiply::b#0 [ ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuaa + sta memB + //SEG156 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + lda memA + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + ldx memB + sec + sm1: + lda mul_sqr1_lo,x + sm2: + sbc mul_sqr2_lo,x + sta memA + sm3: + lda mul_sqr1_hi,x + sm4: + sbc mul_sqr2_hi,x + sta memB + //SEG157 [81] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + lda memA + sta return + lda memB + sta return+1 + jmp breturn + //SEG158 multiply::@return + breturn: + //SEG159 [82] return [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) + rts +} +//SEG160 slow_multiply +slow_multiply: { + .label return = 6 + .label m = 6 + .label a = 2 + //SEG161 [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) -- vbuz1_le_0_then_la1 + lda a + cmp #0 + beq b1_from_slow_multiply + //SEG162 [84] phi from slow_multiply to slow_multiply::@2 [phi:slow_multiply->slow_multiply::@2] + b2_from_slow_multiply: + //SEG163 [84] phi (byte) slow_multiply::i#2 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#0] -- vbuyy=vbuc1 + ldy #0 + //SEG164 [84] phi (word) slow_multiply::m#3 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#1] -- vwuz1=vbuc1 + lda #0 + sta m + lda #0 + sta m+1 + jmp b2 + //SEG165 [84] phi from slow_multiply::@2 to slow_multiply::@2 [phi:slow_multiply::@2->slow_multiply::@2] + b2_from_b2: + //SEG166 [84] phi (byte) slow_multiply::i#2 = (byte) slow_multiply::i#1 [phi:slow_multiply::@2->slow_multiply::@2#0] -- register_copy + //SEG167 [84] phi (word) slow_multiply::m#3 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@2#1] -- register_copy + jmp b2 + //SEG168 slow_multiply::@2 + b2: + //SEG169 [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) -- vwuz1=vwuz1_plus_vbuxx + txa + clc + adc m + sta m + bcc !+ + inc m+1 + !: + //SEG170 [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy=_inc_vbuyy + iny + //SEG171 [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy_neq_vbuz1_then_la1 + cpy a + bne b2_from_b2 + //SEG172 [88] phi from slow_multiply::@2 to slow_multiply::@1 [phi:slow_multiply::@2->slow_multiply::@1] + b1_from_b2: + //SEG173 [88] phi (word) slow_multiply::return#0 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@1#0] -- register_copy + jmp b1 + //SEG174 [88] phi from slow_multiply to slow_multiply::@1 [phi:slow_multiply->slow_multiply::@1] + b1_from_slow_multiply: + //SEG175 [88] phi (word) slow_multiply::return#0 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@1#0] -- vwuz1=vbuc1 + lda #0 + sta return + lda #0 + sta return+1 + jmp b1 + //SEG176 slow_multiply::@1 + b1: + jmp breturn + //SEG177 slow_multiply::@return + breturn: + //SEG178 [89] return [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) + rts +} +//SEG179 multiply_tables_compare +multiply_tables_compare: { + .label asm_sqr = $a + .label kc_sqr = 4 + //SEG180 [91] phi from multiply_tables_compare to multiply_tables_compare::@1 [phi:multiply_tables_compare->multiply_tables_compare::@1] + b1_from_multiply_tables_compare: + //SEG181 [91] phi (byte*) multiply_tables_compare::asm_sqr#2 = (const byte[512]) asm_mul_sqr1_lo#0 [phi:multiply_tables_compare->multiply_tables_compare::@1#0] -- pbuz1=pbuc1 + lda #asm_mul_sqr1_lo + sta asm_sqr+1 + //SEG182 [91] phi (byte*) multiply_tables_compare::kc_sqr#2 = (const byte[512]) mul_sqr1_lo#0 [phi:multiply_tables_compare->multiply_tables_compare::@1#1] -- pbuz1=pbuc1 + lda #mul_sqr1_lo + sta kc_sqr+1 + jmp b1 + //SEG183 [91] phi from multiply_tables_compare::@2 to multiply_tables_compare::@1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1] + b1_from_b2: + //SEG184 [91] phi (byte*) multiply_tables_compare::asm_sqr#2 = (byte*) multiply_tables_compare::asm_sqr#1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1#0] -- register_copy + //SEG185 [91] phi (byte*) multiply_tables_compare::kc_sqr#2 = (byte*) multiply_tables_compare::kc_sqr#1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1#1] -- register_copy + jmp b1 + //SEG186 multiply_tables_compare::@1 + b1: + //SEG187 [92] if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + ldy #0 + lda (kc_sqr),y + ldy #0 + cmp (asm_sqr),y + beq b2 + jmp b3 + //SEG188 multiply_tables_compare::@3 + b3: + //SEG189 [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + //SEG190 [94] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + //SEG191 [53] phi from multiply_tables_compare::@3 to print_str [phi:multiply_tables_compare::@3->print_str] + print_str_from_b3: + //SEG192 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@3->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG193 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str [phi:multiply_tables_compare::@3->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b6 + //SEG194 multiply_tables_compare::@6 + b6: + //SEG195 [95] (word) print_word::w#0 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ) -- vwuz1=_word_pbuz2 + lda asm_sqr + sta print_word.w + lda asm_sqr+1 + sta print_word.w+1 + //SEG196 [96] call print_word param-assignment [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ) + //SEG197 [60] phi from multiply_tables_compare::@6 to print_word [phi:multiply_tables_compare::@6->print_word] + print_word_from_b6: + //SEG198 [60] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:multiply_tables_compare::@6->print_word#0] -- register_copy + jsr print_word + //SEG199 [97] phi from multiply_tables_compare::@6 to multiply_tables_compare::@7 [phi:multiply_tables_compare::@6->multiply_tables_compare::@7] + b7_from_b6: + jmp b7 + //SEG200 multiply_tables_compare::@7 + b7: + //SEG201 [98] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ) + //SEG202 [53] phi from multiply_tables_compare::@7 to print_str [phi:multiply_tables_compare::@7->print_str] + print_str_from_b7: + //SEG203 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:multiply_tables_compare::@7->print_str#0] -- register_copy + //SEG204 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str1 [phi:multiply_tables_compare::@7->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b8 + //SEG205 multiply_tables_compare::@8 + b8: + //SEG206 [99] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) -- vwuz1=_word_pbuz2 + lda kc_sqr + sta print_word.w + lda kc_sqr+1 + sta print_word.w+1 + //SEG207 [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 ] ) + //SEG208 [60] phi from multiply_tables_compare::@8 to print_word [phi:multiply_tables_compare::@8->print_word] + print_word_from_b8: + //SEG209 [60] phi (word) print_word::w#4 = (word) print_word::w#1 [phi:multiply_tables_compare::@8->print_word#0] -- register_copy + jsr print_word + //SEG210 [101] phi from multiply_tables_compare::@8 to multiply_tables_compare::@return [phi:multiply_tables_compare::@8->multiply_tables_compare::@return] + breturn_from_b8: + //SEG211 [101] phi (byte*) line_cursor#17 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@8->multiply_tables_compare::@return#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG212 [101] phi (byte*) char_cursor#20 = (byte*) char_cursor#11 [phi:multiply_tables_compare::@8->multiply_tables_compare::@return#1] -- register_copy + jmp breturn + //SEG213 multiply_tables_compare::@return + breturn: + //SEG214 [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + rts + //SEG215 multiply_tables_compare::@2 + b2: + //SEG216 [103] (byte*) multiply_tables_compare::asm_sqr#1 ← ++ (byte*) multiply_tables_compare::asm_sqr#2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 + inc asm_sqr + bne !+ + inc asm_sqr+1 + !: + //SEG217 [104] (byte*) multiply_tables_compare::kc_sqr#1 ← ++ (byte*) multiply_tables_compare::kc_sqr#2 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 + inc kc_sqr + bne !+ + inc kc_sqr+1 + !: + //SEG218 [105] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1_lt_pbuc1_then_la1 + lda kc_sqr+1 + cmp #>mul_sqr1_lo+$200*4 + bcc b1_from_b2 + bne !+ + lda kc_sqr + cmp #multiply_tables_compare::@5] + b5_from_b2: + jmp b5 + //SEG220 multiply_tables_compare::@5 + b5: + //SEG221 [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 ] ) + //SEG222 [53] phi from multiply_tables_compare::@5 to print_str [phi:multiply_tables_compare::@5->print_str] + print_str_from_b5: + //SEG223 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@5->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG224 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str2 [phi:multiply_tables_compare::@5->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + //SEG225 [108] phi from multiply_tables_compare::@5 to multiply_tables_compare::@10 [phi:multiply_tables_compare::@5->multiply_tables_compare::@10] + b10_from_b5: + jmp b10 + //SEG226 multiply_tables_compare::@10 + b10: + //SEG227 [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 ] ) + //SEG228 [48] phi from multiply_tables_compare::@10 to print_ln [phi:multiply_tables_compare::@10->print_ln] + print_ln_from_b10: + //SEG229 [48] phi (byte*) line_cursor#22 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@10->print_ln#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + jsr print_ln + //SEG230 [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG231 [101] phi from multiply_tables_compare::@10 to multiply_tables_compare::@return [phi:multiply_tables_compare::@10->multiply_tables_compare::@return] + breturn_from_b10: + //SEG232 [101] phi (byte*) line_cursor#17 = (byte*) line_cursor#1 [phi:multiply_tables_compare::@10->multiply_tables_compare::@return#0] -- register_copy + //SEG233 [101] phi (byte*) char_cursor#20 = (byte*~) char_cursor#100 [phi:multiply_tables_compare::@10->multiply_tables_compare::@return#1] -- register_copy + jmp breturn + str: .text "multiply table mismatch at @" + str1: .text " / @" + str2: .text "multiply tables match!@" +} +//SEG234 init_multiply_asm +init_multiply_asm: { + .const mem = $ff + //SEG235 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + ldx #0 + txa + .byte $c9 + lb1: + tya + adc #0 + ml1: + sta asm_mul_sqr1_hi,x + tay + cmp #$40 + txa + ror + ml9: + adc #0 + sta ml9+1 + inx + ml0: + sta asm_mul_sqr1_lo,x + bne lb1 + inc ml0+2 + inc ml1+2 + clc + iny + bne lb1 + ldx #0 + ldy #$ff + !: + lda asm_mul_sqr1_hi+1,x + sta asm_mul_sqr2_hi+$100,x + lda asm_mul_sqr1_hi,x + sta asm_mul_sqr2_hi,y + lda asm_mul_sqr1_lo+1,x + sta asm_mul_sqr2_lo+$100,x + lda asm_mul_sqr1_lo,x + sta asm_mul_sqr2_lo,y + dey + inx + bne !- + //SEG236 [112] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr1_lo + sta mem + //SEG237 [113] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr1_hi + sta mem + //SEG238 [114] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr2_lo + sta mem + //SEG239 [115] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr2_hi + sta mem + jmp breturn + //SEG240 init_multiply_asm::@return + breturn: + //SEG241 [116] return [ ] ( main:2::init_multiply_asm:9 [ ] ) + rts +} +//SEG242 init_multiply +init_multiply: { + .label sqr1_hi = 6 + .label sqr = 8 + .label sqr1_lo = 4 + .label x_2 = 2 + .label sqr2_hi = 6 + .label sqr2_lo = 4 + .label dir = 2 + //SEG243 [118] phi from init_multiply to init_multiply::@1 [phi:init_multiply->init_multiply::@1] + b1_from_init_multiply: + //SEG244 [118] phi (byte) init_multiply::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#0] -- vbuz1=vbuc1 + lda #0 + sta x_2 + //SEG245 [118] phi (byte*) init_multiply::sqr1_hi#2 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_multiply->init_multiply::@1#1] -- pbuz1=pbuc1 + lda #mul_sqr1_hi+1 + sta sqr1_hi+1 + //SEG246 [118] phi (byte*) init_multiply::sqr1_lo#2 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_multiply->init_multiply::@1#2] -- pbuz1=pbuc1 + lda #mul_sqr1_lo+1 + sta sqr1_lo+1 + //SEG247 [118] phi (word) init_multiply::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#3] -- vwuz1=vbuc1 + lda #0 + sta sqr + lda #0 + sta sqr+1 + //SEG248 [118] phi (byte) init_multiply::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#4] -- vbuxx=vbuc1 + ldx #0 + jmp b1 + //SEG249 [118] phi from init_multiply::@2 to init_multiply::@1 [phi:init_multiply::@2->init_multiply::@1] + b1_from_b2: + //SEG250 [118] phi (byte) init_multiply::x_2#3 = (byte) init_multiply::x_2#2 [phi:init_multiply::@2->init_multiply::@1#0] -- register_copy + //SEG251 [118] phi (byte*) init_multiply::sqr1_hi#2 = (byte*) init_multiply::sqr1_hi#1 [phi:init_multiply::@2->init_multiply::@1#1] -- register_copy + //SEG252 [118] phi (byte*) init_multiply::sqr1_lo#2 = (byte*) init_multiply::sqr1_lo#1 [phi:init_multiply::@2->init_multiply::@1#2] -- register_copy + //SEG253 [118] phi (word) init_multiply::sqr#4 = (word) init_multiply::sqr#1 [phi:init_multiply::@2->init_multiply::@1#3] -- register_copy + //SEG254 [118] phi (byte) init_multiply::c#2 = (byte) init_multiply::c#1 [phi:init_multiply::@2->init_multiply::@1#4] -- register_copy + jmp b1 + //SEG255 init_multiply::@1 + b1: + //SEG256 [119] (byte) init_multiply::c#1 ← ++ (byte) init_multiply::c#2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG257 [120] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + //SEG258 [121] if((byte~) init_multiply::$2!=(byte/signed byte/word/signed word) 0) goto init_multiply::@2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) -- vbuaa_neq_0_then_la1 + cmp #0 + bne b2_from_b1 + jmp b5 + //SEG259 init_multiply::@5 + b5: + //SEG260 [122] (byte) init_multiply::x_2#1 ← ++ (byte) init_multiply::x_2#3 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ) -- vbuz1=_inc_vbuz1 + inc x_2 + //SEG261 [123] (word) init_multiply::sqr#2 ← ++ (word) init_multiply::sqr#4 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ) -- vwuz1=_inc_vwuz1 + inc sqr + bne !+ + inc sqr+1 + !: + //SEG262 [124] phi from init_multiply::@1 init_multiply::@5 to init_multiply::@2 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2] + b2_from_b1: + b2_from_b5: + //SEG263 [124] phi (byte) init_multiply::x_2#2 = (byte) init_multiply::x_2#3 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2#0] -- register_copy + //SEG264 [124] phi (word) init_multiply::sqr#3 = (word) init_multiply::sqr#4 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2#1] -- register_copy + jmp b2 + //SEG265 init_multiply::@2 + b2: + //SEG266 [125] (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ) -- vbuaa=_lo_vwuz1 + lda sqr + //SEG267 [126] *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (sqr1_lo),y + //SEG268 [127] (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ) -- vbuaa=_hi_vwuz1 + lda sqr+1 + //SEG269 [128] *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (sqr1_hi),y + //SEG270 [129] (byte*) init_multiply::sqr1_hi#1 ← ++ (byte*) init_multiply::sqr1_hi#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + inc sqr1_hi + bne !+ + inc sqr1_hi+1 + !: + //SEG271 [130] (word) init_multiply::sqr#1 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda x_2 + clc + adc sqr + sta sqr + bcc !+ + inc sqr+1 + !: + //SEG272 [131] (byte*) init_multiply::sqr1_lo#1 ← ++ (byte*) init_multiply::sqr1_lo#2 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- pbuz1=_inc_pbuz1 + inc sqr1_lo + bne !+ + inc sqr1_lo+1 + !: + //SEG273 [132] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_multiply::@1 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- pbuz1_neq_pbuc1_then_la1 + lda sqr1_lo+1 + cmp #>mul_sqr1_lo+$200 + bne b1_from_b2 + lda sqr1_lo + cmp #init_multiply::@3] + b3_from_b2: + //SEG275 [133] phi (byte) init_multiply::dir#2 = (byte/word/signed word) 255 [phi:init_multiply::@2->init_multiply::@3#0] -- vbuz1=vbuc1 + lda #$ff + sta dir + //SEG276 [133] phi (byte*) init_multiply::sqr2_hi#2 = (const byte[512]) mul_sqr2_hi#0 [phi:init_multiply::@2->init_multiply::@3#1] -- pbuz1=pbuc1 + lda #mul_sqr2_hi + sta sqr2_hi+1 + //SEG277 [133] phi (byte*) init_multiply::sqr2_lo#2 = (const byte[512]) mul_sqr2_lo#0 [phi:init_multiply::@2->init_multiply::@3#2] -- pbuz1=pbuc1 + lda #mul_sqr2_lo + sta sqr2_lo+1 + //SEG278 [133] phi (byte) init_multiply::x_255#2 = ((byte))-(byte/signed byte/word/signed word) 1 [phi:init_multiply::@2->init_multiply::@3#3] -- vbuxx=vbuc1 + ldx #-1 + jmp b3 + //SEG279 [133] phi from init_multiply::@4 to init_multiply::@3 [phi:init_multiply::@4->init_multiply::@3] + b3_from_b4: + //SEG280 [133] phi (byte) init_multiply::dir#2 = (byte) init_multiply::dir#3 [phi:init_multiply::@4->init_multiply::@3#0] -- register_copy + //SEG281 [133] phi (byte*) init_multiply::sqr2_hi#2 = (byte*) init_multiply::sqr2_hi#1 [phi:init_multiply::@4->init_multiply::@3#1] -- register_copy + //SEG282 [133] phi (byte*) init_multiply::sqr2_lo#2 = (byte*) init_multiply::sqr2_lo#1 [phi:init_multiply::@4->init_multiply::@3#2] -- register_copy + //SEG283 [133] phi (byte) init_multiply::x_255#2 = (byte) init_multiply::x_255#1 [phi:init_multiply::@4->init_multiply::@3#3] -- register_copy + jmp b3 + //SEG284 init_multiply::@3 + b3: + //SEG285 [134] *((byte*) init_multiply::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + lda mul_sqr1_lo,x + ldy #0 + sta (sqr2_lo),y + //SEG286 [135] *((byte*) init_multiply::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + lda mul_sqr1_hi,x + ldy #0 + sta (sqr2_hi),y + //SEG287 [136] (byte*) init_multiply::sqr2_hi#1 ← ++ (byte*) init_multiply::sqr2_hi#2 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ) -- pbuz1=_inc_pbuz1 + inc sqr2_hi + bne !+ + inc sqr2_hi+1 + !: + //SEG288 [137] (byte) init_multiply::x_255#1 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) -- vbuxx=vbuxx_plus_vbuz1 + txa + clc + adc dir + tax + //SEG289 [138] if((byte) init_multiply::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_multiply::@12 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) -- vbuxx_neq_0_then_la1 + cpx #0 + bne b12_from_b3 + //SEG290 [139] phi from init_multiply::@3 to init_multiply::@4 [phi:init_multiply::@3->init_multiply::@4] + b4_from_b3: + //SEG291 [139] phi (byte) init_multiply::dir#3 = (byte/signed byte/word/signed word) 1 [phi:init_multiply::@3->init_multiply::@4#0] -- vbuz1=vbuc1 + lda #1 + sta dir + jmp b4 + //SEG292 init_multiply::@4 + b4: + //SEG293 [140] (byte*) init_multiply::sqr2_lo#1 ← ++ (byte*) init_multiply::sqr2_lo#2 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) -- pbuz1=_inc_pbuz1 + inc sqr2_lo + bne !+ + inc sqr2_lo+1 + !: + //SEG294 [141] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_multiply::@3 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) -- pbuz1_neq_pbuc1_then_la1 + lda sqr2_lo+1 + cmp #>mul_sqr2_lo+$1ff + bne b3_from_b4 + lda sqr2_lo + cmp #init_multiply::@12] + b12_from_b3: + jmp b12 + //SEG301 init_multiply::@12 + b12: + //SEG302 [139] phi from init_multiply::@12 to init_multiply::@4 [phi:init_multiply::@12->init_multiply::@4] + b4_from_b12: + //SEG303 [139] phi (byte) init_multiply::dir#3 = (byte) init_multiply::dir#2 [phi:init_multiply::@12->init_multiply::@4#0] -- register_copy + jmp b4 +} +//SEG304 print_cls +print_cls: { + .label sc = 4 + //SEG305 [147] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG306 [147] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG307 [147] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG308 [147] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG309 print_cls::@1 + b1: + //SEG310 [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + ldy #0 + lda #' ' + sta (sc),y + //SEG311 [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG312 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG313 print_cls::@return + breturn: + //SEG314 [151] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + .align $100 + mul_sqr1_lo: .fill $200, 0 + .align $100 + mul_sqr1_hi: .fill $200, 0 + .align $100 + mul_sqr2_lo: .fill $200, 0 + .align $100 + mul_sqr2_hi: .fill $200, 0 + .align $100 + asm_mul_sqr1_lo: .fill $200, 0 + .align $100 + asm_mul_sqr1_hi: .fill $200, 0 + .align $100 + asm_mul_sqr2_lo: .fill $200, 0 + .align $100 + asm_mul_sqr2_hi: .fill $200, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b13 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b8 +Removing instruction jmp b9 +Removing instruction jmp b4 +Removing instruction jmp b10 +Removing instruction jmp b11 +Removing instruction jmp b12 +Removing instruction jmp breturn +Removing instruction jmp b6 +Removing instruction jmp b7 +Removing instruction jmp b14 +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b2 +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b6 +Removing instruction jmp b7 +Removing instruction jmp b8 +Removing instruction jmp breturn +Removing instruction jmp b5 +Removing instruction jmp b10 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b5 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b8 +Removing instruction jmp breturn +Removing instruction jmp b12 +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction ldy #0 +Replacing instruction lda memA with TXA +Replacing instruction lda #0 with TYA +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction ldy #0 +Removing instruction lda #0 +Replacing instruction ldx #0 with TAX +Removing instruction ldy #0 +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b2_from_b3 with b2 +Replacing label b1_from_b6 with b1 +Replacing label breturn_from_b14 with breturn +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b2 with b1 +Replacing label b2_from_b2 with b2 +Replacing label b1_from_b2 with b1 +Replacing label b1_from_b2 with b1 +Replacing label b2_from_b1 with b2 +Replacing label b1_from_b2 with b1 +Replacing label b1_from_b2 with b1 +Replacing label b12_from_b3 with b12 +Replacing label b3_from_b4 with b3 +Replacing label b3_from_b4 with b3 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Removing instruction bbegin: +Removing instruction b13_from_bbegin: +Removing instruction bend_from_b13: +Removing instruction b1_from_main: +Removing instruction init_multiply_from_b1: +Removing instruction b2_from_b1: +Removing instruction b3_from_b2: +Removing instruction multiply_tables_compare_from_b3: +Removing instruction b4_from_b3: +Removing instruction multiply_results_compare_from_b4: +Removing instruction b1_from_b6: +Removing instruction b2_from_b1: +Removing instruction b2_from_b3: +Removing instruction b11_from_b10: +Removing instruction print_str_from_b11: +Removing instruction breturn_from_b12: +Removing instruction breturn_from_b14: +Removing instruction b7_from_b6: +Removing instruction print_str_from_b7: +Removing instruction b14_from_b7: +Removing instruction print_ln_from_b14: +Removing instruction b1_from_print_ln: +Removing instruction b1_from_b1: +Removing instruction b1_from_print_str: +Removing instruction b1_from_b2: +Removing instruction b2_from_b2: +Removing instruction breturn: +Removing instruction b1_from_b2: +Removing instruction b7_from_b6: +Removing instruction print_str_from_b7: +Removing instruction b5_from_b2: +Removing instruction print_str_from_b5: +Removing instruction b10_from_b5: +Removing instruction print_ln_from_b10: +Removing instruction b1_from_b2: +Removing instruction b2_from_b1: +Removing instruction b2_from_b5: +Removing instruction b3_from_b4: +Removing instruction b12_from_b3: +Removing instruction b4_from_b12: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction b13: +Removing instruction bend: +Removing instruction print_cls_from_main: +Removing instruction b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction b4: +Removing instruction breturn: +Removing instruction b1_from_multiply_results_compare: +Removing instruction b8: +Removing instruction b9: +Removing instruction b4: +Removing instruction print_str_from_b4: +Removing instruction b10: +Removing instruction print_word_from_b10: +Removing instruction b11: +Removing instruction b12: +Removing instruction print_word_from_b12: +Removing instruction b6: +Removing instruction b7: +Removing instruction b14: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction print_byte_from_print_word: +Removing instruction b1: +Removing instruction print_byte_from_b1: +Removing instruction breturn: +Removing instruction print_char_from_print_byte: +Removing instruction b1: +Removing instruction print_char_from_b1: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction b2_from_slow_multiply: +Removing instruction b1_from_b2: +Removing instruction b1_from_multiply_tables_compare: +Removing instruction b3: +Removing instruction print_str_from_b3: +Removing instruction b6: +Removing instruction print_word_from_b6: +Removing instruction b7: +Removing instruction b8: +Removing instruction print_word_from_b8: +Removing instruction breturn_from_b8: +Removing instruction b5: +Removing instruction b10: +Removing instruction breturn_from_b10: +Removing instruction breturn: +Removing instruction b1_from_init_multiply: +Removing instruction b5: +Removing instruction b3_from_b2: +Removing instruction b4_from_b3: +Removing instruction b8: +Removing instruction breturn: +Removing instruction b1_from_print_cls: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to b4 in bne b12 +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label b1_from_slow_multiply to b3 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b2 +Removing instruction jmp b1 +Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction b12: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction jmp b4 +Succesful ASM optimization Pass5UnreachableCodeElimination + +FINAL SYMBOL TABLE +(label) @13 +(label) @begin +(label) @end +(byte*) BGCOL +(const byte*) BGCOL#0 BGCOL = ((byte*))(word) 53281 +(byte[512]) asm_mul_sqr1_hi +(const byte[512]) asm_mul_sqr1_hi#0 asm_mul_sqr1_hi = { fill( 512, 0) } +(byte[512]) asm_mul_sqr1_lo +(const byte[512]) asm_mul_sqr1_lo#0 asm_mul_sqr1_lo = { fill( 512, 0) } +(byte[512]) asm_mul_sqr2_hi +(const byte[512]) asm_mul_sqr2_hi#0 asm_mul_sqr2_hi = { fill( 512, 0) } +(byte[512]) asm_mul_sqr2_lo +(const byte[512]) asm_mul_sqr2_lo#0 asm_mul_sqr2_lo = { fill( 512, 0) } +(byte*) char_cursor +(byte*) char_cursor#1 char_cursor zp ZP_WORD:8 11.0 +(byte*~) char_cursor#100 char_cursor zp ZP_WORD:8 4.0 +(byte*) char_cursor#11 char_cursor zp ZP_WORD:8 0.823529411764706 +(byte*) char_cursor#2 char_cursor zp ZP_WORD:8 2.1818181818181817 +(byte*) char_cursor#20 char_cursor zp ZP_WORD:8 0.3333333333333333 +(byte*) char_cursor#27 char_cursor zp ZP_WORD:8 40.0 +(byte*) char_cursor#41 char_cursor zp ZP_WORD:8 4.0 +(byte*) char_cursor#64 char_cursor zp ZP_WORD:8 2.0 +(byte*) char_cursor#71 char_cursor zp ZP_WORD:8 10.0 +(byte*~) char_cursor#89 char_cursor zp ZP_WORD:8 4.0 +(void()) init_multiply() +(byte~) init_multiply::$2 reg byte a 22.0 +(byte~) init_multiply::$5 reg byte a 22.0 +(byte~) init_multiply::$6 reg byte a 22.0 +(label) init_multiply::@1 +(label) init_multiply::@12 +(label) init_multiply::@2 +(label) init_multiply::@3 +(label) init_multiply::@4 +(label) init_multiply::@5 +(label) init_multiply::@8 +(label) init_multiply::@return +(byte) init_multiply::c +(byte) init_multiply::c#1 reg byte x 2.357142857142857 +(byte) init_multiply::c#2 reg byte x 22.0 +(byte) init_multiply::dir +(byte) init_multiply::dir#2 dir zp ZP_BYTE:2 4.714285714285714 +(byte) init_multiply::dir#3 dir zp ZP_BYTE:2 7.333333333333333 +(word) init_multiply::sqr +(word) init_multiply::sqr#1 sqr zp ZP_WORD:8 7.333333333333333 +(word) init_multiply::sqr#2 sqr zp ZP_WORD:8 22.0 +(word) init_multiply::sqr#3 sqr zp ZP_WORD:8 9.166666666666666 +(word) init_multiply::sqr#4 sqr zp ZP_WORD:8 6.6000000000000005 +(byte*) init_multiply::sqr1_hi +(byte*) init_multiply::sqr1_hi#1 sqr1_hi zp ZP_WORD:6 5.5 +(byte*) init_multiply::sqr1_hi#2 sqr1_hi zp ZP_WORD:6 3.0 +(byte*) init_multiply::sqr1_lo +(byte*) init_multiply::sqr1_lo#1 sqr1_lo zp ZP_WORD:4 16.5 +(byte*) init_multiply::sqr1_lo#2 sqr1_lo zp ZP_WORD:4 2.5384615384615383 +(byte*) init_multiply::sqr2_hi +(byte*) init_multiply::sqr2_hi#1 sqr2_hi zp ZP_WORD:6 3.142857142857143 +(byte*) init_multiply::sqr2_hi#2 sqr2_hi zp ZP_WORD:6 11.0 +(byte*) init_multiply::sqr2_lo +(byte*) init_multiply::sqr2_lo#1 sqr2_lo zp ZP_WORD:4 16.5 +(byte*) init_multiply::sqr2_lo#2 sqr2_lo zp ZP_WORD:4 4.125 +(byte) init_multiply::x_2 +(byte) init_multiply::x_2#1 x_2 zp ZP_BYTE:2 11.0 +(byte) init_multiply::x_2#2 x_2 zp ZP_BYTE:2 4.888888888888889 +(byte) init_multiply::x_2#3 x_2 zp ZP_BYTE:2 8.25 +(byte) init_multiply::x_255 +(byte) init_multiply::x_255#1 reg byte x 5.5 +(byte) init_multiply::x_255#2 reg byte x 11.0 +(void()) init_multiply_asm() +(label) init_multiply_asm::@return +(byte*) init_multiply_asm::mem +(const byte*) init_multiply_asm::mem#0 mem = ((byte*))(byte/word/signed word) 255 +(byte*) line_cursor +(byte*) line_cursor#1 line_cursor zp ZP_WORD:4 5.857142857142857 +(byte*) line_cursor#11 line_cursor zp ZP_WORD:4 24.0 +(byte*) line_cursor#17 line_cursor zp ZP_WORD:4 0.18181818181818182 +(byte*) line_cursor#19 line_cursor zp ZP_WORD:4 40.0 +(byte*) line_cursor#22 line_cursor zp ZP_WORD:4 4.0 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return +(byte[512]) mul_sqr1_hi +(const byte[512]) mul_sqr1_hi#0 mul_sqr1_hi = { fill( 512, 0) } +(byte[512]) mul_sqr1_lo +(const byte[512]) mul_sqr1_lo#0 mul_sqr1_lo = { fill( 512, 0) } +(byte[512]) mul_sqr2_hi +(const byte[512]) mul_sqr2_hi#0 mul_sqr2_hi = { fill( 512, 0) } +(byte[512]) mul_sqr2_lo +(const byte[512]) mul_sqr2_lo#0 mul_sqr2_lo = { fill( 512, 0) } +(word()) multiply((byte) multiply::a , (byte) multiply::b) +(label) multiply::@return +(byte) multiply::a +(byte) multiply::a#0 reg byte x 51.5 +(byte) multiply::b +(byte) multiply::b#0 reg byte a 51.5 +(byte*) multiply::memA +(const byte*) multiply::memA#0 memA = ((byte*))(byte/word/signed word) 254 +(byte*) multiply::memB +(const byte*) multiply::memB#0 memB = ((byte*))(byte/word/signed word) 255 +(word) multiply::return +(word) multiply::return#0 return zp ZP_WORD:6 34.33333333333333 +(word) multiply::return#2 return zp ZP_WORD:6 202.0 +(void()) multiply_results_compare() +(label) multiply_results_compare::@1 +(label) multiply_results_compare::@10 +(label) multiply_results_compare::@11 +(label) multiply_results_compare::@12 +(label) multiply_results_compare::@14 +(label) multiply_results_compare::@2 +(label) multiply_results_compare::@3 +(label) multiply_results_compare::@4 +(label) multiply_results_compare::@6 +(label) multiply_results_compare::@7 +(label) multiply_results_compare::@8 +(label) multiply_results_compare::@9 +(label) multiply_results_compare::@return +(byte) multiply_results_compare::a +(byte) multiply_results_compare::a#1 a zp ZP_BYTE:2 16.5 +(byte) multiply_results_compare::a#5 a zp ZP_BYTE:2 14.933333333333332 +(byte) multiply_results_compare::b +(byte) multiply_results_compare::b#1 b zp ZP_BYTE:3 151.5 +(byte) multiply_results_compare::b#2 b zp ZP_BYTE:3 33.666666666666664 +(word) multiply_results_compare::ma +(word) multiply_results_compare::ma#0 ma zp ZP_WORD:12 25.5 +(word) multiply_results_compare::ms +(word) multiply_results_compare::ms#0 ms zp ZP_WORD:10 22.666666666666664 +(const string) multiply_results_compare::str str = (string) "multiply mismatch slow:@" +(const string) multiply_results_compare::str1 str1 = (string) " / fast asm:" +(const string) multiply_results_compare::str2 str2 = (string) "multiply results match!@" +(void()) multiply_tables_compare() +(label) multiply_tables_compare::@1 +(label) multiply_tables_compare::@10 +(label) multiply_tables_compare::@2 +(label) multiply_tables_compare::@3 +(label) multiply_tables_compare::@5 +(label) multiply_tables_compare::@6 +(label) multiply_tables_compare::@7 +(label) multiply_tables_compare::@8 +(label) multiply_tables_compare::@return +(byte*) multiply_tables_compare::asm_sqr +(byte*) multiply_tables_compare::asm_sqr#1 asm_sqr zp ZP_WORD:10 7.333333333333333 +(byte*) multiply_tables_compare::asm_sqr#2 asm_sqr zp ZP_WORD:10 8.75 +(byte*) multiply_tables_compare::kc_sqr +(byte*) multiply_tables_compare::kc_sqr#1 kc_sqr zp ZP_WORD:4 16.5 +(byte*) multiply_tables_compare::kc_sqr#2 kc_sqr zp ZP_WORD:4 3.8888888888888893 +(const string) multiply_tables_compare::str str = (string) "multiply table mismatch at @" +(const string) multiply_tables_compare::str1 str1 = (string) " / @" +(const string) multiply_tables_compare::str2 str2 = (string) "multiply tables match!@" +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte y 4.0 +(byte~) print_byte::$2 reg byte a 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 reg byte x 4.0 +(byte) print_byte::b#1 reg byte x 4.0 +(byte) print_byte::b#2 reg byte x 2.0 +(byte[]) print_byte::hextab +(const byte[]) print_byte::hextab#0 hextab = { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 reg byte a 4.0 +(byte) print_char::ch#1 reg byte a 4.0 +(byte) print_char::ch#2 reg byte a 6.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:4 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:4 16.5 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_str((byte*) print_str::str) +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 str zp ZP_WORD:6 22.0 +(byte*) print_str::str#7 str zp ZP_WORD:6 11.5 +(byte*) print_str::str#9 str zp ZP_WORD:6 2.0 +(void()) print_word((word) print_word::w) +(label) print_word::@1 +(label) print_word::@return +(word) print_word::w +(word) print_word::w#0 w zp ZP_WORD:6 4.0 +(word) print_word::w#1 w zp ZP_WORD:6 4.0 +(word) print_word::w#2 w zp ZP_WORD:6 4.0 +(word) print_word::w#3 w zp ZP_WORD:6 4.0 +(word) print_word::w#4 w zp ZP_WORD:6 3.9999999999999996 +(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) +(label) slow_multiply::@1 +(label) slow_multiply::@2 +(label) slow_multiply::@return +(byte) slow_multiply::a +(byte) slow_multiply::a#0 a zp ZP_BYTE:2 157.71428571428572 +(byte) slow_multiply::b +(byte) slow_multiply::b#0 reg byte x 183.66666666666669 +(byte) slow_multiply::i +(byte) slow_multiply::i#1 reg byte y 1501.5 +(byte) slow_multiply::i#2 reg byte y 1001.0 +(word) slow_multiply::m +(word) slow_multiply::m#1 m zp ZP_WORD:6 1001.0 +(word) slow_multiply::m#3 m zp ZP_WORD:6 2002.0 +(word) slow_multiply::return +(word) slow_multiply::return#0 return zp ZP_WORD:6 367.33333333333337 +(word) slow_multiply::return#2 return zp ZP_WORD:6 202.0 + +zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 init_multiply::dir#2 init_multiply::dir#3 slow_multiply::a#0 ] +zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 slow_multiply::return#2 multiply::return#2 multiply::return#0 ] +reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +zp ZP_WORD:8 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] +reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] +zp ZP_WORD:10 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 multiply_results_compare::ms#0 ] +reg byte x [ init_multiply::c#2 init_multiply::c#1 ] +reg byte x [ init_multiply::x_255#2 init_multiply::x_255#1 ] +reg byte x [ slow_multiply::b#0 ] +reg byte x [ multiply::a#0 ] +reg byte a [ multiply::b#0 ] +zp ZP_WORD:12 [ multiply_results_compare::ma#0 ] +reg byte y [ print_byte::$0 ] +reg byte a [ print_byte::$2 ] +reg byte a [ init_multiply::$2 ] +reg byte a [ init_multiply::$5 ] +reg byte a [ init_multiply::$6 ] + + +FINAL ASSEMBLER +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .const BGCOL = $d021 + .label char_cursor = 8 + .label line_cursor = 4 +//SEG2 @begin +//SEG3 [1] phi from @begin to @13 [phi:@begin->@13] +//SEG4 @13 +//SEG5 [2] call main param-assignment [ ] ( ) + jsr main +//SEG6 [3] phi from @13 to @end [phi:@13->@end] +//SEG7 @end +//SEG8 main +main: { + //SEG9 [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #5 + sta BGCOL + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [146] phi from main to print_cls [phi:main->print_cls] + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + //SEG13 main::@1 + //SEG14 [7] call init_multiply param-assignment [ ] ( main:2 [ ] ) + //SEG15 [117] phi from main::@1 to init_multiply [phi:main::@1->init_multiply] + jsr init_multiply + //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG17 main::@2 + //SEG18 [9] call init_multiply_asm param-assignment [ ] ( main:2 [ ] ) + jsr init_multiply_asm + //SEG19 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + //SEG20 main::@3 + //SEG21 [11] call multiply_tables_compare param-assignment [ line_cursor#17 char_cursor#20 ] ( main:2 [ line_cursor#17 char_cursor#20 ] ) + //SEG22 [90] phi from main::@3 to multiply_tables_compare [phi:main::@3->multiply_tables_compare] + jsr multiply_tables_compare + //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + //SEG24 main::@4 + //SEG25 [13] call multiply_results_compare param-assignment [ ] ( main:2 [ ] ) + //SEG26 [15] phi from main::@4 to multiply_results_compare [phi:main::@4->multiply_results_compare] + jsr multiply_results_compare + //SEG27 main::@return + //SEG28 [14] return [ ] ( main:2 [ ] ) + rts +} +//SEG29 multiply_results_compare +multiply_results_compare: { + .label ms = $a + .label ma = $c + .label b = 3 + .label a = 2 + //SEG30 [16] phi from multiply_results_compare to multiply_results_compare::@1 [phi:multiply_results_compare->multiply_results_compare::@1] + //SEG31 [16] phi (byte) multiply_results_compare::a#5 = (byte/signed byte/word/signed word) 0 [phi:multiply_results_compare->multiply_results_compare::@1#0] -- vbuz1=vbuc1 + lda #0 + sta a + //SEG32 [16] phi from multiply_results_compare::@6 to multiply_results_compare::@1 [phi:multiply_results_compare::@6->multiply_results_compare::@1] + //SEG33 [16] phi (byte) multiply_results_compare::a#5 = (byte) multiply_results_compare::a#1 [phi:multiply_results_compare::@6->multiply_results_compare::@1#0] -- register_copy + //SEG34 multiply_results_compare::@1 + b1: + //SEG35 [17] phi from multiply_results_compare::@1 to multiply_results_compare::@2 [phi:multiply_results_compare::@1->multiply_results_compare::@2] + //SEG36 [17] phi (byte) multiply_results_compare::b#2 = (byte/signed byte/word/signed word) 0 [phi:multiply_results_compare::@1->multiply_results_compare::@2#0] -- vbuz1=vbuc1 + lda #0 + sta b + //SEG37 [17] phi from multiply_results_compare::@3 to multiply_results_compare::@2 [phi:multiply_results_compare::@3->multiply_results_compare::@2] + //SEG38 [17] phi (byte) multiply_results_compare::b#2 = (byte) multiply_results_compare::b#1 [phi:multiply_results_compare::@3->multiply_results_compare::@2#0] -- register_copy + //SEG39 multiply_results_compare::@2 + b2: + //SEG40 [18] (byte) slow_multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 line_cursor#17 char_cursor#20 ] ) + // (byte) slow_multiply::a#0 = (byte) multiply_results_compare::a#5 // register copy zp ZP_BYTE:2 + //SEG41 [19] (byte) slow_multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 + ldx b + //SEG42 [20] call slow_multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#0 line_cursor#17 char_cursor#20 ] ) + jsr slow_multiply + //SEG43 [21] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 slow_multiply::return#2 line_cursor#17 char_cursor#20 ] ) + // (word) slow_multiply::return#2 = (word) slow_multiply::return#0 // register copy zp ZP_WORD:6 + //SEG44 multiply_results_compare::@8 + //SEG45 [22] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda slow_multiply.return + sta ms + lda slow_multiply.return+1 + sta ms+1 + //SEG46 [23] (byte) multiply::a#0 ← (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 line_cursor#17 char_cursor#20 ] ) -- vbuxx=vbuz1 + ldx a + //SEG47 [24] (byte) multiply::b#0 ← (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#0 multiply::b#0 line_cursor#17 char_cursor#20 ] ) -- vbuaa=vbuz1 + lda b + //SEG48 [25] call multiply param-assignment [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 line_cursor#17 char_cursor#20 ] ) + jsr multiply + //SEG49 [26] (word) multiply::return#2 ← (word) multiply::return#0 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#2 line_cursor#17 char_cursor#20 ] ) + // (word) multiply::return#2 = (word) multiply::return#0 // register copy zp ZP_WORD:6 + //SEG50 multiply_results_compare::@9 + //SEG51 [27] (word) multiply_results_compare::ma#0 ← (word) multiply::return#2 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1=vwuz2 + lda multiply.return + sta ma + lda multiply.return+1 + sta ma+1 + //SEG52 [28] if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- vwuz1_eq_vwuz2_then_la1 + lda ms + cmp ma + bne !+ + lda ms+1 + cmp ma+1 + beq b3 + !: + //SEG53 multiply_results_compare::@4 + //SEG54 [29] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + //SEG55 [30] call print_str param-assignment [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + //SEG56 [53] phi from multiply_results_compare::@4 to print_str [phi:multiply_results_compare::@4->print_str] + //SEG57 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:multiply_results_compare::@4->print_str#0] -- register_copy + //SEG58 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str [phi:multiply_results_compare::@4->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG59 multiply_results_compare::@10 + //SEG60 [31] (word) print_word::w#2 ← (word) multiply_results_compare::ms#0 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 print_word::w#2 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 + lda ms + sta print_word.w + lda ms+1 + sta print_word.w+1 + //SEG61 [32] call print_word param-assignment [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 char_cursor#11 line_cursor#17 ] ) + //SEG62 [60] phi from multiply_results_compare::@10 to print_word [phi:multiply_results_compare::@10->print_word] + //SEG63 [60] phi (word) print_word::w#4 = (word) print_word::w#2 [phi:multiply_results_compare::@10->print_word#0] -- register_copy + jsr print_word + //SEG64 [33] phi from multiply_results_compare::@10 to multiply_results_compare::@11 [phi:multiply_results_compare::@10->multiply_results_compare::@11] + //SEG65 multiply_results_compare::@11 + //SEG66 [34] call print_str param-assignment [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] ) + //SEG67 [53] phi from multiply_results_compare::@11 to print_str [phi:multiply_results_compare::@11->print_str] + //SEG68 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:multiply_results_compare::@11->print_str#0] -- register_copy + //SEG69 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str1 [phi:multiply_results_compare::@11->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + //SEG70 multiply_results_compare::@12 + //SEG71 [35] (word) print_word::w#3 ← (word) multiply_results_compare::ma#0 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ print_word::w#3 line_cursor#17 char_cursor#2 ] ) -- vwuz1=vwuz2 + lda ma + sta print_word.w + lda ma+1 + sta print_word.w+1 + //SEG72 [36] call print_word param-assignment [ char_cursor#11 line_cursor#17 ] ( main:2::multiply_results_compare:13 [ char_cursor#11 line_cursor#17 ] ) + //SEG73 [60] phi from multiply_results_compare::@12 to print_word [phi:multiply_results_compare::@12->print_word] + //SEG74 [60] phi (word) print_word::w#4 = (word) print_word::w#3 [phi:multiply_results_compare::@12->print_word#0] -- register_copy + jsr print_word + //SEG75 [37] phi from multiply_results_compare::@12 multiply_results_compare::@14 to multiply_results_compare::@return [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return] + //SEG76 [37] phi (byte*) line_cursor#19 = (byte*) line_cursor#17 [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return#0] -- register_copy + //SEG77 [37] phi (byte*) char_cursor#27 = (byte*) char_cursor#11 [phi:multiply_results_compare::@12/multiply_results_compare::@14->multiply_results_compare::@return#1] -- register_copy + //SEG78 multiply_results_compare::@return + breturn: + //SEG79 [38] return [ ] ( main:2::multiply_results_compare:13 [ ] ) + rts + //SEG80 multiply_results_compare::@3 + b3: + //SEG81 [39] (byte) multiply_results_compare::b#1 ← ++ (byte) multiply_results_compare::b#2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 + inc b + //SEG82 [40] if((byte) multiply_results_compare::b#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@2 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#5 multiply_results_compare::b#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 + lda b + bne b2 + //SEG83 multiply_results_compare::@6 + //SEG84 [41] (byte) multiply_results_compare::a#1 ← ++ (byte) multiply_results_compare::a#5 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1=_inc_vbuz1 + inc a + //SEG85 [42] if((byte) multiply_results_compare::a#1!=(byte/signed byte/word/signed word) 0) goto multiply_results_compare::@1 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ( main:2::multiply_results_compare:13 [ multiply_results_compare::a#1 line_cursor#17 char_cursor#20 ] ) -- vbuz1_neq_0_then_la1 + lda a + bne b1 + //SEG86 [43] phi from multiply_results_compare::@6 to multiply_results_compare::@7 [phi:multiply_results_compare::@6->multiply_results_compare::@7] + //SEG87 multiply_results_compare::@7 + //SEG88 [44] call print_str param-assignment [ line_cursor#17 char_cursor#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#17 char_cursor#2 ] ) + //SEG89 [53] phi from multiply_results_compare::@7 to print_str [phi:multiply_results_compare::@7->print_str] + //SEG90 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#20 [phi:multiply_results_compare::@7->print_str#0] -- register_copy + //SEG91 [53] phi (byte*) print_str::str#9 = (const string) multiply_results_compare::str2 [phi:multiply_results_compare::@7->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + //SEG92 [45] phi from multiply_results_compare::@7 to multiply_results_compare::@14 [phi:multiply_results_compare::@7->multiply_results_compare::@14] + //SEG93 multiply_results_compare::@14 + //SEG94 [46] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_results_compare:13 [ line_cursor#1 ] ) + //SEG95 [48] phi from multiply_results_compare::@14 to print_ln [phi:multiply_results_compare::@14->print_ln] + //SEG96 [48] phi (byte*) line_cursor#22 = (byte*) line_cursor#17 [phi:multiply_results_compare::@14->print_ln#0] -- register_copy + jsr print_ln + //SEG97 [47] (byte*~) char_cursor#89 ← (byte*) line_cursor#1 [ char_cursor#89 line_cursor#1 ] ( main:2::multiply_results_compare:13 [ char_cursor#89 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + jmp breturn + str: .text "multiply mismatch slow:@" + str1: .text " / fast asm:" + str2: .text "multiply results match!@" +} +//SEG98 print_ln +print_ln: { + //SEG99 [49] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + //SEG100 [49] phi (byte*) line_cursor#11 = (byte*) line_cursor#22 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + //SEG101 print_ln::@1 + b1: + //SEG102 [50] (byte*) line_cursor#1 ← (byte*) line_cursor#11 + (byte/signed byte/word/signed word) 40 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG103 [51] if((byte*) line_cursor#1<(byte*) char_cursor#2) goto print_ln::@1 [ line_cursor#1 char_cursor#2 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 char_cursor#2 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 char_cursor#2 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1 + !: + //SEG104 print_ln::@return + //SEG105 [52] return [ line_cursor#1 ] ( main:2::multiply_results_compare:13::print_ln:46 [ line_cursor#1 ] main:2::multiply_tables_compare:11::print_ln:109 [ line_cursor#1 ] ) + rts +} +//SEG106 print_str +print_str: { + .label str = 6 + //SEG107 [54] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + //SEG108 [54] phi (byte*) char_cursor#2 = (byte*) char_cursor#71 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG109 [54] phi (byte*) print_str::str#7 = (byte*) print_str::str#9 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + //SEG110 print_str::@1 + b1: + //SEG111 [55] if(*((byte*) print_str::str#7)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + //SEG112 print_str::@return + //SEG113 [56] return [ char_cursor#2 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 ] ) + rts + //SEG114 print_str::@2 + b2: + //SEG115 [57] *((byte*) char_cursor#2) ← *((byte*) print_str::str#7) [ char_cursor#2 print_str::str#7 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_str::str#7 ] main:2::multiply_tables_compare:11::print_str:107 [ char_cursor#2 print_str::str#7 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + sta (char_cursor),y + //SEG116 [58] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#7 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#7 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#7 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG117 [59] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#7 [ print_str::str#0 char_cursor#1 ] ( main:2::multiply_results_compare:13::print_str:30 [ multiply_results_compare::ms#0 multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:34 [ multiply_results_compare::ma#0 line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_results_compare:13::print_str:44 [ line_cursor#17 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:94 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:98 [ multiply_tables_compare::kc_sqr#2 print_str::str#0 char_cursor#1 ] main:2::multiply_tables_compare:11::print_str:107 [ print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1 +} +//SEG118 print_word +print_word: { + .label w = 6 + //SEG119 [61] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#2 print_word::w#4 print_byte::b#0 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#2 print_word::w#4 print_byte::b#0 ] ) -- vbuxx=_hi_vwuz1 + lda w+1 + tax + //SEG120 [62] call print_byte param-assignment [ char_cursor#11 print_word::w#4 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_word::w#4 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_word::w#4 ] ) + //SEG121 [66] phi from print_word to print_byte [phi:print_word->print_byte] + //SEG122 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#2 [phi:print_word->print_byte#0] -- register_copy + //SEG123 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + //SEG124 print_word::@1 + //SEG125 [63] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#11 print_byte::b#1 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#1 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 print_byte::b#1 ] ) -- vbuxx=_lo_vwuz1 + lda w + tax + //SEG126 [64] call print_byte param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + //SEG127 [66] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + //SEG128 [66] phi (byte*) char_cursor#64 = (byte*) char_cursor#11 [phi:print_word::@1->print_byte#0] -- register_copy + //SEG129 [66] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + //SEG130 print_word::@return + //SEG131 [65] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100 [ char_cursor#11 ] ) + rts +} +//SEG132 print_byte +print_byte: { + //SEG133 [67] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + tay + //SEG134 [68] (byte) print_char::ch#0 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#64 print_char::ch#0 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ print_byte::b#2 char_cursor#64 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy + lda hextab,y + //SEG135 [69] call print_char param-assignment [ char_cursor#11 print_byte::b#2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::b#2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::b#2 ] ) + //SEG136 [74] phi from print_byte to print_char [phi:print_byte->print_char] + //SEG137 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#64 [phi:print_byte->print_char#0] -- register_copy + //SEG138 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + //SEG139 print_byte::@1 + //SEG140 [70] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#11 print_byte::$2 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_byte::$2 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + //SEG141 [71] (byte) print_char::ch#1 ← *((const byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#11 print_char::ch#1 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 print_char::ch#1 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa + tax + lda hextab,x + //SEG142 [72] call print_char param-assignment [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + //SEG143 [74] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + //SEG144 [74] phi (byte*) char_cursor#41 = (byte*) char_cursor#11 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG145 [74] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + //SEG146 print_byte::@return + //SEG147 [73] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64 [ char_cursor#11 ] ) + rts + hextab: .byte '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' +} +//SEG148 print_char +print_char: { + //SEG149 [75] *((byte*) char_cursor#41) ← (byte) print_char::ch#2 [ char_cursor#41 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#41 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#41 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#41 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (char_cursor),y + //SEG150 [76] (byte*) char_cursor#11 ← ++ (byte*) char_cursor#41 [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG151 print_char::@return + //SEG152 [77] return [ char_cursor#11 ] ( main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:69 [ line_cursor#17 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:69 [ print_word::w#4 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:69 [ multiply_results_compare::ma#0 line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:69 [ line_cursor#17 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:69 [ multiply_tables_compare::kc_sqr#2 print_byte::b#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:69 [ print_byte::b#2 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:62::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:62::print_char:72 [ line_cursor#17 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:62::print_char:72 [ multiply_tables_compare::kc_sqr#2 print_word::w#4 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:62::print_char:72 [ print_word::w#4 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:32::print_byte:64::print_char:72 [ multiply_results_compare::ma#0 line_cursor#17 char_cursor#11 ] main:2::multiply_results_compare:13::print_word:36::print_byte:64::print_char:72 [ line_cursor#17 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:96::print_byte:64::print_char:72 [ multiply_tables_compare::kc_sqr#2 char_cursor#11 ] main:2::multiply_tables_compare:11::print_word:100::print_byte:64::print_char:72 [ char_cursor#11 ] ) + rts +} +//SEG153 multiply +multiply: { + .const memA = $fe + .const memB = $ff + .label return = 6 + //SEG154 [78] *((const byte*) multiply::memA#0) ← (byte) multiply::a#0 [ multiply::b#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::b#0 ] ) -- _deref_pbuc1=vbuxx + stx memA + //SEG155 [79] *((const byte*) multiply::memB#0) ← (byte) multiply::b#0 [ ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 ] ) -- _deref_pbuc1=vbuaa + sta memB + //SEG156 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } + txa + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + ldx memB + sec + sm1: + lda mul_sqr1_lo,x + sm2: + sbc mul_sqr2_lo,x + sta memA + sm3: + lda mul_sqr1_hi,x + sm4: + sbc mul_sqr2_hi,x + sta memB + //SEG157 [81] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + lda memA + sta return + lda memB + sta return+1 + //SEG158 multiply::@return + //SEG159 [82] return [ multiply::return#0 ] ( main:2::multiply_results_compare:13::multiply:25 [ multiply_results_compare::a#5 multiply_results_compare::b#2 multiply_results_compare::ms#0 line_cursor#17 char_cursor#20 multiply::return#0 ] ) + rts +} +//SEG160 slow_multiply +slow_multiply: { + .label return = 6 + .label m = 6 + .label a = 2 + //SEG161 [83] if((byte) slow_multiply::a#0<=(byte/signed byte/word/signed word) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 ] ) -- vbuz1_le_0_then_la1 + lda a + cmp #0 + beq b3 + //SEG162 [84] phi from slow_multiply to slow_multiply::@2 [phi:slow_multiply->slow_multiply::@2] + //SEG163 [84] phi (byte) slow_multiply::i#2 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#0] -- vbuyy=vbuc1 + ldy #0 + //SEG164 [84] phi (word) slow_multiply::m#3 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@2#1] -- vwuz1=vbuc1 + tya + sta m + sta m+1 + //SEG165 [84] phi from slow_multiply::@2 to slow_multiply::@2 [phi:slow_multiply::@2->slow_multiply::@2] + //SEG166 [84] phi (byte) slow_multiply::i#2 = (byte) slow_multiply::i#1 [phi:slow_multiply::@2->slow_multiply::@2#0] -- register_copy + //SEG167 [84] phi (word) slow_multiply::m#3 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@2#1] -- register_copy + //SEG168 slow_multiply::@2 + b2: + //SEG169 [85] (word) slow_multiply::m#1 ← (word) slow_multiply::m#3 + (byte) slow_multiply::b#0 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] ) -- vwuz1=vwuz1_plus_vbuxx + txa + clc + adc m + sta m + bcc !+ + inc m+1 + !: + //SEG170 [86] (byte) slow_multiply::i#1 ← ++ (byte) slow_multiply::i#2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy=_inc_vbuyy + iny + //SEG171 [87] if((byte) slow_multiply::i#1!=(byte) slow_multiply::a#0) goto slow_multiply::@2 [ slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] ) -- vbuyy_neq_vbuz1_then_la1 + cpy a + bne b2 + //SEG172 [88] phi from slow_multiply::@2 to slow_multiply::@1 [phi:slow_multiply::@2->slow_multiply::@1] + //SEG173 [88] phi (word) slow_multiply::return#0 = (word) slow_multiply::m#1 [phi:slow_multiply::@2->slow_multiply::@1#0] -- register_copy + jmp b1 + //SEG174 [88] phi from slow_multiply to slow_multiply::@1 [phi:slow_multiply->slow_multiply::@1] + b3: + //SEG175 [88] phi (word) slow_multiply::return#0 = (byte/signed byte/word/signed word) 0 [phi:slow_multiply->slow_multiply::@1#0] -- vwuz1=vbuc1 + lda #0 + sta return + sta return+1 + //SEG176 slow_multiply::@1 + b1: + //SEG177 slow_multiply::@return + //SEG178 [89] return [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:20 [ multiply_results_compare::a#5 multiply_results_compare::b#2 line_cursor#17 char_cursor#20 slow_multiply::return#0 ] ) + rts +} +//SEG179 multiply_tables_compare +multiply_tables_compare: { + .label asm_sqr = $a + .label kc_sqr = 4 + //SEG180 [91] phi from multiply_tables_compare to multiply_tables_compare::@1 [phi:multiply_tables_compare->multiply_tables_compare::@1] + //SEG181 [91] phi (byte*) multiply_tables_compare::asm_sqr#2 = (const byte[512]) asm_mul_sqr1_lo#0 [phi:multiply_tables_compare->multiply_tables_compare::@1#0] -- pbuz1=pbuc1 + lda #asm_mul_sqr1_lo + sta asm_sqr+1 + //SEG182 [91] phi (byte*) multiply_tables_compare::kc_sqr#2 = (const byte[512]) mul_sqr1_lo#0 [phi:multiply_tables_compare->multiply_tables_compare::@1#1] -- pbuz1=pbuc1 + lda #mul_sqr1_lo + sta kc_sqr+1 + //SEG183 [91] phi from multiply_tables_compare::@2 to multiply_tables_compare::@1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1] + //SEG184 [91] phi (byte*) multiply_tables_compare::asm_sqr#2 = (byte*) multiply_tables_compare::asm_sqr#1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1#0] -- register_copy + //SEG185 [91] phi (byte*) multiply_tables_compare::kc_sqr#2 = (byte*) multiply_tables_compare::kc_sqr#1 [phi:multiply_tables_compare::@2->multiply_tables_compare::@1#1] -- register_copy + //SEG186 multiply_tables_compare::@1 + b1: + //SEG187 [92] if(*((byte*) multiply_tables_compare::kc_sqr#2)==*((byte*) multiply_tables_compare::asm_sqr#2)) goto multiply_tables_compare::@2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + ldy #0 + lda (kc_sqr),y + cmp (asm_sqr),y + beq b2 + //SEG188 multiply_tables_compare::@3 + //SEG189 [93] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) -- _deref_pbuc1=vbuc2 + lda #2 + sta BGCOL + //SEG190 [94] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#2 ] ) + //SEG191 [53] phi from multiply_tables_compare::@3 to print_str [phi:multiply_tables_compare::@3->print_str] + //SEG192 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@3->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG193 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str [phi:multiply_tables_compare::@3->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG194 multiply_tables_compare::@6 + //SEG195 [95] (word) print_word::w#0 ← ((word)) (byte*) multiply_tables_compare::asm_sqr#2 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#0 multiply_tables_compare::kc_sqr#2 ] ) -- vwuz1=_word_pbuz2 + lda asm_sqr + sta print_word.w + lda asm_sqr+1 + sta print_word.w+1 + //SEG196 [96] call print_word param-assignment [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 multiply_tables_compare::kc_sqr#2 ] ) + //SEG197 [60] phi from multiply_tables_compare::@6 to print_word [phi:multiply_tables_compare::@6->print_word] + //SEG198 [60] phi (word) print_word::w#4 = (word) print_word::w#0 [phi:multiply_tables_compare::@6->print_word#0] -- register_copy + jsr print_word + //SEG199 [97] phi from multiply_tables_compare::@6 to multiply_tables_compare::@7 [phi:multiply_tables_compare::@6->multiply_tables_compare::@7] + //SEG200 multiply_tables_compare::@7 + //SEG201 [98] call print_str param-assignment [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 multiply_tables_compare::kc_sqr#2 ] ) + //SEG202 [53] phi from multiply_tables_compare::@7 to print_str [phi:multiply_tables_compare::@7->print_str] + //SEG203 [53] phi (byte*) char_cursor#71 = (byte*) char_cursor#11 [phi:multiply_tables_compare::@7->print_str#0] -- register_copy + //SEG204 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str1 [phi:multiply_tables_compare::@7->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + //SEG205 multiply_tables_compare::@8 + //SEG206 [99] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#2 print_word::w#1 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 print_word::w#1 ] ) -- vwuz1=_word_pbuz2 + lda kc_sqr + sta print_word.w + lda kc_sqr+1 + sta print_word.w+1 + //SEG207 [100] call print_word param-assignment [ char_cursor#11 ] ( main:2::multiply_tables_compare:11 [ char_cursor#11 ] ) + //SEG208 [60] phi from multiply_tables_compare::@8 to print_word [phi:multiply_tables_compare::@8->print_word] + //SEG209 [60] phi (word) print_word::w#4 = (word) print_word::w#1 [phi:multiply_tables_compare::@8->print_word#0] -- register_copy + jsr print_word + //SEG210 [101] phi from multiply_tables_compare::@8 to multiply_tables_compare::@return [phi:multiply_tables_compare::@8->multiply_tables_compare::@return] + //SEG211 [101] phi (byte*) line_cursor#17 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@8->multiply_tables_compare::@return#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG212 [101] phi (byte*) char_cursor#20 = (byte*) char_cursor#11 [phi:multiply_tables_compare::@8->multiply_tables_compare::@return#1] -- register_copy + //SEG213 multiply_tables_compare::@return + breturn: + //SEG214 [102] return [ line_cursor#17 char_cursor#20 ] ( main:2::multiply_tables_compare:11 [ line_cursor#17 char_cursor#20 ] ) + rts + //SEG215 multiply_tables_compare::@2 + b2: + //SEG216 [103] (byte*) multiply_tables_compare::asm_sqr#1 ← ++ (byte*) multiply_tables_compare::asm_sqr#2 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 + inc asm_sqr + bne !+ + inc asm_sqr+1 + !: + //SEG217 [104] (byte*) multiply_tables_compare::kc_sqr#1 ← ++ (byte*) multiply_tables_compare::kc_sqr#2 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1=_inc_pbuz1 + inc kc_sqr + bne !+ + inc kc_sqr+1 + !: + //SEG218 [105] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) -- pbuz1_lt_pbuc1_then_la1 + lda kc_sqr+1 + cmp #>mul_sqr1_lo+$200*4 + bcc b1 + bne !+ + lda kc_sqr + cmp #multiply_tables_compare::@5] + //SEG220 multiply_tables_compare::@5 + //SEG221 [107] call print_str param-assignment [ char_cursor#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#2 ] ) + //SEG222 [53] phi from multiply_tables_compare::@5 to print_str [phi:multiply_tables_compare::@5->print_str] + //SEG223 [53] phi (byte*) char_cursor#71 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@5->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG224 [53] phi (byte*) print_str::str#9 = (const string) multiply_tables_compare::str2 [phi:multiply_tables_compare::@5->print_str#1] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + //SEG225 [108] phi from multiply_tables_compare::@5 to multiply_tables_compare::@10 [phi:multiply_tables_compare::@5->multiply_tables_compare::@10] + //SEG226 multiply_tables_compare::@10 + //SEG227 [109] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 ] ) + //SEG228 [48] phi from multiply_tables_compare::@10 to print_ln [phi:multiply_tables_compare::@10->print_ln] + //SEG229 [48] phi (byte*) line_cursor#22 = ((byte*))(word/signed word) 1024 [phi:multiply_tables_compare::@10->print_ln#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + jsr print_ln + //SEG230 [110] (byte*~) char_cursor#100 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#100 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#100 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG231 [101] phi from multiply_tables_compare::@10 to multiply_tables_compare::@return [phi:multiply_tables_compare::@10->multiply_tables_compare::@return] + //SEG232 [101] phi (byte*) line_cursor#17 = (byte*) line_cursor#1 [phi:multiply_tables_compare::@10->multiply_tables_compare::@return#0] -- register_copy + //SEG233 [101] phi (byte*) char_cursor#20 = (byte*~) char_cursor#100 [phi:multiply_tables_compare::@10->multiply_tables_compare::@return#1] -- register_copy + jmp breturn + str: .text "multiply table mismatch at @" + str1: .text " / @" + str2: .text "multiply tables match!@" +} +//SEG234 init_multiply_asm +init_multiply_asm: { + .const mem = $ff + //SEG235 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } + ldx #0 + txa + .byte $c9 + lb1: + tya + adc #0 + ml1: + sta asm_mul_sqr1_hi,x + tay + cmp #$40 + txa + ror + ml9: + adc #0 + sta ml9+1 + inx + ml0: + sta asm_mul_sqr1_lo,x + bne lb1 + inc ml0+2 + inc ml1+2 + clc + iny + bne lb1 + ldx #0 + ldy #$ff + !: + lda asm_mul_sqr1_hi+1,x + sta asm_mul_sqr2_hi+$100,x + lda asm_mul_sqr1_hi,x + sta asm_mul_sqr2_hi,y + lda asm_mul_sqr1_lo+1,x + sta asm_mul_sqr2_lo+$100,x + lda asm_mul_sqr1_lo,x + sta asm_mul_sqr2_lo,y + dey + inx + bne !- + //SEG236 [112] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr1_lo + sta mem + //SEG237 [113] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr1_hi + sta mem + //SEG238 [114] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr2_lo + sta mem + //SEG239 [115] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) -- _deref_pbuc1=_deref_pbuc2 + lda asm_mul_sqr2_hi + sta mem + //SEG240 init_multiply_asm::@return + //SEG241 [116] return [ ] ( main:2::init_multiply_asm:9 [ ] ) + rts +} +//SEG242 init_multiply +init_multiply: { + .label sqr1_hi = 6 + .label sqr = 8 + .label sqr1_lo = 4 + .label x_2 = 2 + .label sqr2_hi = 6 + .label sqr2_lo = 4 + .label dir = 2 + //SEG243 [118] phi from init_multiply to init_multiply::@1 [phi:init_multiply->init_multiply::@1] + //SEG244 [118] phi (byte) init_multiply::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#0] -- vbuz1=vbuc1 + lda #0 + sta x_2 + //SEG245 [118] phi (byte*) init_multiply::sqr1_hi#2 = (const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_multiply->init_multiply::@1#1] -- pbuz1=pbuc1 + lda #mul_sqr1_hi+1 + sta sqr1_hi+1 + //SEG246 [118] phi (byte*) init_multiply::sqr1_lo#2 = (const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_multiply->init_multiply::@1#2] -- pbuz1=pbuc1 + lda #mul_sqr1_lo+1 + sta sqr1_lo+1 + //SEG247 [118] phi (word) init_multiply::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#3] -- vwuz1=vbuc1 + lda #0 + sta sqr + sta sqr+1 + //SEG248 [118] phi (byte) init_multiply::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_multiply->init_multiply::@1#4] -- vbuxx=vbuc1 + tax + //SEG249 [118] phi from init_multiply::@2 to init_multiply::@1 [phi:init_multiply::@2->init_multiply::@1] + //SEG250 [118] phi (byte) init_multiply::x_2#3 = (byte) init_multiply::x_2#2 [phi:init_multiply::@2->init_multiply::@1#0] -- register_copy + //SEG251 [118] phi (byte*) init_multiply::sqr1_hi#2 = (byte*) init_multiply::sqr1_hi#1 [phi:init_multiply::@2->init_multiply::@1#1] -- register_copy + //SEG252 [118] phi (byte*) init_multiply::sqr1_lo#2 = (byte*) init_multiply::sqr1_lo#1 [phi:init_multiply::@2->init_multiply::@1#2] -- register_copy + //SEG253 [118] phi (word) init_multiply::sqr#4 = (word) init_multiply::sqr#1 [phi:init_multiply::@2->init_multiply::@1#3] -- register_copy + //SEG254 [118] phi (byte) init_multiply::c#2 = (byte) init_multiply::c#1 [phi:init_multiply::@2->init_multiply::@1#4] -- register_copy + //SEG255 init_multiply::@1 + b1: + //SEG256 [119] (byte) init_multiply::c#1 ← ++ (byte) init_multiply::c#2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG257 [120] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word) 1 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 init_multiply::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + //SEG258 [121] if((byte~) init_multiply::$2!=(byte/signed byte/word/signed word) 0) goto init_multiply::@2 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::x_2#3 init_multiply::c#1 ] ) -- vbuaa_neq_0_then_la1 + cmp #0 + bne b2 + //SEG259 init_multiply::@5 + //SEG260 [122] (byte) init_multiply::x_2#1 ← ++ (byte) init_multiply::x_2#3 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr#4 init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 ] ) -- vbuz1=_inc_vbuz1 + inc x_2 + //SEG261 [123] (word) init_multiply::sqr#2 ← ++ (word) init_multiply::sqr#4 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#1 init_multiply::sqr#2 ] ) -- vwuz1=_inc_vwuz1 + inc sqr + bne !+ + inc sqr+1 + !: + //SEG262 [124] phi from init_multiply::@1 init_multiply::@5 to init_multiply::@2 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2] + //SEG263 [124] phi (byte) init_multiply::x_2#2 = (byte) init_multiply::x_2#3 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2#0] -- register_copy + //SEG264 [124] phi (word) init_multiply::sqr#3 = (word) init_multiply::sqr#4 [phi:init_multiply::@1/init_multiply::@5->init_multiply::@2#1] -- register_copy + //SEG265 init_multiply::@2 + b2: + //SEG266 [125] (byte~) init_multiply::$5 ← < (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$5 ] ) -- vbuaa=_lo_vwuz1 + lda sqr + //SEG267 [126] *((byte*) init_multiply::sqr1_lo#2) ← (byte~) init_multiply::$5 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (sqr1_lo),y + //SEG268 [127] (byte~) init_multiply::$6 ← > (word) init_multiply::sqr#3 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 init_multiply::$6 ] ) -- vbuaa=_hi_vwuz1 + lda sqr+1 + //SEG269 [128] *((byte*) init_multiply::sqr1_hi#2) ← (byte~) init_multiply::$6 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_hi#2 init_multiply::c#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- _deref_pbuz1=vbuaa + sta (sqr1_hi),y + //SEG270 [129] (byte*) init_multiply::sqr1_hi#1 ← ++ (byte*) init_multiply::sqr1_hi#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 init_multiply::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + inc sqr1_hi + bne !+ + inc sqr1_hi+1 + !: + //SEG271 [130] (word) init_multiply::sqr#1 ← (word) init_multiply::sqr#3 + (byte) init_multiply::x_2#2 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::sqr1_lo#2 init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda x_2 + clc + adc sqr + sta sqr + bcc !+ + inc sqr+1 + !: + //SEG272 [131] (byte*) init_multiply::sqr1_lo#1 ← ++ (byte*) init_multiply::sqr1_lo#2 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- pbuz1=_inc_pbuz1 + inc sqr1_lo + bne !+ + inc sqr1_lo+1 + !: + //SEG273 [132] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512) goto init_multiply::@1 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ( main:2::init_multiply:7 [ init_multiply::c#1 init_multiply::sqr#1 init_multiply::sqr1_lo#1 init_multiply::sqr1_hi#1 init_multiply::x_2#2 ] ) -- pbuz1_neq_pbuc1_then_la1 + lda sqr1_lo+1 + cmp #>mul_sqr1_lo+$200 + bne b1 + lda sqr1_lo + cmp #init_multiply::@3] + //SEG275 [133] phi (byte) init_multiply::dir#2 = (byte/word/signed word) 255 [phi:init_multiply::@2->init_multiply::@3#0] -- vbuz1=vbuc1 + lda #$ff + sta dir + //SEG276 [133] phi (byte*) init_multiply::sqr2_hi#2 = (const byte[512]) mul_sqr2_hi#0 [phi:init_multiply::@2->init_multiply::@3#1] -- pbuz1=pbuc1 + lda #mul_sqr2_hi + sta sqr2_hi+1 + //SEG277 [133] phi (byte*) init_multiply::sqr2_lo#2 = (const byte[512]) mul_sqr2_lo#0 [phi:init_multiply::@2->init_multiply::@3#2] -- pbuz1=pbuc1 + lda #mul_sqr2_lo + sta sqr2_lo+1 + //SEG278 [133] phi (byte) init_multiply::x_255#2 = ((byte))-(byte/signed byte/word/signed word) 1 [phi:init_multiply::@2->init_multiply::@3#3] -- vbuxx=vbuc1 + ldx #-1 + //SEG279 [133] phi from init_multiply::@4 to init_multiply::@3 [phi:init_multiply::@4->init_multiply::@3] + //SEG280 [133] phi (byte) init_multiply::dir#2 = (byte) init_multiply::dir#3 [phi:init_multiply::@4->init_multiply::@3#0] -- register_copy + //SEG281 [133] phi (byte*) init_multiply::sqr2_hi#2 = (byte*) init_multiply::sqr2_hi#1 [phi:init_multiply::@4->init_multiply::@3#1] -- register_copy + //SEG282 [133] phi (byte*) init_multiply::sqr2_lo#2 = (byte*) init_multiply::sqr2_lo#1 [phi:init_multiply::@4->init_multiply::@3#2] -- register_copy + //SEG283 [133] phi (byte) init_multiply::x_255#2 = (byte) init_multiply::x_255#1 [phi:init_multiply::@4->init_multiply::@3#3] -- register_copy + //SEG284 init_multiply::@3 + b3: + //SEG285 [134] *((byte*) init_multiply::sqr2_lo#2) ← *((const byte[512]) mul_sqr1_lo#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + lda mul_sqr1_lo,x + ldy #0 + sta (sqr2_lo),y + //SEG286 [135] *((byte*) init_multiply::sqr2_hi#2) ← *((const byte[512]) mul_sqr1_hi#0 + (byte) init_multiply::x_255#2) [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::sqr2_hi#2 init_multiply::dir#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + lda mul_sqr1_hi,x + sta (sqr2_hi),y + //SEG287 [136] (byte*) init_multiply::sqr2_hi#1 ← ++ (byte*) init_multiply::sqr2_hi#2 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::x_255#2 init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::sqr2_hi#1 ] ) -- pbuz1=_inc_pbuz1 + inc sqr2_hi + bne !+ + inc sqr2_hi+1 + !: + //SEG288 [137] (byte) init_multiply::x_255#1 ← (byte) init_multiply::x_255#2 + (byte) init_multiply::dir#2 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) -- vbuxx=vbuxx_plus_vbuz1 + txa + clc + adc dir + tax + //SEG289 [138] if((byte) init_multiply::x_255#1!=(byte/signed byte/word/signed word) 0) goto init_multiply::@12 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ( main:2::init_multiply:7 [ init_multiply::sqr2_lo#2 init_multiply::dir#2 init_multiply::x_255#1 init_multiply::sqr2_hi#1 ] ) -- vbuxx_neq_0_then_la1 + cpx #0 + bne b4 + //SEG290 [139] phi from init_multiply::@3 to init_multiply::@4 [phi:init_multiply::@3->init_multiply::@4] + //SEG291 [139] phi (byte) init_multiply::dir#3 = (byte/signed byte/word/signed word) 1 [phi:init_multiply::@3->init_multiply::@4#0] -- vbuz1=vbuc1 + lda #1 + sta dir + //SEG292 init_multiply::@4 + b4: + //SEG293 [140] (byte*) init_multiply::sqr2_lo#1 ← ++ (byte*) init_multiply::sqr2_lo#2 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) -- pbuz1=_inc_pbuz1 + inc sqr2_lo + bne !+ + inc sqr2_lo+1 + !: + //SEG294 [141] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word) 511) goto init_multiply::@3 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ( main:2::init_multiply:7 [ init_multiply::x_255#1 init_multiply::sqr2_lo#1 init_multiply::sqr2_hi#1 init_multiply::dir#3 ] ) -- pbuz1_neq_pbuc1_then_la1 + lda sqr2_lo+1 + cmp #>mul_sqr2_lo+$1ff + bne b3 + lda sqr2_lo + cmp #init_multiply::@12] + //SEG301 init_multiply::@12 + //SEG302 [139] phi from init_multiply::@12 to init_multiply::@4 [phi:init_multiply::@12->init_multiply::@4] + //SEG303 [139] phi (byte) init_multiply::dir#3 = (byte) init_multiply::dir#2 [phi:init_multiply::@12->init_multiply::@4#0] -- register_copy +} +//SEG304 print_cls +print_cls: { + .label sc = 4 + //SEG305 [147] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + //SEG306 [147] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + //SEG307 [147] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + //SEG308 [147] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + //SEG309 print_cls::@1 + b1: + //SEG310 [148] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + ldy #0 + lda #' ' + sta (sc),y + //SEG311 [149] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG312 [150] if((byte*) print_cls::sc#1!=(word/signed word) 1024+(word/signed word) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1 + lda sc + cmp #<$400+$3e8 + bne b1 + //SEG313 print_cls::@return + //SEG314 [151] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + .align $100 + mul_sqr1_lo: .fill $200, 0 + .align $100 + mul_sqr1_hi: .fill $200, 0 + .align $100 + mul_sqr2_lo: .fill $200, 0 + .align $100 + mul_sqr2_hi: .fill $200, 0 + .align $100 + asm_mul_sqr1_lo: .fill $200, 0 + .align $100 + asm_mul_sqr1_hi: .fill $200, 0 + .align $100 + asm_mul_sqr2_lo: .fill $200, 0 + .align $100 + asm_mul_sqr2_hi: .fill $200, 0 + diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.sym b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.sym new file mode 100644 index 000000000..c7ed18235 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.sym @@ -0,0 +1,230 @@ +(label) @13 +(label) @begin +(label) @end +(byte*) BGCOL +(const byte*) BGCOL#0 BGCOL = ((byte*))(word) 53281 +(byte[512]) asm_mul_sqr1_hi +(const byte[512]) asm_mul_sqr1_hi#0 asm_mul_sqr1_hi = { fill( 512, 0) } +(byte[512]) asm_mul_sqr1_lo +(const byte[512]) asm_mul_sqr1_lo#0 asm_mul_sqr1_lo = { fill( 512, 0) } +(byte[512]) asm_mul_sqr2_hi +(const byte[512]) asm_mul_sqr2_hi#0 asm_mul_sqr2_hi = { fill( 512, 0) } +(byte[512]) asm_mul_sqr2_lo +(const byte[512]) asm_mul_sqr2_lo#0 asm_mul_sqr2_lo = { fill( 512, 0) } +(byte*) char_cursor +(byte*) char_cursor#1 char_cursor zp ZP_WORD:8 11.0 +(byte*~) char_cursor#100 char_cursor zp ZP_WORD:8 4.0 +(byte*) char_cursor#11 char_cursor zp ZP_WORD:8 0.823529411764706 +(byte*) char_cursor#2 char_cursor zp ZP_WORD:8 2.1818181818181817 +(byte*) char_cursor#20 char_cursor zp ZP_WORD:8 0.3333333333333333 +(byte*) char_cursor#27 char_cursor zp ZP_WORD:8 40.0 +(byte*) char_cursor#41 char_cursor zp ZP_WORD:8 4.0 +(byte*) char_cursor#64 char_cursor zp ZP_WORD:8 2.0 +(byte*) char_cursor#71 char_cursor zp ZP_WORD:8 10.0 +(byte*~) char_cursor#89 char_cursor zp ZP_WORD:8 4.0 +(void()) init_multiply() +(byte~) init_multiply::$2 reg byte a 22.0 +(byte~) init_multiply::$5 reg byte a 22.0 +(byte~) init_multiply::$6 reg byte a 22.0 +(label) init_multiply::@1 +(label) init_multiply::@12 +(label) init_multiply::@2 +(label) init_multiply::@3 +(label) init_multiply::@4 +(label) init_multiply::@5 +(label) init_multiply::@8 +(label) init_multiply::@return +(byte) init_multiply::c +(byte) init_multiply::c#1 reg byte x 2.357142857142857 +(byte) init_multiply::c#2 reg byte x 22.0 +(byte) init_multiply::dir +(byte) init_multiply::dir#2 dir zp ZP_BYTE:2 4.714285714285714 +(byte) init_multiply::dir#3 dir zp ZP_BYTE:2 7.333333333333333 +(word) init_multiply::sqr +(word) init_multiply::sqr#1 sqr zp ZP_WORD:8 7.333333333333333 +(word) init_multiply::sqr#2 sqr zp ZP_WORD:8 22.0 +(word) init_multiply::sqr#3 sqr zp ZP_WORD:8 9.166666666666666 +(word) init_multiply::sqr#4 sqr zp ZP_WORD:8 6.6000000000000005 +(byte*) init_multiply::sqr1_hi +(byte*) init_multiply::sqr1_hi#1 sqr1_hi zp ZP_WORD:6 5.5 +(byte*) init_multiply::sqr1_hi#2 sqr1_hi zp ZP_WORD:6 3.0 +(byte*) init_multiply::sqr1_lo +(byte*) init_multiply::sqr1_lo#1 sqr1_lo zp ZP_WORD:4 16.5 +(byte*) init_multiply::sqr1_lo#2 sqr1_lo zp ZP_WORD:4 2.5384615384615383 +(byte*) init_multiply::sqr2_hi +(byte*) init_multiply::sqr2_hi#1 sqr2_hi zp ZP_WORD:6 3.142857142857143 +(byte*) init_multiply::sqr2_hi#2 sqr2_hi zp ZP_WORD:6 11.0 +(byte*) init_multiply::sqr2_lo +(byte*) init_multiply::sqr2_lo#1 sqr2_lo zp ZP_WORD:4 16.5 +(byte*) init_multiply::sqr2_lo#2 sqr2_lo zp ZP_WORD:4 4.125 +(byte) init_multiply::x_2 +(byte) init_multiply::x_2#1 x_2 zp ZP_BYTE:2 11.0 +(byte) init_multiply::x_2#2 x_2 zp ZP_BYTE:2 4.888888888888889 +(byte) init_multiply::x_2#3 x_2 zp ZP_BYTE:2 8.25 +(byte) init_multiply::x_255 +(byte) init_multiply::x_255#1 reg byte x 5.5 +(byte) init_multiply::x_255#2 reg byte x 11.0 +(void()) init_multiply_asm() +(label) init_multiply_asm::@return +(byte*) init_multiply_asm::mem +(const byte*) init_multiply_asm::mem#0 mem = ((byte*))(byte/word/signed word) 255 +(byte*) line_cursor +(byte*) line_cursor#1 line_cursor zp ZP_WORD:4 5.857142857142857 +(byte*) line_cursor#11 line_cursor zp ZP_WORD:4 24.0 +(byte*) line_cursor#17 line_cursor zp ZP_WORD:4 0.18181818181818182 +(byte*) line_cursor#19 line_cursor zp ZP_WORD:4 40.0 +(byte*) line_cursor#22 line_cursor zp ZP_WORD:4 4.0 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return +(byte[512]) mul_sqr1_hi +(const byte[512]) mul_sqr1_hi#0 mul_sqr1_hi = { fill( 512, 0) } +(byte[512]) mul_sqr1_lo +(const byte[512]) mul_sqr1_lo#0 mul_sqr1_lo = { fill( 512, 0) } +(byte[512]) mul_sqr2_hi +(const byte[512]) mul_sqr2_hi#0 mul_sqr2_hi = { fill( 512, 0) } +(byte[512]) mul_sqr2_lo +(const byte[512]) mul_sqr2_lo#0 mul_sqr2_lo = { fill( 512, 0) } +(word()) multiply((byte) multiply::a , (byte) multiply::b) +(label) multiply::@return +(byte) multiply::a +(byte) multiply::a#0 reg byte x 51.5 +(byte) multiply::b +(byte) multiply::b#0 reg byte a 51.5 +(byte*) multiply::memA +(const byte*) multiply::memA#0 memA = ((byte*))(byte/word/signed word) 254 +(byte*) multiply::memB +(const byte*) multiply::memB#0 memB = ((byte*))(byte/word/signed word) 255 +(word) multiply::return +(word) multiply::return#0 return zp ZP_WORD:6 34.33333333333333 +(word) multiply::return#2 return zp ZP_WORD:6 202.0 +(void()) multiply_results_compare() +(label) multiply_results_compare::@1 +(label) multiply_results_compare::@10 +(label) multiply_results_compare::@11 +(label) multiply_results_compare::@12 +(label) multiply_results_compare::@14 +(label) multiply_results_compare::@2 +(label) multiply_results_compare::@3 +(label) multiply_results_compare::@4 +(label) multiply_results_compare::@6 +(label) multiply_results_compare::@7 +(label) multiply_results_compare::@8 +(label) multiply_results_compare::@9 +(label) multiply_results_compare::@return +(byte) multiply_results_compare::a +(byte) multiply_results_compare::a#1 a zp ZP_BYTE:2 16.5 +(byte) multiply_results_compare::a#5 a zp ZP_BYTE:2 14.933333333333332 +(byte) multiply_results_compare::b +(byte) multiply_results_compare::b#1 b zp ZP_BYTE:3 151.5 +(byte) multiply_results_compare::b#2 b zp ZP_BYTE:3 33.666666666666664 +(word) multiply_results_compare::ma +(word) multiply_results_compare::ma#0 ma zp ZP_WORD:12 25.5 +(word) multiply_results_compare::ms +(word) multiply_results_compare::ms#0 ms zp ZP_WORD:10 22.666666666666664 +(const string) multiply_results_compare::str str = (string) "multiply mismatch slow:@" +(const string) multiply_results_compare::str1 str1 = (string) " / fast asm:" +(const string) multiply_results_compare::str2 str2 = (string) "multiply results match!@" +(void()) multiply_tables_compare() +(label) multiply_tables_compare::@1 +(label) multiply_tables_compare::@10 +(label) multiply_tables_compare::@2 +(label) multiply_tables_compare::@3 +(label) multiply_tables_compare::@5 +(label) multiply_tables_compare::@6 +(label) multiply_tables_compare::@7 +(label) multiply_tables_compare::@8 +(label) multiply_tables_compare::@return +(byte*) multiply_tables_compare::asm_sqr +(byte*) multiply_tables_compare::asm_sqr#1 asm_sqr zp ZP_WORD:10 7.333333333333333 +(byte*) multiply_tables_compare::asm_sqr#2 asm_sqr zp ZP_WORD:10 8.75 +(byte*) multiply_tables_compare::kc_sqr +(byte*) multiply_tables_compare::kc_sqr#1 kc_sqr zp ZP_WORD:4 16.5 +(byte*) multiply_tables_compare::kc_sqr#2 kc_sqr zp ZP_WORD:4 3.8888888888888893 +(const string) multiply_tables_compare::str str = (string) "multiply table mismatch at @" +(const string) multiply_tables_compare::str1 str1 = (string) " / @" +(const string) multiply_tables_compare::str2 str2 = (string) "multiply tables match!@" +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte y 4.0 +(byte~) print_byte::$2 reg byte a 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 reg byte x 4.0 +(byte) print_byte::b#1 reg byte x 4.0 +(byte) print_byte::b#2 reg byte x 2.0 +(byte[]) print_byte::hextab +(const byte[]) print_byte::hextab#0 hextab = { (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' } +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 reg byte a 4.0 +(byte) print_char::ch#1 reg byte a 4.0 +(byte) print_char::ch#2 reg byte a 6.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:4 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:4 16.5 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_str((byte*) print_str::str) +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 str zp ZP_WORD:6 22.0 +(byte*) print_str::str#7 str zp ZP_WORD:6 11.5 +(byte*) print_str::str#9 str zp ZP_WORD:6 2.0 +(void()) print_word((word) print_word::w) +(label) print_word::@1 +(label) print_word::@return +(word) print_word::w +(word) print_word::w#0 w zp ZP_WORD:6 4.0 +(word) print_word::w#1 w zp ZP_WORD:6 4.0 +(word) print_word::w#2 w zp ZP_WORD:6 4.0 +(word) print_word::w#3 w zp ZP_WORD:6 4.0 +(word) print_word::w#4 w zp ZP_WORD:6 3.9999999999999996 +(word()) slow_multiply((byte) slow_multiply::a , (byte) slow_multiply::b) +(label) slow_multiply::@1 +(label) slow_multiply::@2 +(label) slow_multiply::@return +(byte) slow_multiply::a +(byte) slow_multiply::a#0 a zp ZP_BYTE:2 157.71428571428572 +(byte) slow_multiply::b +(byte) slow_multiply::b#0 reg byte x 183.66666666666669 +(byte) slow_multiply::i +(byte) slow_multiply::i#1 reg byte y 1501.5 +(byte) slow_multiply::i#2 reg byte y 1001.0 +(word) slow_multiply::m +(word) slow_multiply::m#1 m zp ZP_WORD:6 1001.0 +(word) slow_multiply::m#3 m zp ZP_WORD:6 2002.0 +(word) slow_multiply::return +(word) slow_multiply::return#0 return zp ZP_WORD:6 367.33333333333337 +(word) slow_multiply::return#2 return zp ZP_WORD:6 202.0 + +zp ZP_BYTE:2 [ multiply_results_compare::a#5 multiply_results_compare::a#1 init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 init_multiply::dir#2 init_multiply::dir#3 slow_multiply::a#0 ] +zp ZP_BYTE:3 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] +zp ZP_WORD:4 [ line_cursor#11 line_cursor#22 line_cursor#19 line_cursor#17 line_cursor#1 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_WORD:6 [ print_str::str#7 print_str::str#9 print_str::str#0 print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 slow_multiply::return#2 multiply::return#2 multiply::return#0 ] +reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +zp ZP_WORD:8 [ char_cursor#41 char_cursor#64 char_cursor#2 char_cursor#71 char_cursor#27 char_cursor#11 char_cursor#89 char_cursor#20 char_cursor#1 char_cursor#100 init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] +reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] +zp ZP_WORD:10 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 multiply_results_compare::ms#0 ] +reg byte x [ init_multiply::c#2 init_multiply::c#1 ] +reg byte x [ init_multiply::x_255#2 init_multiply::x_255#1 ] +reg byte x [ slow_multiply::b#0 ] +reg byte x [ multiply::a#0 ] +reg byte a [ multiply::b#0 ] +zp ZP_WORD:12 [ multiply_results_compare::ma#0 ] +reg byte y [ print_byte::$0 ] +reg byte a [ print_byte::$2 ] +reg byte a [ init_multiply::$2 ] +reg byte a [ init_multiply::$5 ] +reg byte a [ init_multiply::$6 ] diff --git a/src/test/java/dk/camelot64/kickc/test/test-multiply.kc b/src/test/java/dk/camelot64/kickc/test/test-multiply.kc new file mode 100644 index 000000000..b4e4ba23b --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/test-multiply.kc @@ -0,0 +1,127 @@ +// 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 + +import "print.kc" +import "multiply.kc" + +byte* BGCOL = $d021; + +void main() { + *BGCOL = 5; + print_cls(); + init_multiply(); + init_multiply_asm(); + multiply_tables_compare(); + multiply_results_compare(); +} + +// Perform a slow multiplication by repeated addition +word slow_multiply(byte a, byte b) { + word m = 0; + if(a>0) { + for(byte i = 0; i!=a; i++) { + m = m + b; + } + } + return m; +} + +// ASM based multiplication tables +// <(( x * x )/4) +byte[512] align($100) asm_mul_sqr1_lo; +// >(( x * x )/4) +byte[512] align($100) asm_mul_sqr1_hi; +// <((( x - 255) * ( x - 255 ))/4) +byte[512] align($100) asm_mul_sqr2_lo; +// >((( x - 255) * ( x - 255 ))/4) +byte[512] align($100) asm_mul_sqr2_hi; +// Initialize the multiplication tables using ASM code from +// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication +void init_multiply_asm() { + asm{ + ldx #$00 + txa + .byte $c9 + lb1: + tya + adc #$00 + ml1: + sta asm_mul_sqr1_hi,x + tay + cmp #$40 + txa + ror + ml9: + adc #$00 + sta ml9+1 + inx + ml0: + sta asm_mul_sqr1_lo,x + bne lb1 + inc ml0+2 + inc ml1+2 + clc + iny + bne lb1 + ldx #$00 + ldy #$ff + !: + lda asm_mul_sqr1_hi+1,x + sta asm_mul_sqr2_hi+$100,x + lda asm_mul_sqr1_hi,x + sta asm_mul_sqr2_hi,y + lda asm_mul_sqr1_lo+1,x + sta asm_mul_sqr2_lo+$100,x + lda asm_mul_sqr1_lo,x + sta asm_mul_sqr2_lo,y + dey + inx + bne !- + } + // Ensure the ASM tables are not detected as unused by the optimizer + byte* mem = $ff; + *mem = *asm_mul_sqr1_lo; + *mem = *asm_mul_sqr1_hi; + *mem = *asm_mul_sqr2_lo; + *mem = *asm_mul_sqr2_hi; +} + +// Compare the ASM-based mul tables with the KC-based mul tables +// Red screen on failure - green on success +void multiply_tables_compare() { + byte* asm_sqr = asm_mul_sqr1_lo; + for( byte* kc_sqr=mul_sqr1_lo; kc_sqr