1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Moved multiply into a library

This commit is contained in:
jespergravgaard 2017-12-29 22:45:19 +01:00
parent df227e0b49
commit b95c7e20f5
10 changed files with 7819 additions and 7811 deletions

View File

@ -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 {

View File

@ -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).
// <f(x) = <(( x * x )/4)
byte[512] align($100) mul_sqr1_lo;
@ -37,7 +13,7 @@ byte[512] align($100) mul_sqr2_lo;
byte[512] align($100) mul_sqr2_hi;
// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4)
void init_mul_tables() {
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
@ -70,68 +46,8 @@ void init_mul_tables() {
*(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) {
// 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<mul_sqr1_lo+512*4; kc_sqr++) {
if(*kc_sqr != *asm_sqr) {
*BGCOL = 2;
print_str("multiply table mismatch at @");
print_word((word)asm_sqr);
print_str(" / @");
print_word((word)kc_sqr);
return;
}
asm_sqr++;
}
print_str("multiply tables match!@");
print_ln();
}
// Perform all possible byte-multiplications (slow and ASM) and compare the results
void mul_results_compare() {
for(byte a: 0..255) {
for(byte b: 0..255) {
word ms = slow_multiply(a, b);
word ma = asm_multiply(a,b);
if(ms!=ma) {
*BGCOL = 2;
print_str("multiply mismatch slow:@");
print_word(ms);
print_str(" / fast asm:");
print_word(ma);
return;
}
}
}
print_str("multiply results match!@");
print_ln();
}

View File

@ -1,303 +0,0 @@
@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

File diff suppressed because it is too large Load Diff

View File

@ -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 ]

View File

@ -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 #<asm_mul_sqr1_lo
@ -317,7 +317,7 @@ mul_tables_compare: {
str1: .text " / @"
str2: .text "multiply tables match!@"
}
init_mul_tables_asm: {
init_multiply_asm: {
.const mem = $ff
ldx #0
txa
@ -367,7 +367,7 @@ init_mul_tables_asm: {
sta mem
rts
}
init_mul_tables: {
init_multiply: {
.label sqr1_hi = 6
.label sqr = 8
.label sqr1_lo = 4

View File

@ -0,0 +1,303 @@
@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

File diff suppressed because it is too large Load Diff

View File

@ -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 ]

View File

@ -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<mul_sqr1_lo+512*4; kc_sqr++) {
if(*kc_sqr != *asm_sqr) {
*BGCOL = 2;
print_str("multiply table mismatch at @");
print_word((word)asm_sqr);
print_str(" / @");
print_word((word)kc_sqr);
return;
}
asm_sqr++;
}
print_str("multiply tables match!@");
print_ln();
}
// Perform all possible byte-multiplications (slow and ASM) and compare the results
void multiply_results_compare() {
for(byte a: 0..255) {
for(byte b: 0..255) {
word ms = slow_multiply(a, b);
word ma = multiply(a,b);
if(ms!=ma) {
*BGCOL = 2;
print_str("multiply mismatch slow:@");
print_word(ms);
print_str(" / fast asm:");
print_word(ma);
return;
}
}
}
print_str("multiply results match!@");
print_ln();
}