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

Improved KC mul table gen.

This commit is contained in:
jespergravgaard 2017-12-28 14:46:31 +01:00
parent 5e25684cf9
commit d1ee716008
6 changed files with 529 additions and 528 deletions

View File

@ -165,13 +165,13 @@ public class AsmFragmentManager {
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz2(.*)", ".*=.*yy.*|.*z2.*z2.*", "ldy {z2}\n", "$1=$2_derefidx_vbuyy$3", null, mapZ3)); synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz2(.*)", ".*=.*yy.*|.*z2.*z2.*", "ldy {z2}\n", "$1=$2_derefidx_vbuyy$3", null, mapZ3));
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*yy.*", "ldy {z3}\n", "$1=$2_derefidx_vbuyy$3", null, null)); synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*yy.*", "ldy {z3}\n", "$1=$2_derefidx_vbuyy$3", null, null));
synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*xx.*", "ldx {z3}\n", "$1=$2_derefidx_vbuxx$3", null, null)); synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*xx.*", "ldx {z3}\n", "$1=$2_derefidx_vbuxx$3", null, null));
// Convert array indexing twice with A/zp1/zp2 to X/Y register // Convert array indexing twice with A/zp1/zp2 to X/Y register with a ldx/ldy prefix ( ..._derefidx_vbunn..._derefidx_vbunn... -> ..._derefidx_vbuxx..._derefidx_vbuxx... )
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", ".*aa.*aa.*aa.*|.*xx.*|.*aa.*=.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "tax\n", null)); synths.add(new FragmentSynthesis("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", ".*aa.*aa.*aa.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "tax\n", null));
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", ".*aa.*aa.*aa.*|.*yy.*|.*aa.*=.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "tay\n", null)); synths.add(new FragmentSynthesis("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", ".*aa.*aa.*aa.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "tay\n", null));
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*xx.*|.*z1.*=.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z1}\n", mapZ)); synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z1}\n", mapZ));
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*yy.*|.*z1.*=.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z1}\n", mapZ)); synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z1}\n", mapZ));
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*xx.*|.*z2.*=.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z2}\n", mapZ)); synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z2}\n", mapZ));
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*yy.*|.*z2.*=.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z2}\n", mapZ)); synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z2}\n", mapZ));
// Convert X/Y-based array indexing of a constant pointer into A-register by prefixing lda cn,x / lda cn,y ( ...pb.c1_derefidx_vbuxx... / ...pb.c1_derefidx_vbuyy... -> ...vb.aa... ) // Convert X/Y-based array indexing of a constant pointer into A-register by prefixing lda cn,x / lda cn,y ( ...pb.c1_derefidx_vbuxx... / ...pb.c1_derefidx_vbuyy... -> ...vb.aa... )
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*|.*c1.*c1.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, mapC)); synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*|.*c1.*c1.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, mapC));
synths.add(new FragmentSynthesis("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, null)); synths.add(new FragmentSynthesis("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, null));

View File

@ -17,18 +17,18 @@ byte[512] mul_sqr_hi;
// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4) // Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4)
void init_mul_tables() { void init_mul_tables() {
// If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 // If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4
byte* sqr_lo = mul_sqr_lo+1;
byte* sqr_hi = mul_sqr_hi+1;
word sqr = 0; // sqr = (x*x)/4 word sqr = 0; // sqr = (x*x)/4
byte x_2 = 0; // x/2 byte x_2 = 0; // x/2
for(word x : 1..511) { byte c = 0; // Counter used for determining x%2==0
if((x&1)==0) { byte* sqr_hi = mul_sqr_hi+1;
for(byte* sqr_lo = mul_sqr_lo+1; sqr_lo!=mul_sqr_lo+512; sqr_lo++) {
if((++c&1)==0) {
sqr++; // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number) sqr++; // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number)
x_2++; // increase i/2 on even numbers x_2++; // increase i/2 on even numbers
} }
*sqr_lo++ = <sqr; *sqr_lo = <sqr;
*sqr_hi++ = >sqr; *sqr_hi++ = >sqr;
sqr = sqr + x_2; // sqr = sqr + i/2 (when uneven the 1/2 is not added here ) sqr = sqr + x_2; // sqr = sqr + i/2 (when uneven the 1/2 is not added here - see above)
} }
} }

View File

@ -75,10 +75,10 @@ init_mul_tables_asm: {
rts rts
} }
init_mul_tables: { init_mul_tables: {
.label sqr_lo = 4 .label c = 2
.label sqr_hi = 6 .label sqr_hi = 5
.label sqr = 8 .label sqr = 7
.label x = 2 .label sqr_lo = 3
ldx #0 ldx #0
lda #<mul_sqr_hi+1 lda #<mul_sqr_hi+1
sta sqr_hi sta sqr_hi
@ -91,12 +91,10 @@ init_mul_tables: {
txa txa
sta sqr sta sqr
sta sqr+1 sta sqr+1
lda #1 sta c
sta x
txa
sta x+1
b1: b1:
lda x inc c
lda c
and #1 and #1
cmp #0 cmp #0
bne b2 bne b2
@ -109,12 +107,7 @@ init_mul_tables: {
lda sqr lda sqr
ldy #0 ldy #0
sta (sqr_lo),y sta (sqr_lo),y
inc sqr_lo
bne !+
inc sqr_lo+1
!:
lda sqr+1 lda sqr+1
ldy #0
sta (sqr_hi),y sta (sqr_hi),y
inc sqr_hi inc sqr_hi
bne !+ bne !+
@ -127,15 +120,15 @@ init_mul_tables: {
bcc !+ bcc !+
inc sqr+1 inc sqr+1
!: !:
inc x inc sqr_lo
bne !+ bne !+
inc x+1 inc sqr_lo+1
!: !:
lda x lda sqr_lo+1
cmp #<$200 cmp #>mul_sqr_lo+$200
bne b1 bne b1
lda x+1 lda sqr_lo
cmp #>$200 cmp #<mul_sqr_lo+$200
bne b1 bne b1
rts rts
} }

View File

@ -67,30 +67,30 @@ init_mul_tables: scope:[init_mul_tables] from main
[26] phi() [ ] ( main:2::init_mul_tables:5 [ ] ) [26] phi() [ ] ( main:2::init_mul_tables:5 [ ] )
to:init_mul_tables::@1 to:init_mul_tables::@1
init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2
[27] (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::x_2#2 ) [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ) [27] (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::x_2#2 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] )
[27] (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr_hi#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ) [27] (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr_hi#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] )
[27] (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ) [27] (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] )
[27] (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ) [27] (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] )
[27] (word) init_mul_tables::x#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(word) init_mul_tables::x#1 ) [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ) [27] (byte) init_mul_tables::c#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::c#1 ) [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::c#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] )
[28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::x#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::$2 ] ) [28] (byte) init_mul_tables::c#1 ← ++ (byte) init_mul_tables::c#2 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] )
[29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 ] ) [29] (byte~) init_mul_tables::$2 ← (byte) init_mul_tables::c#1 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::$2 ] )
[30] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 ] )
to:init_mul_tables::@3 to:init_mul_tables::@3
init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1
[30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::sqr#2 ] ) [31] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#3 init_mul_tables::c#1 init_mul_tables::sqr#2 ] )
[31] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::x_2#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::x_2#1 ] ) [32] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::sqr#2 init_mul_tables::x_2#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::sqr#2 init_mul_tables::x_2#1 ] )
to:init_mul_tables::@2 to:init_mul_tables::@2
init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3
[32] (byte) init_mul_tables::x_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#3 init_mul_tables::@3/(byte) init_mul_tables::x_2#1 ) [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) [33] (byte) init_mul_tables::x_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#3 init_mul_tables::@3/(byte) init_mul_tables::x_2#1 ) [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] )
[32] (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#4 init_mul_tables::@3/(word) init_mul_tables::sqr#2 ) [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) [33] (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#4 init_mul_tables::@3/(word) init_mul_tables::sqr#2 ) [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] )
[33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) [34] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] )
[34] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) [35] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] )
[35] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::x#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] )
[36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::x#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) [37] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] )
[37] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::x#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) [38] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::sqr_lo#2 init_mul_tables::c#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::c#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] )
[38] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 init_mul_tables::sqr#3 ] ) [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::sqr_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] )
[39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::x_2#2 [ init_mul_tables::x#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ) [40] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] )
[40] (word) init_mul_tables::x#1 ← ++ (word) init_mul_tables::x#2 [ init_mul_tables::x#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ) [41] if((byte*) init_mul_tables::sqr_lo#1!=(const byte[512]) mul_sqr_lo#0+(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::c#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] )
[41] if((word) init_mul_tables::x#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::x#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::x#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::x_2#2 ] )
to:init_mul_tables::@return to:init_mul_tables::@return
init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2
[42] return [ ] ( main:2::init_mul_tables:5 [ ] ) [42] return [ ] ( main:2::init_mul_tables:5 [ ] )

File diff suppressed because it is too large Load Diff

View File

@ -15,24 +15,24 @@
(label) init_mul_tables::@2 (label) init_mul_tables::@2
(label) init_mul_tables::@3 (label) init_mul_tables::@3
(label) init_mul_tables::@return (label) init_mul_tables::@return
(byte) init_mul_tables::c
(byte) init_mul_tables::c#1 c zp ZP_BYTE:2 2.357142857142857
(byte) init_mul_tables::c#2 c zp ZP_BYTE:2 22.0
(word) init_mul_tables::sqr (word) init_mul_tables::sqr
(word) init_mul_tables::sqr#1 sqr zp ZP_WORD:8 7.333333333333333 (word) init_mul_tables::sqr#1 sqr zp ZP_WORD:7 7.333333333333333
(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:8 11.0 (word) init_mul_tables::sqr#2 sqr zp ZP_WORD:7 11.0
(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:8 7.857142857142857 (word) init_mul_tables::sqr#3 sqr zp ZP_WORD:7 9.166666666666666
(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:8 11.0 (word) init_mul_tables::sqr#4 sqr zp ZP_WORD:7 8.25
(byte*) init_mul_tables::sqr_hi (byte*) init_mul_tables::sqr_hi
(byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:6 5.5 (byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:5 5.5
(byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:6 3.0 (byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:5 3.0
(byte*) init_mul_tables::sqr_lo (byte*) init_mul_tables::sqr_lo
(byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:4 3.142857142857143 (byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:3 16.5
(byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:4 4.125 (byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:3 2.5384615384615383
(word) init_mul_tables::x
(word) init_mul_tables::x#1 x zp ZP_WORD:2 16.5
(word) init_mul_tables::x#2 x zp ZP_WORD:2 2.5384615384615383
(byte) init_mul_tables::x_2 (byte) init_mul_tables::x_2
(byte) init_mul_tables::x_2#1 reg byte x 22.0 (byte) init_mul_tables::x_2#1 reg byte x 22.0
(byte) init_mul_tables::x_2#2 reg byte x 4.4 (byte) init_mul_tables::x_2#2 reg byte x 4.888888888888889
(byte) init_mul_tables::x_2#3 reg byte x 8.25 (byte) init_mul_tables::x_2#3 reg byte x 6.6000000000000005
(void()) init_mul_tables_asm() (void()) init_mul_tables_asm()
(label) init_mul_tables_asm::@return (label) init_mul_tables_asm::@return
(void()) main() (void()) main()
@ -59,11 +59,11 @@
(byte) mul_tables_compare::i#10 reg byte x 12.222222222222221 (byte) mul_tables_compare::i#10 reg byte x 12.222222222222221
reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ]
zp ZP_WORD:2 [ init_mul_tables::x#2 init_mul_tables::x#1 ] zp ZP_BYTE:2 [ init_mul_tables::c#2 init_mul_tables::c#1 ]
zp ZP_WORD:4 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] zp ZP_WORD:3 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ]
zp ZP_WORD:6 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] zp ZP_WORD:5 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ]
reg byte x [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] reg byte x [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ]
zp ZP_WORD:8 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] zp ZP_WORD:7 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ]
reg byte a [ init_mul_tables::$2 ] reg byte a [ init_mul_tables::$2 ]
reg byte a [ init_mul_tables::$5 ] reg byte a [ init_mul_tables::$5 ]
reg byte a [ init_mul_tables::$6 ] reg byte a [ init_mul_tables::$6 ]