1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-06 13:31:05 +00:00

Renamed multiply.kc to fastmultiply.kc - and methods multiply()/signed_multiply() to mulf8u(), mulf8s()

This commit is contained in:
Jesper Gravgaard 2018-02-14 10:05:18 +01:00
parent 7900c846c9
commit a6f32bea13
6 changed files with 3660 additions and 3662 deletions

View File

@ -2,24 +2,24 @@
// See http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2
// mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
// mulf_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;
byte[512] align($100) mulf_sqr1_lo;
// >f(x) = >(( x * x )/4)
byte[512] align($100) mul_sqr1_hi;
byte[512] align($100) mulf_sqr1_hi;
// <g(x) = <((( x - 255) * ( x - 255 ))/4)
byte[512] align($100) mul_sqr2_lo;
byte[512] align($100) mulf_sqr2_lo;
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
byte[512] align($100) mul_sqr2_hi;
byte[512] align($100) mulf_sqr2_hi;
// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4)
void init_multiply() {
// Fill mul_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4
// Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4)
void mulf_init() {
// Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4
word sqr = 0; // sqr = (x*x)/4
byte x_2 = 0; // x/2
byte c = 0; // Counter used for determining x%2==0
byte* sqr1_hi = mul_sqr1_hi+1;
for(byte* sqr1_lo = mul_sqr1_lo+1; sqr1_lo!=mul_sqr1_lo+512; sqr1_lo++) {
byte* sqr1_hi = mulf_sqr1_hi+1;
for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) {
if((++c&1)==0) {
x_2++; // increase i/2 on even numbers
sqr++; // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number)
@ -28,27 +28,27 @@ void init_multiply() {
*sqr1_hi++ = >sqr;
sqr = sqr + x_2; // sqr = sqr + i/2 (when uneven the 1/2 is not added here - see above)
}
// Fill mul_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x)
// Fill mulf_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x)
// g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256)
byte x_255 = (byte)-1; //Start with g(0)=f(255)
byte dir = $ff; // Decrease or increase x_255 - initially we decrease
byte* sqr2_hi = mul_sqr2_hi;
for(byte* sqr2_lo = mul_sqr2_lo; sqr2_lo!=mul_sqr2_lo+511; sqr2_lo++) {
*sqr2_lo = mul_sqr1_lo[x_255];
*sqr2_hi++ = mul_sqr1_hi[x_255];
byte* sqr2_hi = mulf_sqr2_hi;
for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) {
*sqr2_lo = mulf_sqr1_lo[x_255];
*sqr2_hi++ = mulf_sqr1_hi[x_255];
x_255 = x_255 + dir;
if(x_255==0) {
dir = 1; // when x_255=0 then start counting up
}
}
// Set the very last value g(511) = f(256)
*(mul_sqr2_lo+511) = *(mul_sqr1_lo+256);
*(mul_sqr2_hi+511) = *(mul_sqr1_hi+256);
*(mulf_sqr2_lo+511) = *(mulf_sqr1_lo+256);
*(mulf_sqr2_hi+511) = *(mulf_sqr1_hi+256);
}
// Fast multiply two unsigned bytes to a word result
// Done in assembler to utilize fast addition A+X
word multiply(byte a, byte b) {
word mulf8u(byte a, byte b) {
const byte* memA = $fe;
const byte* memB = $ff;
*memA = a;
@ -63,14 +63,14 @@ word multiply(byte a, byte b) {
ldx memB
sec
sm1:
lda mul_sqr1_lo,x
lda mulf_sqr1_lo,x
sm2:
sbc mul_sqr2_lo,x
sbc mulf_sqr2_lo,x
sta memA
sm3:
lda mul_sqr1_hi,x
lda mulf_sqr1_hi,x
sm4:
sbc mul_sqr2_hi,x
sbc mulf_sqr2_hi,x
sta memB
}
return { *memB, *memA };
@ -78,8 +78,8 @@ word multiply(byte a, byte b) {
// Fast multiply of two signed bytes to a signed word
// Fixes offsets introduced by using unsigned multiplication
signed word signed_multiply(signed byte a, signed byte b) {
word m = multiply((byte)a, (byte) b);
signed word mulf8s(signed byte a, signed byte b) {
word m = mulf8u((byte)a, (byte) b);
if(a<0) {
>m = (>m)-(byte)b;
}

View File

@ -1,21 +1,22 @@
// Test the fast multiplication library
import "print.kc"
import "multiply.kc"
import "fastmultiply.kc"
byte* BGCOL = $d021;
void main() {
*BGCOL = 5;
print_cls();
init_multiply();
init_multiply_asm();
mulf_init();
mulf_init_asm();
multiply_tables_compare();
multiply_results_compare();
signed_multiply_results_compare();
}
// Slow multiplication of unsigned bytes
// Calculate an unsigned multiplication by repeated addition
word slow_multiply(byte a, byte b) {
word muls8u(byte a, byte b) {
word m = 0;
if(a!=0) {
for(byte i = 0; i!=a; i++) {
@ -25,8 +26,9 @@ word slow_multiply(byte a, byte b) {
return m;
}
// Slow multiplication of signed bytes
// Perform a signed multiplication by repeated addition/
signed word slow_signed_multiply(signed byte a, signed byte b) {
signed word muls8s(signed byte a, signed byte b) {
signed word m = 0;
if(a<0) {
for(signed byte i = 0; i!=a; i--) {
@ -42,16 +44,16 @@ signed word slow_signed_multiply(signed byte a, signed byte b) {
// ASM based multiplication tables
// <(( x * x )/4)
byte[512] align($100) asm_mul_sqr1_lo;
byte[512] align($100) mula_sqr1_lo;
// >(( x * x )/4)
byte[512] align($100) asm_mul_sqr1_hi;
byte[512] align($100) mula_sqr1_hi;
// <((( x - 255) * ( x - 255 ))/4)
byte[512] align($100) asm_mul_sqr2_lo;
byte[512] align($100) mula_sqr2_lo;
// >((( x - 255) * ( x - 255 ))/4)
byte[512] align($100) asm_mul_sqr2_hi;
byte[512] align($100) mula_sqr2_hi;
// Initialize the multiplication tables using ASM code from
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
void init_multiply_asm() {
void mulf_init_asm() {
asm{
ldx #$00
txa
@ -60,7 +62,7 @@ void init_multiply_asm() {
tya
adc #$00
ml1:
sta asm_mul_sqr1_hi,x
sta mula_sqr1_hi,x
tay
cmp #$40
txa
@ -70,7 +72,7 @@ void init_multiply_asm() {
sta ml9+1
inx
ml0:
sta asm_mul_sqr1_lo,x
sta mula_sqr1_lo,x
bne lb1
inc ml0+2
inc ml1+2
@ -80,31 +82,31 @@ void init_multiply_asm() {
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
lda mula_sqr1_hi+1,x
sta mula_sqr2_hi+$100,x
lda mula_sqr1_hi,x
sta mula_sqr2_hi,y
lda mula_sqr1_lo+1,x
sta mula_sqr2_lo+$100,x
lda mula_sqr1_lo,x
sta mula_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;
*mem = *mula_sqr1_lo;
*mem = *mula_sqr1_hi;
*mem = *mula_sqr2_lo;
*mem = *mula_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++) {
byte* asm_sqr = mula_sqr1_lo;
for( byte* kc_sqr=mulf_sqr1_lo; kc_sqr<mulf_sqr1_lo+512*4; kc_sqr++) {
if(*kc_sqr != *asm_sqr) {
*BGCOL = 2;
print_str("multiply table mismatch at @");
@ -123,8 +125,8 @@ void multiply_tables_compare() {
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);
word ms = muls8u(a, b);
word ma = mulf8u(a,b);
if(ms!=ma) {
*BGCOL = 2;
multiply_error(a,b, ms, ma);
@ -152,8 +154,8 @@ void multiply_error(byte a, byte b, word ms, word ma) {
void signed_multiply_results_compare() {
for(signed byte a = -128; a!=-128; a++) {
for(signed byte b = -128; b!=-128; b++) {
signed word ms = slow_signed_multiply(a, b);
signed word ma = signed_multiply(a,b);
signed word ms = muls8s(a, b);
signed word ma = mulf8s(a,b);
if(ms!=ma) {
*BGCOL = 2;
signed_multiply_error(a,b, ms, ma);

View File

@ -10,8 +10,8 @@ main: {
lda #5
sta BGCOL
jsr print_cls
jsr init_multiply
jsr init_multiply_asm
jsr mulf_init
jsr mulf_init_asm
jsr multiply_tables_compare
jsr multiply_results_compare
jsr signed_multiply_results_compare
@ -29,9 +29,9 @@ signed_multiply_results_compare: {
sta b
b2:
ldx b
jsr slow_signed_multiply
jsr muls8s
ldy a
jsr signed_multiply
jsr mulf8s
lda ms
cmp ma
bne !+
@ -221,13 +221,13 @@ print_sbyte: {
jsr print_byte
rts
}
signed_multiply: {
mulf8s: {
.label m = $c
.label b = 3
.label return = $c
tya
ldx b
jsr multiply
jsr mulf8u
cpy #0
bpl b1
lda m+1
@ -246,7 +246,7 @@ signed_multiply: {
b2:
rts
}
multiply: {
mulf8u: {
.label memA = $fe
.label memB = $ff
.label return = $c
@ -259,14 +259,14 @@ multiply: {
sta sm4+1
sec
sm1:
lda mul_sqr1_lo,x
lda mulf_sqr1_lo,x
sm2:
sbc mul_sqr2_lo,x
sbc mulf_sqr2_lo,x
sta memA
sm3:
lda mul_sqr1_hi,x
lda mulf_sqr1_hi,x
sm4:
sbc mul_sqr2_hi,x
sbc mulf_sqr2_hi,x
sta memB
lda memA
sta return
@ -274,7 +274,7 @@ multiply: {
sta return+1
rts
}
slow_signed_multiply: {
muls8s: {
.label m = 8
.label return = 8
.label a = 2
@ -350,10 +350,10 @@ multiply_results_compare: {
sta b
b2:
ldx b
jsr slow_multiply
jsr muls8u
lda a
ldx b
jsr multiply
jsr mulf8u
lda ms
cmp ma
bne !+
@ -423,7 +423,7 @@ multiply_error: {
str2: .text " slow:@"
str3: .text " / fast asm:@"
}
slow_multiply: {
muls8u: {
.label return = 8
.label m = 8
.label a = 2
@ -455,13 +455,13 @@ slow_multiply: {
multiply_tables_compare: {
.label asm_sqr = 8
.label kc_sqr = 4
lda #<asm_mul_sqr1_lo
lda #<mula_sqr1_lo
sta asm_sqr
lda #>asm_mul_sqr1_lo
lda #>mula_sqr1_lo
sta asm_sqr+1
lda #<mul_sqr1_lo
lda #<mulf_sqr1_lo
sta kc_sqr
lda #>mul_sqr1_lo
lda #>mulf_sqr1_lo
sta kc_sqr+1
b1:
ldy #0
@ -506,11 +506,11 @@ multiply_tables_compare: {
inc kc_sqr+1
!:
lda kc_sqr+1
cmp #>mul_sqr1_lo+$200*4
cmp #>mulf_sqr1_lo+$200*4
bcc b1
bne !+
lda kc_sqr
cmp #<mul_sqr1_lo+$200*4
cmp #<mulf_sqr1_lo+$200*4
bcc b1
!:
lda #<SCREEN
@ -536,7 +536,7 @@ multiply_tables_compare: {
str1: .text " / @"
str2: .text "multiply tables match!@"
}
init_multiply_asm: {
mulf_init_asm: {
.label mem = $ff
ldx #0
txa
@ -545,7 +545,7 @@ init_multiply_asm: {
tya
adc #0
ml1:
sta asm_mul_sqr1_hi,x
sta mula_sqr1_hi,x
tay
cmp #$40
txa
@ -555,7 +555,7 @@ init_multiply_asm: {
sta ml9+1
inx
ml0:
sta asm_mul_sqr1_lo,x
sta mula_sqr1_lo,x
bne lb1
inc ml0+2
inc ml1+2
@ -565,28 +565,28 @@ init_multiply_asm: {
ldx #0
ldy #$ff
!:
lda asm_mul_sqr1_hi+1,x
sta asm_mul_sqr2_hi+$100,x
lda asm_mul_sqr1_hi,x
sta asm_mul_sqr2_hi,y
lda asm_mul_sqr1_lo+1,x
sta asm_mul_sqr2_lo+$100,x
lda asm_mul_sqr1_lo,x
sta asm_mul_sqr2_lo,y
lda mula_sqr1_hi+1,x
sta mula_sqr2_hi+$100,x
lda mula_sqr1_hi,x
sta mula_sqr2_hi,y
lda mula_sqr1_lo+1,x
sta mula_sqr2_lo+$100,x
lda mula_sqr1_lo,x
sta mula_sqr2_lo,y
dey
inx
bne !-
lda asm_mul_sqr1_lo
lda mula_sqr1_lo
sta mem
lda asm_mul_sqr1_hi
lda mula_sqr1_hi
sta mem
lda asm_mul_sqr2_lo
lda mula_sqr2_lo
sta mem
lda asm_mul_sqr2_hi
lda mula_sqr2_hi
sta mem
rts
}
init_multiply: {
mulf_init: {
.label sqr1_hi = 6
.label sqr = 8
.label sqr1_lo = 4
@ -596,13 +596,13 @@ init_multiply: {
.label dir = 2
lda #0
sta x_2
lda #<mul_sqr1_hi+1
lda #<mulf_sqr1_hi+1
sta sqr1_hi
lda #>mul_sqr1_hi+1
lda #>mulf_sqr1_hi+1
sta sqr1_hi+1
lda #<mul_sqr1_lo+1
lda #<mulf_sqr1_lo+1
sta sqr1_lo
lda #>mul_sqr1_lo+1
lda #>mulf_sqr1_lo+1
sta sqr1_lo+1
lda #0
sta sqr
@ -641,27 +641,27 @@ init_multiply: {
inc sqr1_lo+1
!:
lda sqr1_lo+1
cmp #>mul_sqr1_lo+$200
cmp #>mulf_sqr1_lo+$200
bne b1
lda sqr1_lo
cmp #<mul_sqr1_lo+$200
cmp #<mulf_sqr1_lo+$200
bne b1
lda #$ff
sta dir
lda #<mul_sqr2_hi
lda #<mulf_sqr2_hi
sta sqr2_hi
lda #>mul_sqr2_hi
lda #>mulf_sqr2_hi
sta sqr2_hi+1
lda #<mul_sqr2_lo
lda #<mulf_sqr2_lo
sta sqr2_lo
lda #>mul_sqr2_lo
lda #>mulf_sqr2_lo
sta sqr2_lo+1
ldx #-1
b3:
lda mul_sqr1_lo,x
lda mulf_sqr1_lo,x
ldy #0
sta (sqr2_lo),y
lda mul_sqr1_hi,x
lda mulf_sqr1_hi,x
sta (sqr2_hi),y
inc sqr2_hi
bne !+
@ -681,15 +681,15 @@ init_multiply: {
inc sqr2_lo+1
!:
lda sqr2_lo+1
cmp #>mul_sqr2_lo+$1ff
cmp #>mulf_sqr2_lo+$1ff
bne b3
lda sqr2_lo
cmp #<mul_sqr2_lo+$1ff
cmp #<mulf_sqr2_lo+$1ff
bne b3
lda mul_sqr1_lo+$100
sta mul_sqr2_lo+$1ff
lda mul_sqr1_hi+$100
sta mul_sqr2_hi+$1ff
lda mulf_sqr1_lo+$100
sta mulf_sqr2_lo+$1ff
lda mulf_sqr1_hi+$100
sta mulf_sqr2_hi+$1ff
rts
}
print_cls: {
@ -715,18 +715,18 @@ print_cls: {
rts
}
.align $100
mul_sqr1_lo: .fill $200, 0
mulf_sqr1_lo: .fill $200, 0
.align $100
mul_sqr1_hi: .fill $200, 0
mulf_sqr1_hi: .fill $200, 0
.align $100
mul_sqr2_lo: .fill $200, 0
mulf_sqr2_lo: .fill $200, 0
.align $100
mul_sqr2_hi: .fill $200, 0
mulf_sqr2_hi: .fill $200, 0
.align $100
asm_mul_sqr1_lo: .fill $200, 0
mula_sqr1_lo: .fill $200, 0
.align $100
asm_mul_sqr1_hi: .fill $200, 0
mula_sqr1_hi: .fill $200, 0
.align $100
asm_mul_sqr2_lo: .fill $200, 0
mula_sqr2_lo: .fill $200, 0
.align $100
asm_mul_sqr2_hi: .fill $200, 0
mula_sqr2_hi: .fill $200, 0

View File

@ -13,11 +13,11 @@ main: scope:[main] from @20
to:main::@1
main::@1: scope:[main] from main
[6] phi() [ ] ( main:2 [ ] )
[7] call init_multiply param-assignment [ ] ( main:2 [ ] )
[7] call mulf_init 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 [ ] )
[9] call mulf_init_asm param-assignment [ ] ( main:2 [ ] )
to:main::@3
main::@3: scope:[main] from main::@2
[10] phi() [ ] ( main:2 [ ] )
@ -42,20 +42,20 @@ signed_multiply_results_compare::@1: scope:[signed_multiply_results_compare] fr
to:signed_multiply_results_compare::@2
signed_multiply_results_compare::@2: scope:[signed_multiply_results_compare] from signed_multiply_results_compare::@1 signed_multiply_results_compare::@3
[19] (signed byte) signed_multiply_results_compare::b#2 ← phi( signed_multiply_results_compare::@1/-(byte/word/signed word/dword/signed dword) 128 signed_multiply_results_compare::@3/(signed byte) signed_multiply_results_compare::b#1 ) [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 ] )
[20] (signed byte) slow_signed_multiply::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 line_cursor#1 ] )
[21] (signed byte) slow_signed_multiply::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 slow_signed_multiply::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 slow_signed_multiply::b#0 line_cursor#1 ] )
[22] call slow_signed_multiply param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#0 line_cursor#1 ] )
[23] (signed word) slow_signed_multiply::return#2 ← (signed word) slow_signed_multiply::return#0 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#2 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#2 line_cursor#1 ] )
[20] (signed byte) muls8s::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::a#0 line_cursor#1 ] )
[21] (signed byte) muls8s::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::a#0 muls8s::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::a#0 muls8s::b#0 line_cursor#1 ] )
[22] call muls8s param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::return#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::return#0 line_cursor#1 ] )
[23] (signed word) muls8s::return#2 ← (signed word) muls8s::return#0 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::return#2 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 muls8s::return#2 line_cursor#1 ] )
to:signed_multiply_results_compare::@8
signed_multiply_results_compare::@8: scope:[signed_multiply_results_compare] from signed_multiply_results_compare::@2
[24] (signed word) signed_multiply_results_compare::ms#0 ← (signed word) slow_signed_multiply::return#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 ] )
[25] (signed byte) signed_multiply::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 line_cursor#1 ] )
[26] (signed byte) signed_multiply::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 signed_multiply::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 signed_multiply::b#0 line_cursor#1 ] )
[27] call signed_multiply param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::m#4 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::m#4 line_cursor#1 ] )
[28] (signed word) signed_multiply::return#2 ← (signed word)(word) signed_multiply::m#4 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::return#2 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::return#2 line_cursor#1 ] )
[24] (signed word) signed_multiply_results_compare::ms#0 ← (signed word) muls8s::return#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 ] )
[25] (signed byte) mulf8s::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::a#0 line_cursor#1 ] )
[26] (signed byte) mulf8s::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::a#0 mulf8s::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::a#0 mulf8s::b#0 line_cursor#1 ] )
[27] call mulf8s param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::m#4 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::m#4 line_cursor#1 ] )
[28] (signed word) mulf8s::return#2 ← (signed word)(word) mulf8s::m#4 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::return#2 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 mulf8s::return#2 line_cursor#1 ] )
to:signed_multiply_results_compare::@9
signed_multiply_results_compare::@9: scope:[signed_multiply_results_compare] from signed_multiply_results_compare::@8
[29] (signed word) signed_multiply_results_compare::ma#0 ← (signed word) signed_multiply::return#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] )
[29] (signed word) signed_multiply_results_compare::ma#0 ← (signed word) mulf8s::return#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] )
[30] if((signed word) signed_multiply_results_compare::ms#0==(signed word) signed_multiply_results_compare::ma#0) goto signed_multiply_results_compare::@3 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] )
to:signed_multiply_results_compare::@4
signed_multiply_results_compare::@4: scope:[signed_multiply_results_compare] from signed_multiply_results_compare::@9
@ -230,73 +230,73 @@ print_sbyte::@1: scope:[print_sbyte] from print_sbyte print_sbyte::@4
print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@1
[112] return [ char_cursor#17 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] )
to:@return
signed_multiply: scope:[signed_multiply] from signed_multiply_results_compare::@8
[113] (byte~) multiply::a#4 ← (byte)(signed byte) signed_multiply::a#0 [ signed_multiply::a#0 signed_multiply::b#0 multiply::a#4 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::a#4 ] )
[114] (byte~) multiply::b#4 ← (byte)(signed byte) signed_multiply::b#0 [ signed_multiply::a#0 signed_multiply::b#0 multiply::a#4 multiply::b#4 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::a#4 multiply::b#4 ] )
[115] call multiply param-assignment [ signed_multiply::a#0 signed_multiply::b#0 multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::return#0 ] )
[116] (word) multiply::return#2 ← (word) multiply::return#0 [ signed_multiply::a#0 signed_multiply::b#0 multiply::return#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::return#2 ] )
to:signed_multiply::@6
signed_multiply::@6: scope:[signed_multiply] from signed_multiply
[117] (word) signed_multiply::m#0 ← (word) multiply::return#2 [ signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 ] )
[118] if((signed byte) signed_multiply::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto signed_multiply::@1 [ signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 ] )
to:signed_multiply::@3
signed_multiply::@3: scope:[signed_multiply] from signed_multiply::@6
[119] (byte~) signed_multiply::$6 ← > (word) signed_multiply::m#0 [ signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 signed_multiply::$6 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 signed_multiply::$6 ] )
[120] (byte/signed byte/word/signed word/dword/signed dword~) signed_multiply::$16 ← (byte~) signed_multiply::$6 - (byte)(signed byte) signed_multiply::b#0 [ signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 signed_multiply::$16 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#0 signed_multiply::$16 ] )
[121] (word) signed_multiply::m#1 ← (word) signed_multiply::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) signed_multiply::$16 [ signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#1 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#1 ] )
to:signed_multiply::@1
signed_multiply::@1: scope:[signed_multiply] from signed_multiply::@3 signed_multiply::@6
[122] (word) signed_multiply::m#5 ← phi( signed_multiply::@3/(word) signed_multiply::m#1 signed_multiply::@6/(word) signed_multiply::m#0 ) [ signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#5 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 signed_multiply::m#5 ] )
[123] if((signed byte) signed_multiply::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto signed_multiply::@2 [ signed_multiply::a#0 signed_multiply::m#5 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::m#5 ] )
to:signed_multiply::@4
signed_multiply::@4: scope:[signed_multiply] from signed_multiply::@1
[124] (byte~) signed_multiply::$12 ← > (word) signed_multiply::m#5 [ signed_multiply::a#0 signed_multiply::m#5 signed_multiply::$12 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::m#5 signed_multiply::$12 ] )
[125] (byte/signed byte/word/signed word/dword/signed dword~) signed_multiply::$17 ← (byte~) signed_multiply::$12 - (byte)(signed byte) signed_multiply::a#0 [ signed_multiply::m#5 signed_multiply::$17 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::m#5 signed_multiply::$17 ] )
[126] (word) signed_multiply::m#2 ← (word) signed_multiply::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) signed_multiply::$17 [ signed_multiply::m#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::m#2 ] )
to:signed_multiply::@2
signed_multiply::@2: scope:[signed_multiply] from signed_multiply::@1 signed_multiply::@4
[127] (word) signed_multiply::m#4 ← phi( signed_multiply::@1/(word) signed_multiply::m#5 signed_multiply::@4/(word) signed_multiply::m#2 ) [ signed_multiply::m#4 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::m#4 ] )
to:signed_multiply::@return
signed_multiply::@return: scope:[signed_multiply] from signed_multiply::@2
[128] return [ signed_multiply::m#4 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::m#4 ] )
mulf8s: scope:[mulf8s] from signed_multiply_results_compare::@8
[113] (byte~) mulf8u::a#3 ← (byte)(signed byte) mulf8s::a#0 [ mulf8s::a#0 mulf8s::b#0 mulf8u::a#3 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::a#3 ] )
[114] (byte~) mulf8u::b#3 ← (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8u::a#3 mulf8u::b#3 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::a#3 mulf8u::b#3 ] )
[115] call mulf8u param-assignment [ mulf8s::a#0 mulf8s::b#0 mulf8u::return#0 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::return#0 ] )
[116] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ mulf8s::a#0 mulf8s::b#0 mulf8u::return#2 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::return#2 ] )
to:mulf8s::@6
mulf8s::@6: scope:[mulf8s] from mulf8s
[117] (word) mulf8s::m#0 ← (word) mulf8u::return#2 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] )
[118] if((signed byte) mulf8s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s::@1 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 ] )
to:mulf8s::@3
mulf8s::@3: scope:[mulf8s] from mulf8s::@6
[119] (byte~) mulf8s::$6 ← > (word) mulf8s::m#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$6 ] )
[120] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 ← (byte~) mulf8s::$6 - (byte)(signed byte) mulf8s::b#0 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#0 mulf8s::$16 ] )
[121] (word) mulf8s::m#1 ← (word) mulf8s::m#0 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#1 ] )
to:mulf8s::@1
mulf8s::@1: scope:[mulf8s] from mulf8s::@3 mulf8s::@6
[122] (word) mulf8s::m#5 ← phi( mulf8s::@3/(word) mulf8s::m#1 mulf8s::@6/(word) mulf8s::m#0 ) [ mulf8s::a#0 mulf8s::b#0 mulf8s::m#5 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8s::m#5 ] )
[123] if((signed byte) mulf8s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s::@2 [ mulf8s::a#0 mulf8s::m#5 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 ] )
to:mulf8s::@4
mulf8s::@4: scope:[mulf8s] from mulf8s::@1
[124] (byte~) mulf8s::$12 ← > (word) mulf8s::m#5 [ mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::m#5 mulf8s::$12 ] )
[125] (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 ← (byte~) mulf8s::$12 - (byte)(signed byte) mulf8s::a#0 [ mulf8s::m#5 mulf8s::$17 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::m#5 mulf8s::$17 ] )
[126] (word) mulf8s::m#2 ← (word) mulf8s::m#5 hi= (byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 [ mulf8s::m#2 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::m#2 ] )
to:mulf8s::@2
mulf8s::@2: scope:[mulf8s] from mulf8s::@1 mulf8s::@4
[127] (word) mulf8s::m#4 ← phi( mulf8s::@1/(word) mulf8s::m#5 mulf8s::@4/(word) mulf8s::m#2 ) [ mulf8s::m#4 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::m#4 ] )
to:mulf8s::@return
mulf8s::@return: scope:[mulf8s] from mulf8s::@2
[128] return [ mulf8s::m#4 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::m#4 ] )
to:@return
multiply: scope:[multiply] from multiply_results_compare::@8 signed_multiply
[129] (byte) multiply::b#2 ← phi( multiply_results_compare::@8/(byte) multiply::b#1 signed_multiply/(byte~) multiply::b#4 ) [ multiply::a#2 multiply::b#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::a#2 multiply::b#2 ] main:2::multiply_results_compare:13::multiply:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#2 multiply::b#2 ] )
[129] (byte) multiply::a#2 ← phi( multiply_results_compare::@8/(byte) multiply::a#1 signed_multiply/(byte~) multiply::a#4 ) [ multiply::a#2 multiply::b#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::a#2 multiply::b#2 ] main:2::multiply_results_compare:13::multiply:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::a#2 multiply::b#2 ] )
[130] *((const byte*) multiply::memA#0) ← (byte) multiply::a#2 [ multiply::b#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::b#2 ] main:2::multiply_results_compare:13::multiply:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::b#2 ] )
[131] *((const byte*) multiply::memB#0) ← (byte) multiply::b#2 [ ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 ] main:2::multiply_results_compare:13::multiply:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamul_sqr1_lo,x sm2: sbcmul_sqr2_lo,x stamemA sm3: ldamul_sqr1_hi,x sm4: sbcmul_sqr2_hi,x stamemB }
[133] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::return#0 ] main:2::multiply_results_compare:13::multiply:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 ] )
to:multiply::@return
multiply::@return: scope:[multiply] from multiply
[134] return [ multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::return#0 ] main:2::multiply_results_compare:13::multiply:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 ] )
mulf8u: scope:[mulf8u] from mulf8s multiply_results_compare::@8
[129] (byte) mulf8u::b#2 ← phi( mulf8s/(byte~) mulf8u::b#3 multiply_results_compare::@8/(byte) mulf8u::b#1 ) [ mulf8u::a#2 mulf8u::b#2 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27::mulf8u:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::a#2 mulf8u::b#2 ] main:2::multiply_results_compare:13::mulf8u:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 mulf8u::a#2 mulf8u::b#2 ] )
[129] (byte) mulf8u::a#2 ← phi( mulf8s/(byte~) mulf8u::a#3 multiply_results_compare::@8/(byte) mulf8u::a#1 ) [ mulf8u::a#2 mulf8u::b#2 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27::mulf8u:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::a#2 mulf8u::b#2 ] main:2::multiply_results_compare:13::mulf8u:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 mulf8u::a#2 mulf8u::b#2 ] )
[130] *((const byte*) mulf8u::memA#0) ← (byte) mulf8u::a#2 [ mulf8u::b#2 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27::mulf8u:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::b#2 ] main:2::multiply_results_compare:13::mulf8u:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 mulf8u::b#2 ] )
[131] *((const byte*) mulf8u::memB#0) ← (byte) mulf8u::b#2 [ ] ( main:2::signed_multiply_results_compare:15::mulf8s:27::mulf8u:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 ] main:2::multiply_results_compare:13::mulf8u:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x stamemA sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB }
[133] (word) mulf8u::return#0 ← *((const byte*) mulf8u::memB#0) w= *((const byte*) mulf8u::memA#0) [ mulf8u::return#0 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27::mulf8u:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::return#0 ] main:2::multiply_results_compare:13::mulf8u:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 mulf8u::return#0 ] )
to:mulf8u::@return
mulf8u::@return: scope:[mulf8u] from mulf8u
[134] return [ mulf8u::return#0 ] ( main:2::signed_multiply_results_compare:15::mulf8s:27::mulf8u:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 mulf8s::a#0 mulf8s::b#0 mulf8u::return#0 ] main:2::multiply_results_compare:13::mulf8u:157 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 mulf8u::return#0 ] )
to:@return
slow_signed_multiply: scope:[slow_signed_multiply] from signed_multiply_results_compare::@2
[135] if((signed byte) slow_signed_multiply::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto slow_signed_multiply::@1 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 ] )
to:slow_signed_multiply::@2
slow_signed_multiply::@2: scope:[slow_signed_multiply] from slow_signed_multiply slow_signed_multiply::@2
[136] (signed byte) slow_signed_multiply::i#2 ← phi( slow_signed_multiply::@2/(signed byte) slow_signed_multiply::i#1 slow_signed_multiply/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#3 slow_signed_multiply::i#2 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#3 slow_signed_multiply::i#2 ] )
[136] (signed word) slow_signed_multiply::m#3 ← phi( slow_signed_multiply::@2/(signed word) slow_signed_multiply::m#1 slow_signed_multiply/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#3 slow_signed_multiply::i#2 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#3 slow_signed_multiply::i#2 ] )
[137] (signed word) slow_signed_multiply::m#1 ← (signed word) slow_signed_multiply::m#3 - (signed byte) slow_signed_multiply::b#0 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::i#2 slow_signed_multiply::m#1 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::i#2 slow_signed_multiply::m#1 ] )
[138] (signed byte) slow_signed_multiply::i#1 ← -- (signed byte) slow_signed_multiply::i#2 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#1 slow_signed_multiply::i#1 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#1 slow_signed_multiply::i#1 ] )
[139] if((signed byte) slow_signed_multiply::i#1!=(signed byte) slow_signed_multiply::a#0) goto slow_signed_multiply::@2 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#1 slow_signed_multiply::i#1 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#1 slow_signed_multiply::i#1 ] )
to:slow_signed_multiply::@3
slow_signed_multiply::@3: scope:[slow_signed_multiply] from slow_signed_multiply::@1 slow_signed_multiply::@2 slow_signed_multiply::@5
[140] (signed word) slow_signed_multiply::return#0 ← phi( slow_signed_multiply::@2/(signed word) slow_signed_multiply::m#1 slow_signed_multiply::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 slow_signed_multiply::@5/(signed word) slow_signed_multiply::m#2 ) [ slow_signed_multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::return#0 ] )
to:slow_signed_multiply::@return
slow_signed_multiply::@return: scope:[slow_signed_multiply] from slow_signed_multiply::@3
[141] return [ slow_signed_multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::return#0 ] )
muls8s: scope:[muls8s] from signed_multiply_results_compare::@2
[135] if((signed byte) muls8s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8s::@1 [ muls8s::a#0 muls8s::b#0 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 ] )
to:muls8s::@2
muls8s::@2: scope:[muls8s] from muls8s muls8s::@2
[136] (signed byte) muls8s::i#2 ← phi( muls8s::@2/(signed byte) muls8s::i#1 muls8s/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ muls8s::a#0 muls8s::b#0 muls8s::m#3 muls8s::i#2 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#3 muls8s::i#2 ] )
[136] (signed word) muls8s::m#3 ← phi( muls8s::@2/(signed word) muls8s::m#1 muls8s/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ muls8s::a#0 muls8s::b#0 muls8s::m#3 muls8s::i#2 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#3 muls8s::i#2 ] )
[137] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#1 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#1 ] )
[138] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 [ muls8s::a#0 muls8s::b#0 muls8s::m#1 muls8s::i#1 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#1 muls8s::i#1 ] )
[139] if((signed byte) muls8s::i#1!=(signed byte) muls8s::a#0) goto muls8s::@2 [ muls8s::a#0 muls8s::b#0 muls8s::m#1 muls8s::i#1 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#1 muls8s::i#1 ] )
to:muls8s::@3
muls8s::@3: scope:[muls8s] from muls8s::@1 muls8s::@2 muls8s::@5
[140] (signed word) muls8s::return#0 ← phi( muls8s::@2/(signed word) muls8s::m#1 muls8s::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8s::@5/(signed word) muls8s::m#2 ) [ muls8s::return#0 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::return#0 ] )
to:muls8s::@return
muls8s::@return: scope:[muls8s] from muls8s::@3
[141] return [ muls8s::return#0 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::return#0 ] )
to:@return
slow_signed_multiply::@1: scope:[slow_signed_multiply] from slow_signed_multiply
[142] if((signed byte) slow_signed_multiply::a#0<=(byte/signed byte/word/signed word/dword/signed dword) 0) goto slow_signed_multiply::@3 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 ] )
to:slow_signed_multiply::@5
slow_signed_multiply::@5: scope:[slow_signed_multiply] from slow_signed_multiply::@1 slow_signed_multiply::@5
[143] (signed byte) slow_signed_multiply::j#2 ← phi( slow_signed_multiply::@5/(signed byte) slow_signed_multiply::j#1 slow_signed_multiply::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#5 slow_signed_multiply::j#2 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#5 slow_signed_multiply::j#2 ] )
[143] (signed word) slow_signed_multiply::m#5 ← phi( slow_signed_multiply::@5/(signed word) slow_signed_multiply::m#2 slow_signed_multiply::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#5 slow_signed_multiply::j#2 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#5 slow_signed_multiply::j#2 ] )
[144] (signed word) slow_signed_multiply::m#2 ← (signed word) slow_signed_multiply::m#5 + (signed byte) slow_signed_multiply::b#0 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#2 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#2 ] )
[145] (signed byte) slow_signed_multiply::j#1 ← ++ (signed byte) slow_signed_multiply::j#2 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#1 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#1 ] )
[146] if((signed byte) slow_signed_multiply::j#1!=(signed byte) slow_signed_multiply::a#0) goto slow_signed_multiply::@5 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#1 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#1 ] )
to:slow_signed_multiply::@3
muls8s::@1: scope:[muls8s] from muls8s
[142] if((signed byte) muls8s::a#0<=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8s::@3 [ muls8s::a#0 muls8s::b#0 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 ] )
to:muls8s::@5
muls8s::@5: scope:[muls8s] from muls8s::@1 muls8s::@5
[143] (signed byte) muls8s::j#2 ← phi( muls8s::@5/(signed byte) muls8s::j#1 muls8s::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ muls8s::a#0 muls8s::b#0 muls8s::m#5 muls8s::j#2 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#5 muls8s::j#2 ] )
[143] (signed word) muls8s::m#5 ← phi( muls8s::@5/(signed word) muls8s::m#2 muls8s::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ muls8s::a#0 muls8s::b#0 muls8s::m#5 muls8s::j#2 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#5 muls8s::j#2 ] )
[144] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 + (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::m#2 muls8s::j#2 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#2 muls8s::j#2 ] )
[145] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 [ muls8s::a#0 muls8s::b#0 muls8s::m#2 muls8s::j#1 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#2 muls8s::j#1 ] )
[146] if((signed byte) muls8s::j#1!=(signed byte) muls8s::a#0) goto muls8s::@5 [ muls8s::a#0 muls8s::b#0 muls8s::m#2 muls8s::j#1 ] ( main:2::signed_multiply_results_compare:15::muls8s:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 muls8s::a#0 muls8s::b#0 muls8s::m#2 muls8s::j#1 ] )
to:muls8s::@3
multiply_results_compare: scope:[multiply_results_compare] from main::@4
[147] phi() [ line_cursor#10 char_cursor#30 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 ] )
to:multiply_results_compare::@1
@ -305,20 +305,20 @@ multiply_results_compare::@1: scope:[multiply_results_compare] from multiply_re
to:multiply_results_compare::@2
multiply_results_compare::@2: scope:[multiply_results_compare] from multiply_results_compare::@1 multiply_results_compare::@3
[149] (byte) multiply_results_compare::b#2 ← phi( multiply_results_compare::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 multiply_results_compare::@3/(byte) multiply_results_compare::b#1 ) [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 ] )
[150] (byte) slow_multiply::a#0 ← (byte) multiply_results_compare::a#6 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 ] )
[151] (byte) slow_multiply::b#0 ← (byte) multiply_results_compare::b#2 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 ] )
[152] call slow_multiply param-assignment [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#0 ] )
[153] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#2 ] )
[150] (byte) muls8u::a#0 ← (byte) multiply_results_compare::a#6 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 ] )
[151] (byte) muls8u::b#0 ← (byte) multiply_results_compare::b#2 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 ] )
[152] call muls8u param-assignment [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::return#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::return#0 ] )
[153] (word) muls8u::return#2 ← (word) muls8u::return#0 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::return#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::return#2 ] )
to:multiply_results_compare::@8
multiply_results_compare::@8: scope:[multiply_results_compare] from multiply_results_compare::@2
[154] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[155] (byte) multiply::a#1 ← (byte) multiply_results_compare::a#6 [ line_cursor#10 char_cursor#30 multiply::a#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply::a#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[156] (byte) multiply::b#1 ← (byte) multiply_results_compare::b#2 [ line_cursor#10 char_cursor#30 multiply::a#1 multiply::b#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply::a#1 multiply::b#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[157] call multiply param-assignment [ line_cursor#10 char_cursor#30 multiply::return#0 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply::return#0 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[158] (word) multiply::return#3 ← (word) multiply::return#0 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#3 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#3 ] )
[154] (word) multiply_results_compare::ms#0 ← (word) muls8u::return#2 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[155] (byte) mulf8u::a#1 ← (byte) multiply_results_compare::a#6 [ line_cursor#10 char_cursor#30 mulf8u::a#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 mulf8u::a#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[156] (byte) mulf8u::b#1 ← (byte) multiply_results_compare::b#2 [ line_cursor#10 char_cursor#30 mulf8u::a#1 mulf8u::b#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 mulf8u::a#1 mulf8u::b#1 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[157] call mulf8u param-assignment [ line_cursor#10 char_cursor#30 mulf8u::return#0 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 mulf8u::return#0 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] )
[158] (word) mulf8u::return#3 ← (word) mulf8u::return#0 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 mulf8u::return#3 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 mulf8u::return#3 ] )
to:multiply_results_compare::@9
multiply_results_compare::@9: scope:[multiply_results_compare] from multiply_results_compare::@8
[159] (word) multiply_results_compare::ma#0 ← (word) multiply::return#3 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 ] )
[159] (word) multiply_results_compare::ma#0 ← (word) mulf8u::return#3 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 ] )
[160] if((word) multiply_results_compare::ms#0==(word) multiply_results_compare::ma#0) goto multiply_results_compare::@3 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply_results_compare::ma#0 ] )
to:multiply_results_compare::@4
multiply_results_compare::@4: scope:[multiply_results_compare] from multiply_results_compare::@9
@ -387,28 +387,28 @@ multiply_error::@8: scope:[multiply_error] from multiply_error::@7
multiply_error::@return: scope:[multiply_error] from multiply_error::@8
[194] return [ line_cursor#1 ] ( main:2::multiply_results_compare:13::multiply_error:166 [ line_cursor#1 ] )
to:@return
slow_multiply: scope:[slow_multiply] from multiply_results_compare::@2
[195] if((byte) slow_multiply::a#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto slow_multiply::@1 [ slow_multiply::a#0 slow_multiply::b#0 ] ( main:2::multiply_results_compare:13::slow_multiply:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 ] )
to:slow_multiply::@2
slow_multiply::@2: scope:[slow_multiply] from slow_multiply slow_multiply::@2
[196] (byte) slow_multiply::i#2 ← phi( slow_multiply::@2/(byte) slow_multiply::i#1 slow_multiply/(byte/signed byte/word/signed word/dword/signed dword) 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:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] )
[196] (word) slow_multiply::m#3 ← phi( slow_multiply::@2/(word) slow_multiply::m#1 slow_multiply/(byte/signed byte/word/signed word/dword/signed dword) 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:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#3 slow_multiply::i#2 ] )
[197] (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:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::i#2 slow_multiply::m#1 ] )
[198] (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:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::a#0 slow_multiply::b#0 slow_multiply::m#1 slow_multiply::i#1 ] )
[199] 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:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 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
[200] (word) slow_multiply::return#0 ← phi( slow_multiply/(byte/signed byte/word/signed word/dword/signed dword) 0 slow_multiply::@2/(word) slow_multiply::m#1 ) [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#0 ] )
to:slow_multiply::@return
slow_multiply::@return: scope:[slow_multiply] from slow_multiply::@1
[201] return [ slow_multiply::return#0 ] ( main:2::multiply_results_compare:13::slow_multiply:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#0 ] )
muls8u: scope:[muls8u] from multiply_results_compare::@2
[195] if((byte) muls8u::a#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8u::@1 [ muls8u::a#0 muls8u::b#0 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 ] )
to:muls8u::@2
muls8u::@2: scope:[muls8u] from muls8u muls8u::@2
[196] (byte) muls8u::i#2 ← phi( muls8u::@2/(byte) muls8u::i#1 muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ muls8u::a#0 muls8u::b#0 muls8u::m#3 muls8u::i#2 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 muls8u::m#3 muls8u::i#2 ] )
[196] (word) muls8u::m#3 ← phi( muls8u::@2/(word) muls8u::m#1 muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ muls8u::a#0 muls8u::b#0 muls8u::m#3 muls8u::i#2 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 muls8u::m#3 muls8u::i#2 ] )
[197] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] )
[198] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 [ muls8u::a#0 muls8u::b#0 muls8u::m#1 muls8u::i#1 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 muls8u::m#1 muls8u::i#1 ] )
[199] if((byte) muls8u::i#1!=(byte) muls8u::a#0) goto muls8u::@2 [ muls8u::a#0 muls8u::b#0 muls8u::m#1 muls8u::i#1 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::a#0 muls8u::b#0 muls8u::m#1 muls8u::i#1 ] )
to:muls8u::@1
muls8u::@1: scope:[muls8u] from muls8u muls8u::@2
[200] (word) muls8u::return#0 ← phi( muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8u::@2/(word) muls8u::m#1 ) [ muls8u::return#0 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::return#0 ] )
to:muls8u::@return
muls8u::@return: scope:[muls8u] from muls8u::@1
[201] return [ muls8u::return#0 ] ( main:2::multiply_results_compare:13::muls8u:152 [ line_cursor#10 char_cursor#30 multiply_results_compare::a#6 multiply_results_compare::b#2 muls8u::return#0 ] )
to:@return
multiply_tables_compare: scope:[multiply_tables_compare] from main::@3
[202] 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
[203] (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 ] )
[203] (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 ] )
[203] (byte*) multiply_tables_compare::asm_sqr#2 ← phi( multiply_tables_compare/(const byte[512]) mula_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 ] )
[203] (byte*) multiply_tables_compare::kc_sqr#2 ← phi( multiply_tables_compare/(const byte[512]) mulf_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 ] )
[204] 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
@ -435,7 +435,7 @@ multiply_tables_compare::@return: scope:[multiply_tables_compare] from multiply
multiply_tables_compare::@2: scope:[multiply_tables_compare] from multiply_tables_compare::@1
[215] (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 ] )
[216] (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 ] )
[217] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word/dword/signed dword) 512*(byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[217] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512*(byte/signed byte/word/signed word/dword/signed dword) 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
[218] phi() [ ] ( main:2::multiply_tables_compare:11 [ ] )
@ -446,71 +446,71 @@ multiply_tables_compare::@10: scope:[multiply_tables_compare] from multiply_tab
[221] call print_ln param-assignment [ line_cursor#1 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 ] )
[222] (byte*~) char_cursor#201 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#201 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#201 ] )
to:multiply_tables_compare::@return
init_multiply_asm: scope:[init_multiply_asm] from main::@2
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
[224] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
[225] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
[226] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
[227] *((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
[228] return [ ] ( main:2::init_multiply_asm:9 [ ] )
mulf_init_asm: scope:[mulf_init_asm] from main::@2
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- }
[224] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr1_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] )
[225] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr1_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] )
[226] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr2_lo#0) [ ] ( main:2::mulf_init_asm:9 [ ] )
[227] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr2_hi#0) [ ] ( main:2::mulf_init_asm:9 [ ] )
to:mulf_init_asm::@return
mulf_init_asm::@return: scope:[mulf_init_asm] from mulf_init_asm
[228] return [ ] ( main:2::mulf_init_asm:9 [ ] )
to:@return
init_multiply: scope:[init_multiply] from main::@1
[229] phi() [ ] ( main:2::init_multiply:7 [ ] )
to:init_multiply::@1
init_multiply::@1: scope:[init_multiply] from init_multiply init_multiply::@2
[230] (byte) init_multiply::x_2#3 ← phi( init_multiply/(byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[230] (byte*) init_multiply::sqr1_hi#2 ← phi( init_multiply/(const byte[512]) mul_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[230] (byte*) init_multiply::sqr1_lo#2 ← phi( init_multiply/(const byte[512]) mul_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[230] (word) init_multiply::sqr#4 ← phi( init_multiply/(byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[230] (byte) init_multiply::c#2 ← phi( init_multiply/(byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[231] (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 ] )
[232] (byte~) init_multiply::$2 ← (byte) init_multiply::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[233] if((byte~) init_multiply::$2!=(byte/signed byte/word/signed word/dword/signed dword) 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
[234] (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 ] )
[235] (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
[236] (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 ] )
[236] (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 ] )
[237] (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 ] )
[238] *((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 ] )
[239] (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 ] )
[240] *((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 ] )
[241] (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 ] )
[242] (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 ] )
[243] (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 ] )
[244] if((byte*) init_multiply::sqr1_lo#1!=(const byte[512]) mul_sqr1_lo#0+(word/signed word/dword/signed dword) 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
[245] (byte) init_multiply::dir#2 ← phi( init_multiply::@4/(byte) init_multiply::dir#3 init_multiply::@2/(byte/word/signed word/dword/signed dword) 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 ] )
[245] (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 ] )
[245] (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 ] )
[245] (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/dword/signed dword) 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 ] )
[246] *((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 ] )
[247] *((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 ] )
[248] (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 ] )
[249] (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 ] )
[250] if((byte) init_multiply::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 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
[251] (byte) init_multiply::dir#3 ← phi( init_multiply::@12/(byte) init_multiply::dir#2 init_multiply::@3/(byte/signed byte/word/signed word/dword/signed dword) 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 ] )
[252] (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 ] )
[253] if((byte*) init_multiply::sqr2_lo#1!=(const byte[512]) mul_sqr2_lo#0+(word/signed word/dword/signed dword) 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
[254] *((const byte[512]) mul_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mul_sqr1_lo#0+(word/signed word/dword/signed dword) 256) [ ] ( main:2::init_multiply:7 [ ] )
[255] *((const byte[512]) mul_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mul_sqr1_hi#0+(word/signed word/dword/signed dword) 256) [ ] ( main:2::init_multiply:7 [ ] )
to:init_multiply::@return
init_multiply::@return: scope:[init_multiply] from init_multiply::@8
[256] return [ ] ( main:2::init_multiply:7 [ ] )
mulf_init: scope:[mulf_init] from main::@1
[229] phi() [ ] ( main:2::mulf_init:7 [ ] )
to:mulf_init::@1
mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@2
[230] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 ) [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] )
[230] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 ) [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] )
[230] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 ) [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] )
[230] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 ) [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] )
[230] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 ) [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] )
[231] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 ] )
[232] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$2 ] ( main:2::mulf_init:7 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$2 ] )
[233] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 ] )
to:mulf_init::@5
mulf_init::@5: scope:[mulf_init] from mulf_init::@1
[234] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr#4 mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#1 ] )
[235] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#1 mulf_init::sqr#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#1 mulf_init::sqr#2 ] )
to:mulf_init::@2
mulf_init::@2: scope:[mulf_init] from mulf_init::@1 mulf_init::@5
[236] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 ) [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] )
[236] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 ) [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] )
[237] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] )
[238] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] )
[239] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$6 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$6 ] )
[240] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] )
[241] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 mulf_init::sqr#3 ] )
[242] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] )
[243] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] )
[244] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_lo#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] )
to:mulf_init::@3
mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4
[245] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 ) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] )
[245] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 ) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] )
[245] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 ) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] )
[245] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] )
[246] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] )
[247] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] )
[248] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::x_255#2 mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::sqr2_hi#1 ] )
[249] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] )
[250] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] )
to:mulf_init::@4
mulf_init::@4: scope:[mulf_init] from mulf_init::@12 mulf_init::@3
[251] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ mulf_init::sqr2_lo#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] )
[252] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] ( main:2::mulf_init:7 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] )
[253] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] ( main:2::mulf_init:7 [ mulf_init::x_255#1 mulf_init::sqr2_lo#1 mulf_init::sqr2_hi#1 mulf_init::dir#3 ] )
to:mulf_init::@8
mulf_init::@8: scope:[mulf_init] from mulf_init::@4
[254] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256) [ ] ( main:2::mulf_init:7 [ ] )
[255] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256) [ ] ( main:2::mulf_init:7 [ ] )
to:mulf_init::@return
mulf_init::@return: scope:[mulf_init] from mulf_init::@8
[256] return [ ] ( main:2::mulf_init:7 [ ] )
to:@return
init_multiply::@12: scope:[init_multiply] from init_multiply::@3
[257] 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
mulf_init::@12: scope:[mulf_init] from mulf_init::@3
[257] phi() [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] )
to:mulf_init::@4
print_cls: scope:[print_cls] from main
[258] phi() [ ] ( main:2::print_cls:5 [ ] )
to:print_cls::@1

File diff suppressed because one or more lines are too long

View File

@ -5,14 +5,6 @@
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(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:10 11.0
(byte*) char_cursor#122 char_cursor zp ZP_WORD:10 1.6944444444444446
@ -28,52 +20,6 @@
(byte*~) char_cursor#201 char_cursor zp ZP_WORD:10 4.0
(byte*) char_cursor#30 char_cursor zp ZP_WORD:10 0.27586206896551724
(byte*) char_cursor#78 char_cursor zp ZP_WORD:10 6.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/dword/signed dword) 255
(byte*) line_cursor
(byte*) line_cursor#1 line_cursor zp ZP_WORD:4 0.8181818181818181
(byte*) line_cursor#10 line_cursor zp ZP_WORD:4 0.1276595744680851
@ -86,32 +32,150 @@
(label) main::@4
(label) main::@5
(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#1 reg byte a 101.0
(byte) multiply::a#2 reg byte a 105.0
(byte~) multiply::a#4 reg byte a 2.0
(byte) multiply::b
(byte) multiply::b#1 reg byte x 202.0
(byte) multiply::b#2 reg byte x 52.5
(byte~) multiply::b#4 reg byte x 4.0
(byte*) multiply::memA
(const byte*) multiply::memA#0 memA = ((byte*))(byte/word/signed word/dword/signed dword) 254
(byte*) multiply::memB
(const byte*) multiply::memB#0 memB = ((byte*))(byte/word/signed word/dword/signed dword) 255
(word) multiply::return
(word) multiply::return#0 return zp ZP_WORD:12 26.25
(word) multiply::return#2 return zp ZP_WORD:12 4.0
(word) multiply::return#3 return zp ZP_WORD:12 202.0
(byte[512]) mula_sqr1_hi
(const byte[512]) mula_sqr1_hi#0 mula_sqr1_hi = { fill( 512, 0) }
(byte[512]) mula_sqr1_lo
(const byte[512]) mula_sqr1_lo#0 mula_sqr1_lo = { fill( 512, 0) }
(byte[512]) mula_sqr2_hi
(const byte[512]) mula_sqr2_hi#0 mula_sqr2_hi = { fill( 512, 0) }
(byte[512]) mula_sqr2_lo
(const byte[512]) mula_sqr2_lo#0 mula_sqr2_lo = { fill( 512, 0) }
(signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b)
(byte~) mulf8s::$12 reg byte a 4.0
(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$16 reg byte a 4.0
(byte/signed byte/word/signed word/dword/signed dword~) mulf8s::$17 reg byte a 4.0
(byte~) mulf8s::$6 reg byte a 4.0
(label) mulf8s::@1
(label) mulf8s::@2
(label) mulf8s::@3
(label) mulf8s::@4
(label) mulf8s::@6
(label) mulf8s::@return
(signed byte) mulf8s::a
(signed byte) mulf8s::a#0 reg byte y 7.357142857142858
(signed byte) mulf8s::b
(signed byte) mulf8s::b#0 b zp ZP_BYTE:3 9.363636363636363
(word) mulf8s::m
(word) mulf8s::m#0 m zp ZP_WORD:12 2.0
(word) mulf8s::m#1 m zp ZP_WORD:12 4.0
(word) mulf8s::m#2 m zp ZP_WORD:12 4.0
(word) mulf8s::m#4 m zp ZP_WORD:12 1.3333333333333333
(word) mulf8s::m#5 m zp ZP_WORD:12 2.5
(signed word) mulf8s::return
(signed word) mulf8s::return#2 return zp ZP_WORD:12 202.0
(word()) mulf8u((byte) mulf8u::a , (byte) mulf8u::b)
(label) mulf8u::@return
(byte) mulf8u::a
(byte) mulf8u::a#1 reg byte a 101.0
(byte) mulf8u::a#2 reg byte a 105.0
(byte~) mulf8u::a#3 reg byte a 2.0
(byte) mulf8u::b
(byte) mulf8u::b#1 reg byte x 202.0
(byte) mulf8u::b#2 reg byte x 52.5
(byte~) mulf8u::b#3 reg byte x 4.0
(byte*) mulf8u::memA
(const byte*) mulf8u::memA#0 memA = ((byte*))(byte/word/signed word/dword/signed dword) 254
(byte*) mulf8u::memB
(const byte*) mulf8u::memB#0 memB = ((byte*))(byte/word/signed word/dword/signed dword) 255
(word) mulf8u::return
(word) mulf8u::return#0 return zp ZP_WORD:12 26.25
(word) mulf8u::return#2 return zp ZP_WORD:12 4.0
(word) mulf8u::return#3 return zp ZP_WORD:12 202.0
(void()) mulf_init()
(byte~) mulf_init::$2 reg byte a 22.0
(byte~) mulf_init::$5 reg byte a 22.0
(byte~) mulf_init::$6 reg byte a 22.0
(label) mulf_init::@1
(label) mulf_init::@12
(label) mulf_init::@2
(label) mulf_init::@3
(label) mulf_init::@4
(label) mulf_init::@5
(label) mulf_init::@8
(label) mulf_init::@return
(byte) mulf_init::c
(byte) mulf_init::c#1 reg byte x 2.357142857142857
(byte) mulf_init::c#2 reg byte x 22.0
(byte) mulf_init::dir
(byte) mulf_init::dir#2 dir zp ZP_BYTE:2 4.714285714285714
(byte) mulf_init::dir#3 dir zp ZP_BYTE:2 7.333333333333333
(word) mulf_init::sqr
(word) mulf_init::sqr#1 sqr zp ZP_WORD:8 7.333333333333333
(word) mulf_init::sqr#2 sqr zp ZP_WORD:8 22.0
(word) mulf_init::sqr#3 sqr zp ZP_WORD:8 9.166666666666666
(word) mulf_init::sqr#4 sqr zp ZP_WORD:8 6.6000000000000005
(byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:6 5.5
(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:6 3.0
(byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp ZP_WORD:4 16.5
(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp ZP_WORD:4 2.5384615384615383
(byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:6 3.142857142857143
(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:6 11.0
(byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:4 16.5
(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:4 4.125
(byte) mulf_init::x_2
(byte) mulf_init::x_2#1 x_2 zp ZP_BYTE:2 11.0
(byte) mulf_init::x_2#2 x_2 zp ZP_BYTE:2 4.888888888888889
(byte) mulf_init::x_2#3 x_2 zp ZP_BYTE:2 8.25
(byte) mulf_init::x_255
(byte) mulf_init::x_255#1 reg byte x 5.5
(byte) mulf_init::x_255#2 reg byte x 11.0
(void()) mulf_init_asm()
(label) mulf_init_asm::@return
(byte*) mulf_init_asm::mem
(const byte*) mulf_init_asm::mem#0 mem = ((byte*))(byte/word/signed word/dword/signed dword) 255
(byte[512]) mulf_sqr1_hi
(const byte[512]) mulf_sqr1_hi#0 mulf_sqr1_hi = { fill( 512, 0) }
(byte[512]) mulf_sqr1_lo
(const byte[512]) mulf_sqr1_lo#0 mulf_sqr1_lo = { fill( 512, 0) }
(byte[512]) mulf_sqr2_hi
(const byte[512]) mulf_sqr2_hi#0 mulf_sqr2_hi = { fill( 512, 0) }
(byte[512]) mulf_sqr2_lo
(const byte[512]) mulf_sqr2_lo#0 mulf_sqr2_lo = { fill( 512, 0) }
(signed word()) muls8s((signed byte) muls8s::a , (signed byte) muls8s::b)
(label) muls8s::@1
(label) muls8s::@2
(label) muls8s::@3
(label) muls8s::@5
(label) muls8s::@return
(signed byte) muls8s::a
(signed byte) muls8s::a#0 a zp ZP_BYTE:2 175.58333333333334
(signed byte) muls8s::b
(signed byte) muls8s::b#0 reg byte x 191.1818181818182
(signed byte) muls8s::i
(signed byte) muls8s::i#1 reg byte y 1501.5
(signed byte) muls8s::i#2 reg byte y 1001.0
(signed byte) muls8s::j
(signed byte) muls8s::j#1 reg byte y 1501.5
(signed byte) muls8s::j#2 reg byte y 1001.0
(signed word) muls8s::m
(signed word) muls8s::m#1 m zp ZP_WORD:8 1001.0
(signed word) muls8s::m#2 m zp ZP_WORD:8 1001.0
(signed word) muls8s::m#3 m zp ZP_WORD:8 2002.0
(signed word) muls8s::m#5 m zp ZP_WORD:8 2002.0
(signed word) muls8s::return
(signed word) muls8s::return#0 return zp ZP_WORD:8 701.0
(signed word) muls8s::return#2 return zp ZP_WORD:8 202.0
(word()) muls8u((byte) muls8u::a , (byte) muls8u::b)
(label) muls8u::@1
(label) muls8u::@2
(label) muls8u::@return
(byte) muls8u::a
(byte) muls8u::a#0 a zp ZP_BYTE:2 157.71428571428572
(byte) muls8u::b
(byte) muls8u::b#0 reg byte x 183.66666666666669
(byte) muls8u::i
(byte) muls8u::i#1 reg byte y 1501.5
(byte) muls8u::i#2 reg byte y 1001.0
(word) muls8u::m
(word) muls8u::m#1 m zp ZP_WORD:8 1001.0
(word) muls8u::m#3 m zp ZP_WORD:8 2002.0
(word) muls8u::return
(word) muls8u::return#0 return zp ZP_WORD:8 367.33333333333337
(word) muls8u::return#2 return zp ZP_WORD:8 202.0
(void()) multiply_error((byte) multiply_error::a , (byte) multiply_error::b , (word) multiply_error::ms , (word) multiply_error::ma)
(label) multiply_error::@1
(label) multiply_error::@2
@ -244,29 +308,6 @@
(word) print_word::w#4 w zp ZP_WORD:8 4.0
(word) print_word::w#5 w zp ZP_WORD:8 4.666666666666666
(word~) print_word::w#9 w zp ZP_WORD:8 4.0
(signed word()) signed_multiply((signed byte) signed_multiply::a , (signed byte) signed_multiply::b)
(byte~) signed_multiply::$12 reg byte a 4.0
(byte/signed byte/word/signed word/dword/signed dword~) signed_multiply::$16 reg byte a 4.0
(byte/signed byte/word/signed word/dword/signed dword~) signed_multiply::$17 reg byte a 4.0
(byte~) signed_multiply::$6 reg byte a 4.0
(label) signed_multiply::@1
(label) signed_multiply::@2
(label) signed_multiply::@3
(label) signed_multiply::@4
(label) signed_multiply::@6
(label) signed_multiply::@return
(signed byte) signed_multiply::a
(signed byte) signed_multiply::a#0 reg byte y 7.357142857142858
(signed byte) signed_multiply::b
(signed byte) signed_multiply::b#0 b zp ZP_BYTE:3 9.363636363636363
(word) signed_multiply::m
(word) signed_multiply::m#0 m zp ZP_WORD:12 2.0
(word) signed_multiply::m#1 m zp ZP_WORD:12 4.0
(word) signed_multiply::m#2 m zp ZP_WORD:12 4.0
(word) signed_multiply::m#4 m zp ZP_WORD:12 1.3333333333333333
(word) signed_multiply::m#5 m zp ZP_WORD:12 2.5
(signed word) signed_multiply::return
(signed word) signed_multiply::return#2 return zp ZP_WORD:12 202.0
(void()) signed_multiply_error((signed byte) signed_multiply_error::a , (signed byte) signed_multiply_error::b , (signed word) signed_multiply_error::ms , (signed word) signed_multiply_error::ma)
(label) signed_multiply_error::@1
(label) signed_multiply_error::@2
@ -311,76 +352,35 @@
(signed word) signed_multiply_results_compare::ms
(signed word) signed_multiply_results_compare::ms#0 ms zp ZP_WORD:8 20.4
(const string) signed_multiply_results_compare::str str = (string) "signed multiply results match!@"
(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:8 1001.0
(word) slow_multiply::m#3 m zp ZP_WORD:8 2002.0
(word) slow_multiply::return
(word) slow_multiply::return#0 return zp ZP_WORD:8 367.33333333333337
(word) slow_multiply::return#2 return zp ZP_WORD:8 202.0
(signed word()) slow_signed_multiply((signed byte) slow_signed_multiply::a , (signed byte) slow_signed_multiply::b)
(label) slow_signed_multiply::@1
(label) slow_signed_multiply::@2
(label) slow_signed_multiply::@3
(label) slow_signed_multiply::@5
(label) slow_signed_multiply::@return
(signed byte) slow_signed_multiply::a
(signed byte) slow_signed_multiply::a#0 a zp ZP_BYTE:2 175.58333333333334
(signed byte) slow_signed_multiply::b
(signed byte) slow_signed_multiply::b#0 reg byte x 191.1818181818182
(signed byte) slow_signed_multiply::i
(signed byte) slow_signed_multiply::i#1 reg byte y 1501.5
(signed byte) slow_signed_multiply::i#2 reg byte y 1001.0
(signed byte) slow_signed_multiply::j
(signed byte) slow_signed_multiply::j#1 reg byte y 1501.5
(signed byte) slow_signed_multiply::j#2 reg byte y 1001.0
(signed word) slow_signed_multiply::m
(signed word) slow_signed_multiply::m#1 m zp ZP_WORD:8 1001.0
(signed word) slow_signed_multiply::m#2 m zp ZP_WORD:8 1001.0
(signed word) slow_signed_multiply::m#3 m zp ZP_WORD:8 2002.0
(signed word) slow_signed_multiply::m#5 m zp ZP_WORD:8 2002.0
(signed word) slow_signed_multiply::return
(signed word) slow_signed_multiply::return#0 return zp ZP_WORD:8 701.0
(signed word) slow_signed_multiply::return#2 return zp ZP_WORD:8 202.0
zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 slow_signed_multiply::a#0 multiply_results_compare::a#6 multiply_results_compare::a#1 slow_multiply::a#0 init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 init_multiply::dir#2 init_multiply::dir#3 ]
zp ZP_BYTE:3 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::b#1 signed_multiply::b#0 signed_multiply_error::b#0 multiply_results_compare::b#2 multiply_results_compare::b#1 multiply_error::b#0 ]
zp ZP_WORD:4 [ line_cursor#23 line_cursor#45 line_cursor#10 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#14 print_str::str#16 print_str::str#0 init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ]
zp ZP_WORD:8 [ print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#9 print_word::w#10 print_word::w#11 multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 signed_multiply_error::ms#0 signed_multiply_results_compare::ms#0 slow_signed_multiply::return#2 slow_signed_multiply::m#5 slow_signed_multiply::return#0 slow_signed_multiply::m#3 slow_signed_multiply::m#1 slow_signed_multiply::m#2 multiply_error::ms#0 multiply_results_compare::ms#0 slow_multiply::return#2 slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ]
zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 muls8s::a#0 multiply_results_compare::a#6 multiply_results_compare::a#1 muls8u::a#0 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_BYTE:3 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::b#1 mulf8s::b#0 signed_multiply_error::b#0 multiply_results_compare::b#2 multiply_results_compare::b#1 multiply_error::b#0 ]
zp ZP_WORD:4 [ line_cursor#23 line_cursor#45 line_cursor#10 line_cursor#1 multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:6 [ print_str::str#14 print_str::str#16 print_str::str#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
zp ZP_WORD:8 [ print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#9 print_word::w#10 print_word::w#11 multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 signed_multiply_error::ms#0 signed_multiply_results_compare::ms#0 muls8s::return#2 muls8s::m#5 muls8s::return#0 muls8s::m#3 muls8s::m#1 muls8s::m#2 multiply_error::ms#0 multiply_results_compare::ms#0 muls8u::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#9 print_byte::b#1 print_byte::b#2 ]
reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
zp ZP_WORD:10 [ char_cursor#78 char_cursor#129 char_cursor#128 char_cursor#124 char_cursor#141 char_cursor#30 char_cursor#123 char_cursor#17 char_cursor#122 char_cursor#176 char_cursor#180 char_cursor#1 char_cursor#126 char_cursor#201 ]
reg byte x [ print_sbyte::b#4 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#0 ]
zp ZP_WORD:12 [ signed_multiply::m#4 signed_multiply::m#5 signed_multiply::m#1 signed_multiply::m#0 signed_multiply::m#2 signed_multiply::return#2 signed_multiply_results_compare::ma#0 signed_multiply_error::ma#0 multiply::return#2 multiply::return#0 multiply::return#3 multiply_results_compare::ma#0 multiply_error::ma#0 ]
reg byte a [ multiply::a#2 multiply::a#1 multiply::a#4 ]
reg byte x [ multiply::b#2 multiply::b#1 multiply::b#4 ]
reg byte y [ slow_signed_multiply::i#2 slow_signed_multiply::i#1 ]
reg byte y [ slow_signed_multiply::j#2 slow_signed_multiply::j#1 ]
reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ]
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_signed_multiply::b#0 ]
reg byte y [ signed_multiply::a#0 ]
zp ZP_WORD:12 [ mulf8s::m#4 mulf8s::m#5 mulf8s::m#1 mulf8s::m#0 mulf8s::m#2 mulf8s::return#2 signed_multiply_results_compare::ma#0 signed_multiply_error::ma#0 mulf8u::return#2 mulf8u::return#0 mulf8u::return#3 multiply_results_compare::ma#0 multiply_error::ma#0 ]
reg byte a [ mulf8u::a#2 mulf8u::a#3 mulf8u::a#1 ]
reg byte x [ mulf8u::b#2 mulf8u::b#3 mulf8u::b#1 ]
reg byte y [ muls8s::i#2 muls8s::i#1 ]
reg byte y [ muls8s::j#2 muls8s::j#1 ]
reg byte y [ muls8u::i#2 muls8u::i#1 ]
reg byte x [ mulf_init::c#2 mulf_init::c#1 ]
reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
reg byte x [ muls8s::b#0 ]
reg byte y [ mulf8s::a#0 ]
reg byte x [ signed_multiply_error::a#0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
reg byte a [ signed_multiply::$6 ]
reg byte a [ signed_multiply::$16 ]
reg byte a [ signed_multiply::$12 ]
reg byte a [ signed_multiply::$17 ]
reg byte x [ slow_multiply::b#0 ]
reg byte a [ mulf8s::$6 ]
reg byte a [ mulf8s::$16 ]
reg byte a [ mulf8s::$12 ]
reg byte a [ mulf8s::$17 ]
reg byte x [ muls8u::b#0 ]
reg byte x [ multiply_error::a#0 ]
reg byte a [ init_multiply::$2 ]
reg byte a [ init_multiply::$5 ]
reg byte a [ init_multiply::$6 ]
reg byte a [ mulf_init::$2 ]
reg byte a [ mulf_init::$5 ]
reg byte a [ mulf_init::$6 ]