From ff51d043564ec498b051213af8295b7f26e98c62 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Thu, 28 Dec 2017 15:10:56 +0100 Subject: [PATCH] Improved KC mul table gen. --- .../java/dk/camelot64/kickc/test/multiply.kc | 2 +- .../dk/camelot64/kickc/test/ref/multiply.asm | 21 +- .../dk/camelot64/kickc/test/ref/multiply.cfg | 4 +- .../dk/camelot64/kickc/test/ref/multiply.log | 192 +++++++++--------- .../dk/camelot64/kickc/test/ref/multiply.sym | 30 +-- 5 files changed, 125 insertions(+), 124 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/test/multiply.kc b/src/main/java/dk/camelot64/kickc/test/multiply.kc index e09263aed..5aca12bad 100644 --- a/src/main/java/dk/camelot64/kickc/test/multiply.kc +++ b/src/main/java/dk/camelot64/kickc/test/multiply.kc @@ -23,8 +23,8 @@ void init_mul_tables() { 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) 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) } *sqr_lo = sqr; diff --git a/src/main/java/dk/camelot64/kickc/test/ref/multiply.asm b/src/main/java/dk/camelot64/kickc/test/ref/multiply.asm index 9d312f1fb..1ca5469c0 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.asm +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.asm @@ -75,11 +75,12 @@ init_mul_tables_asm: { rts } init_mul_tables: { - .label c = 2 - .label sqr_hi = 5 + .label sqr_hi = 4 .label sqr = 7 - .label sqr_lo = 3 - ldx #0 + .label sqr_lo = 2 + .label x_2 = 6 + lda #0 + sta x_2 lda #mul_sqr_hi+1 @@ -88,21 +89,21 @@ init_mul_tables: { sta sqr_lo lda #>mul_sqr_lo+1 sta sqr_lo+1 - txa + lda #0 sta sqr sta sqr+1 - sta c + tax b1: - inc c - lda c + inx + txa and #1 cmp #0 bne b2 + inc x_2 inc sqr bne !+ inc sqr+1 !: - inx b2: lda sqr ldy #0 @@ -113,7 +114,7 @@ init_mul_tables: { bne !+ inc sqr_hi+1 !: - txa + lda x_2 clc adc sqr sta sqr diff --git a/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg b/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg index 3422f5319..204676e36 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg @@ -77,8 +77,8 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl [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 init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - [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 ] ) - [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 ] ) + [31] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 ] ) + [32] (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::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@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 ] ) diff --git a/src/main/java/dk/camelot64/kickc/test/ref/multiply.log b/src/main/java/dk/camelot64/kickc/test/ref/multiply.log index 1d1f64b48..c3e3b3a08 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.log @@ -23,8 +23,8 @@ void init_mul_tables() { 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) 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) } *sqr_lo = sqr; @@ -83,8 +83,8 @@ void mul_tables_compare() { } } Adding pre/post-modifier (byte) init_mul_tables::c ← ++ (byte) init_mul_tables::c -Adding pre/post-modifier (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr Adding pre/post-modifier (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 +Adding pre/post-modifier (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr Adding pre/post-modifier (byte*) init_mul_tables::sqr_hi ← ++ (byte*) init_mul_tables::sqr_hi Adding pre/post-modifier (byte*) init_mul_tables::sqr_lo ← ++ (byte*) init_mul_tables::sqr_lo PROGRAM @@ -112,8 +112,8 @@ init_mul_tables::@1: (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 + (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr init_mul_tables::@2: (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr *((byte*) init_mul_tables::sqr_lo) ← (byte~) init_mul_tables::$5 @@ -273,8 +273,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 to:init_mul_tables::@4 init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 + (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr to:init_mul_tables::@2 init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@2 to:init_mul_tables::@return @@ -400,8 +400,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 + (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -523,8 +523,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr (byte) init_mul_tables::x_2 ← ++ (byte) init_mul_tables::x_2 + (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -670,10 +670,10 @@ init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 (byte) init_mul_tables::c#4 ← phi( init_mul_tables::@1/(byte) init_mul_tables::c#1 ) (byte*) init_mul_tables::sqr_hi#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 ) (byte*) init_mul_tables::sqr_lo#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 ) - (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 + (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -833,10 +833,10 @@ init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 (byte) init_mul_tables::c#4 ← phi( init_mul_tables::@1/(byte) init_mul_tables::c#1 ) (byte*) init_mul_tables::sqr_hi#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 ) (byte*) init_mul_tables::sqr_lo#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 ) - (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 + (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1120,10 +1120,10 @@ init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 (byte) init_mul_tables::c#4 ← phi( init_mul_tables::@1/(byte) init_mul_tables::c#1 ) (byte*) init_mul_tables::sqr_hi#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 ) (byte*) init_mul_tables::sqr_lo#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 ) - (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 + (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1284,10 +1284,10 @@ init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 (byte) init_mul_tables::c#4 ← phi( init_mul_tables::@1/(byte) init_mul_tables::c#1 ) (byte*) init_mul_tables::sqr_hi#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 ) (byte*) init_mul_tables::sqr_lo#4 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 ) - (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 + (byte) init_mul_tables::x_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::x_2#4 ) (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1379,8 +1379,8 @@ Alias (byte*) BGCOL#0 = (byte*) BGCOL#16 (byte*) BGCOL#15 (byte*) BGCOL#14 Alias (byte*) init_mul_tables::sqr_hi#0 = (byte*~) init_mul_tables::$0 Alias (byte*) init_mul_tables::sqr_lo#0 = (byte*~) init_mul_tables::$1 Alias (word) init_mul_tables::sqr#1 = (word~) init_mul_tables::$7 -Alias (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#5 Alias (byte) init_mul_tables::x_2#3 = (byte) init_mul_tables::x_2#4 +Alias (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#5 Alias (byte*) init_mul_tables::sqr_lo#3 = (byte*) init_mul_tables::sqr_lo#4 Alias (byte*) init_mul_tables::sqr_hi#3 = (byte*) init_mul_tables::sqr_hi#4 Alias (byte) init_mul_tables::c#1 = (byte) init_mul_tables::c#4 @@ -1450,8 +1450,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1588,8 +1588,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1714,8 +1714,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1839,8 +1839,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1964,8 +1964,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((byte*) init_mul_tables::sqr_lo#1!=(byte*~) init_mul_tables::$8) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2080,8 +2080,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((byte*) init_mul_tables::sqr_lo#1!=(byte*~) init_mul_tables::$8) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2188,8 +2188,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((byte*) init_mul_tables::sqr_lo#1!=(const byte*) init_mul_tables::$8) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2285,8 +2285,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((byte*) init_mul_tables::sqr_lo#1!=(const byte*) init_mul_tables::$8) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2404,8 +2404,8 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ if((byte*) init_mul_tables::sqr_lo#1!=(const byte[512]) mul_sqr_lo#0+(word/signed word) 512) goto init_mul_tables::@1 to:init_mul_tables::@return init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2598,8 +2598,8 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@6 to:init_mul_tables::@3 init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 + (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 (word~) init_mul_tables::sqr#8 ← (word) init_mul_tables::sqr#2 (byte~) init_mul_tables::x_2#7 ← (byte) init_mul_tables::x_2#1 to:init_mul_tables::@2 @@ -2738,8 +2738,8 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl [31] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@6 [ 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 init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - [32] (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 ] - [33] (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 ] + [32] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] + [33] (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::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] [34] (word~) init_mul_tables::sqr#8 ← (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#1 init_mul_tables::sqr#8 ] [35] (byte~) init_mul_tables::x_2#7 ← (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::sqr#8 init_mul_tables::x_2#7 ] to:init_mul_tables::@2 @@ -2884,8 +2884,8 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl [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 ] to:init_mul_tables::@3 init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - [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 ] - [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 ] + [31] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#1 ] + [32] (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::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@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 ] @@ -2983,8 +2983,8 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl [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 init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@1 - [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 ] ) - [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 ] ) + [31] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 ] ) + [32] (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::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@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 ] ) @@ -3062,9 +3062,9 @@ VARIABLE REGISTER WEIGHTS (byte) init_mul_tables::c#2 22.0 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 7.333333333333333 -(word) init_mul_tables::sqr#2 11.0 +(word) init_mul_tables::sqr#2 22.0 (word) init_mul_tables::sqr#3 9.166666666666666 -(word) init_mul_tables::sqr#4 8.25 +(word) init_mul_tables::sqr#4 6.6000000000000005 (byte*) init_mul_tables::sqr_hi (byte*) init_mul_tables::sqr_hi#1 5.5 (byte*) init_mul_tables::sqr_hi#2 3.0 @@ -3072,9 +3072,9 @@ VARIABLE REGISTER WEIGHTS (byte*) init_mul_tables::sqr_lo#1 16.5 (byte*) init_mul_tables::sqr_lo#2 2.5384615384615383 (byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_2#1 22.0 +(byte) init_mul_tables::x_2#1 11.0 (byte) init_mul_tables::x_2#2 4.888888888888889 -(byte) init_mul_tables::x_2#3 6.6000000000000005 +(byte) init_mul_tables::x_2#3 8.25 (void()) init_mul_tables_asm() (void()) main() (byte[512]) mul_sqr_hi @@ -3340,13 +3340,13 @@ init_mul_tables: { jmp b3 //SEG68 init_mul_tables::@3 b3: - //SEG69 [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 ] ) -- vwuz1=_inc_vwuz1 + //SEG69 [31] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 ] ) -- vbuz1=_inc_vbuz1 + inc x_2 + //SEG70 [32] (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::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - //SEG70 [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 ] ) -- vbuz1=_inc_vbuz1 - inc x_2 //SEG71 [33] phi from init_mul_tables::@1 init_mul_tables::@3 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2] b2_from_b1: b2_from_b3: @@ -3452,22 +3452,22 @@ Potential registers zp ZP_BYTE:12 [ init_mul_tables::$5 ] : zp ZP_BYTE:12 , reg Potential registers zp ZP_BYTE:13 [ init_mul_tables::$6 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [init_mul_tables] 35.75: zp ZP_WORD:9 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] 33.49: zp ZP_BYTE:8 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] 24.36: zp ZP_BYTE:3 [ init_mul_tables::c#2 init_mul_tables::c#1 ] 22: zp ZP_BYTE:11 [ init_mul_tables::$2 ] 22: zp ZP_BYTE:12 [ init_mul_tables::$5 ] 22: zp ZP_BYTE:13 [ init_mul_tables::$6 ] 19.04: zp ZP_WORD:4 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] 8.5: zp ZP_WORD:6 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] +Uplift Scope [init_mul_tables] 45.1: zp ZP_WORD:9 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] 24.36: zp ZP_BYTE:3 [ init_mul_tables::c#2 init_mul_tables::c#1 ] 24.14: zp ZP_BYTE:8 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] 22: zp ZP_BYTE:11 [ init_mul_tables::$2 ] 22: zp ZP_BYTE:12 [ init_mul_tables::$5 ] 22: zp ZP_BYTE:13 [ init_mul_tables::$6 ] 19.04: zp ZP_WORD:4 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] 8.5: zp ZP_WORD:6 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] Uplift Scope [mul_tables_compare] 28.72: zp ZP_BYTE:2 [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] Uplift Scope [main] Uplift Scope [init_mul_tables_asm] Uplift Scope [] -Uplifting [init_mul_tables] best 3127 combination zp ZP_WORD:9 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] reg byte x [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] zp ZP_BYTE:3 [ init_mul_tables::c#2 init_mul_tables::c#1 ] reg byte a [ init_mul_tables::$2 ] reg byte a [ init_mul_tables::$5 ] reg byte a [ init_mul_tables::$6 ] zp ZP_WORD:4 [ 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 ] +Uplifting [init_mul_tables] best 3127 combination zp ZP_WORD:9 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] reg byte x [ init_mul_tables::c#2 init_mul_tables::c#1 ] zp ZP_BYTE:8 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] reg byte a [ init_mul_tables::$2 ] reg byte a [ init_mul_tables::$5 ] reg byte a [ init_mul_tables::$6 ] zp ZP_WORD:4 [ 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 ] Uplifting [mul_tables_compare] best 2937 combination reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] Uplifting [main] best 2937 combination Uplifting [init_mul_tables_asm] best 2937 combination Uplifting [] best 2937 combination -Attempting to uplift remaining variables inzp ZP_BYTE:3 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -Uplifting [init_mul_tables] best 2937 combination zp ZP_BYTE:3 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -Allocated (was zp ZP_WORD:4) zp ZP_WORD:3 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] -Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] +Uplifting [init_mul_tables] best 2937 combination zp ZP_BYTE:8 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] +Allocated (was zp ZP_WORD:4) zp ZP_WORD:2 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] +Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] +Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:6 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] ASSEMBLER BEFORE OPTIMIZATION @@ -3637,14 +3637,15 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label c = 2 - .label sqr_hi = 5 + .label sqr_hi = 4 .label sqr = 7 - .label sqr_lo = 3 + .label sqr_lo = 2 + .label x_2 = 6 //SEG52 [27] phi from init_mul_tables to init_mul_tables::@1 [phi:init_mul_tables->init_mul_tables::@1] b1_from_init_mul_tables: - //SEG53 [27] phi (byte) init_mul_tables::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuxx=vbuc1 - ldx #0 + //SEG53 [27] phi (byte) init_mul_tables::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuz1=vbuc1 + lda #0 + sta x_2 //SEG54 [27] phi (byte*) init_mul_tables::sqr_hi#2 = (const byte[512]) mul_sqr_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 lda #init_mul_tables::@1#4] -- vbuz1=vbuc1 - lda #0 - sta c + //SEG57 [27] phi (byte) init_mul_tables::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#4] -- vbuxx=vbuc1 + ldx #0 jmp b1 //SEG58 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] b1_from_b2: @@ -3674,10 +3674,10 @@ init_mul_tables: { jmp b1 //SEG64 init_mul_tables::@1 b1: - //SEG65 [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 ] ) -- vbuz1=_inc_vbuz1 - inc c - //SEG66 [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 ] ) -- vbuaa=vbuz1_band_vbuc1 - lda c + //SEG65 [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 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG66 [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 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa and #1 //SEG67 [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 ] ) -- vbuaa_neq_0_then_la1 cmp #0 @@ -3685,13 +3685,13 @@ init_mul_tables: { jmp b3 //SEG68 init_mul_tables::@3 b3: - //SEG69 [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 ] ) -- vwuz1=_inc_vwuz1 + //SEG69 [31] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 ] ) -- vbuz1=_inc_vbuz1 + inc x_2 + //SEG70 [32] (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::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - //SEG70 [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 ] ) -- vbuxx=_inc_vbuxx - inx //SEG71 [33] phi from init_mul_tables::@1 init_mul_tables::@3 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2] b2_from_b1: b2_from_b3: @@ -3715,8 +3715,8 @@ init_mul_tables: { bne !+ inc sqr_hi+1 !: - //SEG80 [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 ] ) -- vwuz1=vwuz1_plus_vbuxx - txa + //SEG80 [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 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda x_2 clc adc sqr sta sqr @@ -3764,9 +3764,8 @@ Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing instruction lda #0 with TXA -Removing instruction lda #0 Removing instruction lda #0 +Replacing instruction ldx #0 with TAX Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b5 with b1 @@ -3824,23 +3823,23 @@ FINAL SYMBOL TABLE (label) init_mul_tables::@3 (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 +(byte) init_mul_tables::c#1 reg byte x 2.357142857142857 +(byte) init_mul_tables::c#2 reg byte x 22.0 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 sqr zp ZP_WORD:7 7.333333333333333 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:7 11.0 +(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:7 22.0 (word) init_mul_tables::sqr#3 sqr zp ZP_WORD:7 9.166666666666666 -(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:7 8.25 +(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:7 6.6000000000000005 (byte*) init_mul_tables::sqr_hi -(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:5 3.0 +(byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:4 5.5 +(byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:4 3.0 (byte*) init_mul_tables::sqr_lo -(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:3 2.5384615384615383 +(byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:2 16.5 +(byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:2 2.5384615384615383 (byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_2#1 reg byte x 22.0 -(byte) init_mul_tables::x_2#2 reg byte x 4.888888888888889 -(byte) init_mul_tables::x_2#3 reg byte x 6.6000000000000005 +(byte) init_mul_tables::x_2#1 x_2 zp ZP_BYTE:6 11.0 +(byte) init_mul_tables::x_2#2 x_2 zp ZP_BYTE:6 4.888888888888889 +(byte) init_mul_tables::x_2#3 x_2 zp ZP_BYTE:6 8.25 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -3867,10 +3866,10 @@ FINAL SYMBOL TABLE (byte) mul_tables_compare::i#10 reg byte x 12.222222222222221 reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -zp ZP_BYTE:2 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -zp ZP_WORD:3 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#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::c#2 init_mul_tables::c#1 ] +zp ZP_WORD:2 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] +zp ZP_WORD:4 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] +zp ZP_BYTE:6 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] 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::$5 ] @@ -4006,13 +4005,14 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label c = 2 - .label sqr_hi = 5 + .label sqr_hi = 4 .label sqr = 7 - .label sqr_lo = 3 + .label sqr_lo = 2 + .label x_2 = 6 //SEG52 [27] phi from init_mul_tables to init_mul_tables::@1 [phi:init_mul_tables->init_mul_tables::@1] - //SEG53 [27] phi (byte) init_mul_tables::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuxx=vbuc1 - ldx #0 + //SEG53 [27] phi (byte) init_mul_tables::x_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuz1=vbuc1 + lda #0 + sta x_2 //SEG54 [27] phi (byte*) init_mul_tables::sqr_hi#2 = (const byte[512]) mul_sqr_hi#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 lda #mul_sqr_lo+1 sta sqr_lo+1 //SEG56 [27] phi (word) init_mul_tables::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#3] -- vwuz1=vbuc1 - txa + lda #0 sta sqr sta sqr+1 - //SEG57 [27] phi (byte) init_mul_tables::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#4] -- vbuz1=vbuc1 - sta c + //SEG57 [27] phi (byte) init_mul_tables::c#2 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#4] -- vbuxx=vbuc1 + tax //SEG58 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] //SEG59 [27] phi (byte) init_mul_tables::x_2#3 = (byte) init_mul_tables::x_2#2 [phi:init_mul_tables::@2->init_mul_tables::@1#0] -- register_copy //SEG60 [27] phi (byte*) init_mul_tables::sqr_hi#2 = (byte*) init_mul_tables::sqr_hi#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy @@ -4037,22 +4037,22 @@ init_mul_tables: { //SEG63 [27] phi (byte) init_mul_tables::c#2 = (byte) init_mul_tables::c#1 [phi:init_mul_tables::@2->init_mul_tables::@1#4] -- register_copy //SEG64 init_mul_tables::@1 b1: - //SEG65 [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 ] ) -- vbuz1=_inc_vbuz1 - inc c - //SEG66 [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 ] ) -- vbuaa=vbuz1_band_vbuc1 - lda c + //SEG65 [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 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG66 [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 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa and #1 //SEG67 [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 ] ) -- vbuaa_neq_0_then_la1 cmp #0 bne b2 //SEG68 init_mul_tables::@3 - //SEG69 [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 ] ) -- vwuz1=_inc_vwuz1 + //SEG69 [31] (byte) init_mul_tables::x_2#1 ← ++ (byte) init_mul_tables::x_2#3 [ init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 ] ) -- vbuz1=_inc_vbuz1 + inc x_2 + //SEG70 [32] (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::c#1 init_mul_tables::x_2#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::c#1 init_mul_tables::x_2#1 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - //SEG70 [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 ] ) -- vbuxx=_inc_vbuxx - inx //SEG71 [33] phi from init_mul_tables::@1 init_mul_tables::@3 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2] //SEG72 [33] phi (byte) init_mul_tables::x_2#2 = (byte) init_mul_tables::x_2#3 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2#0] -- register_copy //SEG73 [33] phi (word) init_mul_tables::sqr#3 = (word) init_mul_tables::sqr#4 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2#1] -- register_copy @@ -4072,8 +4072,8 @@ init_mul_tables: { bne !+ inc sqr_hi+1 !: - //SEG80 [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 ] ) -- vwuz1=vwuz1_plus_vbuxx - txa + //SEG80 [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 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda x_2 clc adc sqr sta sqr diff --git a/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym b/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym index 8cda98a77..0bb98fdee 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym @@ -16,23 +16,23 @@ (label) init_mul_tables::@3 (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 +(byte) init_mul_tables::c#1 reg byte x 2.357142857142857 +(byte) init_mul_tables::c#2 reg byte x 22.0 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 sqr zp ZP_WORD:7 7.333333333333333 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:7 11.0 +(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:7 22.0 (word) init_mul_tables::sqr#3 sqr zp ZP_WORD:7 9.166666666666666 -(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:7 8.25 +(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:7 6.6000000000000005 (byte*) init_mul_tables::sqr_hi -(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:5 3.0 +(byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:4 5.5 +(byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:4 3.0 (byte*) init_mul_tables::sqr_lo -(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:3 2.5384615384615383 +(byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:2 16.5 +(byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:2 2.5384615384615383 (byte) init_mul_tables::x_2 -(byte) init_mul_tables::x_2#1 reg byte x 22.0 -(byte) init_mul_tables::x_2#2 reg byte x 4.888888888888889 -(byte) init_mul_tables::x_2#3 reg byte x 6.6000000000000005 +(byte) init_mul_tables::x_2#1 x_2 zp ZP_BYTE:6 11.0 +(byte) init_mul_tables::x_2#2 x_2 zp ZP_BYTE:6 4.888888888888889 +(byte) init_mul_tables::x_2#3 x_2 zp ZP_BYTE:6 8.25 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -59,10 +59,10 @@ (byte) mul_tables_compare::i#10 reg byte x 12.222222222222221 reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -zp ZP_BYTE:2 [ init_mul_tables::c#2 init_mul_tables::c#1 ] -zp ZP_WORD:3 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#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::c#2 init_mul_tables::c#1 ] +zp ZP_WORD:2 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] +zp ZP_WORD:4 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] +zp ZP_BYTE:6 [ init_mul_tables::x_2#3 init_mul_tables::x_2#2 init_mul_tables::x_2#1 ] 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::$5 ]