diff --git a/src/main/java/dk/camelot64/kickc/test/multiply.kc b/src/main/java/dk/camelot64/kickc/test/multiply.kc index 193a160b5..b98eb22ac 100644 --- a/src/main/java/dk/camelot64/kickc/test/multiply.kc +++ b/src/main/java/dk/camelot64/kickc/test/multiply.kc @@ -18,14 +18,19 @@ void init_mul_tables() { // 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; + word sqr = 0; // sqr = (i*i)/4 + byte i_2 = 0; // i/2 for(word i : 1..511) { - // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number) - if((i&1)==0) sqr++; + if((i&1)==0) { + // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number) + sqr++; + // increase i/2 on even numbers + i_2++; + } *sqr_lo++ = sqr; // sqr = sqr + i/2 (when uneven 1/2 is not added here) - sqr = sqr + i>>1; + sqr = sqr + i_2; } } 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 fd478ab51..8ed86c03e 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,11 @@ init_mul_tables_asm: { rts } init_mul_tables: { - .label _7 = $a .label sqr_lo = 4 .label sqr_hi = 6 .label sqr = 8 .label i = 2 + ldx #0 lda #mul_sqr_hi+1 @@ -88,12 +88,12 @@ init_mul_tables: { sta sqr_lo lda #>mul_sqr_lo+1 sta sqr_lo+1 - lda #0 + txa sta sqr sta sqr+1 lda #1 sta i - lda #0 + txa sta i+1 b1: lda i @@ -104,6 +104,7 @@ init_mul_tables: { bne !+ inc sqr+1 !: + inx b2: lda sqr ldy #0 @@ -119,19 +120,13 @@ init_mul_tables: { bne !+ inc sqr_hi+1 !: - lda i+1 - ror - sta _7+1 - lda i - ror - sta _7 - lda sqr + txa clc - adc _7 + adc sqr sta sqr - lda sqr+1 - adc _7+1 - sta sqr+1 + bcc !+ + inc sqr+1 + !: inc i bne !+ inc i+1 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 6cfbc2a54..4a660ba75 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg @@ -67,28 +67,30 @@ init_mul_tables: scope:[init_mul_tables] from main [26] phi() [ ] ( main:2::init_mul_tables:5 [ ] ) to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [27] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(word) init_mul_tables::i#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ) - [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) + [27] (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) + [27] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(word) init_mul_tables::i#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) + [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ) + [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) to:init_mul_tables::@3 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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ) + [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ) + [31] (byte) init_mul_tables::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ) to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 - [31] (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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) - [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) - [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) - [34] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) - [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) - [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) - [37] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ) - [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ) - [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) - [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) - [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) + [32] (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) + [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) + [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_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::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) + [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) + [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) + [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) to:init_mul_tables::@return init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) 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 c5c407df2..fc54e8b32 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.log @@ -18,14 +18,19 @@ void init_mul_tables() { // 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; + word sqr = 0; // sqr = (i*i)/4 + byte i_2 = 0; // i/2 for(word i : 1..511) { - // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number) - if((i&1)==0) sqr++; + if((i&1)==0) { + // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number) + sqr++; + // increase i/2 on even numbers + i_2++; + } *sqr_lo++ = sqr; // sqr = sqr + i/2 (when uneven 1/2 is not added here) - sqr = sqr + i>>1; + sqr = sqr + i_2; } } @@ -80,6 +85,7 @@ void mul_tables_compare() { } } Adding pre/post-modifier (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr +Adding pre/post-modifier (byte) init_mul_tables::i_2 ← ++ (byte) init_mul_tables::i_2 Adding pre/post-modifier (byte*) init_mul_tables::sqr_lo ← ++ (byte*) init_mul_tables::sqr_lo Adding pre/post-modifier (byte*) init_mul_tables::sqr_hi ← ++ (byte*) init_mul_tables::sqr_hi PROGRAM @@ -99,6 +105,7 @@ proc (void()) init_mul_tables() (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i ← (byte/signed byte/word/signed word) 1 init_mul_tables::@1: (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i & (byte/signed byte/word/signed word) 1 @@ -106,6 +113,7 @@ init_mul_tables::@1: (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::i_2 ← ++ (byte) init_mul_tables::i_2 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 @@ -113,12 +121,11 @@ init_mul_tables::@2: (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr *((byte*) init_mul_tables::sqr_hi) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi ← ++ (byte*) init_mul_tables::sqr_hi - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr + (byte) init_mul_tables::i_2 + (word) init_mul_tables::sqr ← (word~) init_mul_tables::$7 (word) init_mul_tables::i ← ++ (word) init_mul_tables::i - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i != (word/signed word) 512 + if((boolean~) init_mul_tables::$8) goto init_mul_tables::@1 init_mul_tables::@return: return endproc // init_mul_tables() @@ -178,12 +185,12 @@ SYMBOLS (byte~) init_mul_tables::$5 (byte~) init_mul_tables::$6 (word~) init_mul_tables::$7 -(word~) init_mul_tables::$8 -(boolean~) init_mul_tables::$9 +(boolean~) init_mul_tables::$8 (label) init_mul_tables::@1 (label) init_mul_tables::@2 (label) init_mul_tables::@return (word) init_mul_tables::i +(byte) init_mul_tables::i_2 (word) init_mul_tables::sqr (byte*) init_mul_tables::sqr_hi (byte*) init_mul_tables::sqr_lo @@ -241,6 +248,7 @@ init_mul_tables: scope:[init_mul_tables] from (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 @@ -256,15 +264,15 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr *((byte*) init_mul_tables::sqr_hi) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi ← ++ (byte*) init_mul_tables::sqr_hi - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr + (byte) init_mul_tables::i_2 + (word) init_mul_tables::sqr ← (word~) init_mul_tables::$7 (word) init_mul_tables::i ← ++ (word) init_mul_tables::i - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i != (word/signed word) 512 + if((boolean~) init_mul_tables::$8) 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::i_2 ← ++ (byte) init_mul_tables::i_2 to:init_mul_tables::@2 init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@2 to:init_mul_tables::@return @@ -366,6 +374,7 @@ init_mul_tables: scope:[init_mul_tables] from (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 @@ -381,15 +390,15 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr *((byte*) init_mul_tables::sqr_hi) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi ← ++ (byte*) init_mul_tables::sqr_hi - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr + (byte) init_mul_tables::i_2 + (word) init_mul_tables::sqr ← (word~) init_mul_tables::$7 (word) init_mul_tables::i ← ++ (word) init_mul_tables::i - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i != (word/signed word) 512 + if((boolean~) 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 ← ++ (word) init_mul_tables::sqr + (byte) init_mul_tables::i_2 ← ++ (byte) init_mul_tables::i_2 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -487,6 +496,7 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 @@ -502,15 +512,15 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr *((byte*) init_mul_tables::sqr_hi) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi ← ++ (byte*) init_mul_tables::sqr_hi - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr + (byte) init_mul_tables::i_2 + (word) init_mul_tables::sqr ← (word~) init_mul_tables::$7 (word) init_mul_tables::i ← ++ (word) init_mul_tables::i - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i != (word/signed word) 512 + if((boolean~) 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 ← ++ (word) init_mul_tables::sqr + (byte) init_mul_tables::i_2 ← ++ (byte) init_mul_tables::i_2 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -619,9 +629,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#4 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#5 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -633,6 +645,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 (word) init_mul_tables::i#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 init_mul_tables::@3/(word) init_mul_tables::i#4 ) + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#4 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_hi#4 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_lo#4 ) (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 init_mul_tables::@3/(word) init_mul_tables::sqr#2 ) @@ -642,19 +655,20 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#3 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 + (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$7 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#3 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 ) (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::i_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -777,9 +791,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#4 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#5 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -791,6 +807,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 (word) init_mul_tables::i#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 init_mul_tables::@3/(word) init_mul_tables::i#4 ) + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#4 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_hi#4 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_lo#4 ) (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 init_mul_tables::@3/(word) init_mul_tables::sqr#2 ) @@ -800,19 +817,20 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#3 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 + (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$7 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#3 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 ) (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::i_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -941,8 +959,7 @@ INITIAL SSA SYMBOL TABLE (byte~) init_mul_tables::$5 (byte~) init_mul_tables::$6 (word~) init_mul_tables::$7 -(word~) init_mul_tables::$8 -(boolean~) init_mul_tables::$9 +(boolean~) init_mul_tables::$8 (label) init_mul_tables::@1 (label) init_mul_tables::@2 (label) init_mul_tables::@3 @@ -953,6 +970,12 @@ INITIAL SSA SYMBOL TABLE (word) init_mul_tables::i#2 (word) init_mul_tables::i#3 (word) init_mul_tables::i#4 +(byte) init_mul_tables::i_2 +(byte) init_mul_tables::i_2#0 +(byte) init_mul_tables::i_2#1 +(byte) init_mul_tables::i_2#2 +(byte) init_mul_tables::i_2#3 +(byte) init_mul_tables::i_2#4 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#0 (word) init_mul_tables::sqr#1 @@ -1053,9 +1076,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#4 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#5 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -1067,6 +1092,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 (word) init_mul_tables::i#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 init_mul_tables::@3/(word) init_mul_tables::i#4 ) + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#4 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_hi#4 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_lo#4 ) (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 init_mul_tables::@3/(word) init_mul_tables::sqr#2 ) @@ -1076,19 +1102,20 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#3 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 + (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$7 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#3 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 ) (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::i_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1213,9 +1240,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*~) init_mul_tables::$1 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte*~) init_mul_tables::$1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#4 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#5 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -1226,6 +1255,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 (word) init_mul_tables::i#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 init_mul_tables::@3/(word) init_mul_tables::i#4 ) + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#4 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_hi#4 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_lo#4 ) (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#5 init_mul_tables::@3/(word) init_mul_tables::sqr#2 ) @@ -1235,19 +1265,20 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#3 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$8 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$8 + (word~) init_mul_tables::$7 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 + (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$7 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#3 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i#4 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 ) (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::i_2#3 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1338,8 +1369,9 @@ Alias (byte*) BGCOL#11 = (byte*) BGCOL#13 (byte*) BGCOL#6 Alias (byte*) BGCOL#0 = (byte*) BGCOL#16 (byte*) BGCOL#15 (byte*) BGCOL#14 Alias (byte*) init_mul_tables::sqr_lo#0 = (byte*~) init_mul_tables::$0 Alias (byte*) init_mul_tables::sqr_hi#0 = (byte*~) init_mul_tables::$1 -Alias (word) init_mul_tables::sqr#1 = (word~) init_mul_tables::$8 +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::i_2#3 = (byte) init_mul_tables::i_2#4 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 (word) init_mul_tables::i#2 = (word) init_mul_tables::i#4 @@ -1377,9 +1409,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*) init_mul_tables::sqr_lo#0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#3 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -1390,6 +1424,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 (word) init_mul_tables::i#3 ← phi( init_mul_tables::@1/(word) init_mul_tables::i#2 init_mul_tables::@3/(word) init_mul_tables::i#2 ) + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_hi#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_hi#3 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables::@1/(byte*) init_mul_tables::sqr_lo#3 init_mul_tables::@3/(byte*) init_mul_tables::sqr_lo#3 ) (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 ) @@ -1399,14 +1434,14 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#3 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#3 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1514,9 +1549,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*) init_mul_tables::sqr_lo#0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -1526,6 +1563,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -1533,14 +1571,14 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1636,9 +1674,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*) init_mul_tables::sqr_lo#0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -1648,6 +1688,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -1655,14 +1696,14 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1757,9 +1798,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*) init_mul_tables::sqr_lo#0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -1769,6 +1812,7 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -1776,14 +1820,14 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 - (boolean~) init_mul_tables::$9 ← (word) init_mul_tables::i#1 != (word/signed word) 512 - if((boolean~) init_mul_tables::$9) goto init_mul_tables::@1 + (boolean~) init_mul_tables::$8 ← (word) init_mul_tables::i#1 != (word/signed word) 512 + if((boolean~) 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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1849,7 +1893,7 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare @end: scope:[] from @4 Simple Condition (boolean~) init_mul_tables::$4 if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 -Simple Condition (boolean~) init_mul_tables::$9 if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 +Simple Condition (boolean~) init_mul_tables::$8 if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 Simple Condition (boolean~) mul_tables_compare::$1 if(*((byte[512]) mul_sqr_lo#0 + (byte) mul_tables_compare::i#10)==*((byte[512]) asm_mul_sqr_lo#0 + (byte) mul_tables_compare::i#10)) goto mul_tables_compare::@2 Simple Condition (boolean~) mul_tables_compare::$5 if(*((byte*~) mul_tables_compare::$2 + (byte) mul_tables_compare::i#10)==*((byte*~) mul_tables_compare::$3 + (byte) mul_tables_compare::i#10)) goto mul_tables_compare::@3 Simple Condition (boolean~) mul_tables_compare::$7 if(*((byte[512]) mul_sqr_lo#0 + (byte) mul_tables_compare::i#10)==*((byte[512]) asm_mul_sqr_lo#0 + (byte) mul_tables_compare::i#10)) goto mul_tables_compare::@4 @@ -1880,9 +1924,11 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*) init_mul_tables::sqr_lo#0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 (byte*) init_mul_tables::sqr_hi#0 ← (byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 (word) init_mul_tables::sqr#0 ← (byte/signed byte/word/signed word) 0 + (byte) init_mul_tables::i_2#0 ← (byte/signed byte/word/signed word) 0 (word) init_mul_tables::i#0 ← (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -1891,6 +1937,7 @@ 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::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -1898,13 +1945,13 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 if((word) init_mul_tables::i#1!=(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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -1968,6 +2015,7 @@ Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte[512]) mul_sqr_lo#0 = { fill( 512, 0) } Constant (const byte[512]) mul_sqr_hi#0 = { fill( 512, 0) } Constant (const word) init_mul_tables::sqr#0 = 0 +Constant (const byte) init_mul_tables::i_2#0 = 0 Constant (const word) init_mul_tables::i#0 = 1 Constant (const byte[512]) asm_mul_sqr_lo#0 = { fill( 512, 0) } Constant (const byte[512]) asm_mul_sqr_hi#0 = { fill( 512, 0) } @@ -1995,6 +2043,7 @@ init_mul_tables: scope:[init_mul_tables] from main (byte*) init_mul_tables::sqr_hi#0 ← (const byte[512]) mul_sqr_hi#0 + (byte/signed byte/word/signed word) 1 to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(const byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(const word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -2003,6 +2052,7 @@ 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::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -2010,13 +2060,13 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 if((word) init_mul_tables::i#1!=(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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2100,6 +2150,7 @@ main::@return: scope:[main] from main::@2 init_mul_tables: scope:[init_mul_tables] from main to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(const byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(const byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(const byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(const word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -2108,6 +2159,7 @@ 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::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -2115,13 +2167,13 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 if((word) init_mul_tables::i#1!=(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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2195,6 +2247,7 @@ main::@return: scope:[main] from main::@2 init_mul_tables: scope:[init_mul_tables] from main to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(const byte) init_mul_tables::i_2#0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (byte*) init_mul_tables::sqr_hi#2 ← phi( init_mul_tables/(const byte*) init_mul_tables::sqr_hi#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_hi#1 ) (byte*) init_mul_tables::sqr_lo#2 ← phi( init_mul_tables/(const byte*) init_mul_tables::sqr_lo#0 init_mul_tables::@2/(byte*) init_mul_tables::sqr_lo#1 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(const word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) @@ -2203,6 +2256,7 @@ 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::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -2210,13 +2264,13 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 if((word) init_mul_tables::i#1!=(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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2271,6 +2325,9 @@ Inlining constant with var siblings (const word) init_mul_tables::sqr#0 Inlining constant with var siblings (const word) init_mul_tables::sqr#0 Inlining constant with var siblings (const word) init_mul_tables::sqr#0 Inlining constant with var siblings (const word) init_mul_tables::sqr#0 +Inlining constant with var siblings (const byte) init_mul_tables::i_2#0 +Inlining constant with var siblings (const byte) init_mul_tables::i_2#0 +Inlining constant with var siblings (const byte) init_mul_tables::i_2#0 Inlining constant with var siblings (const word) init_mul_tables::i#0 Inlining constant with var siblings (const word) init_mul_tables::i#0 Inlining constant with var siblings (const byte*) init_mul_tables::sqr_lo#0 @@ -2279,6 +2336,7 @@ Inlining constant with var siblings (const byte*) init_mul_tables::sqr_hi#0 Inlining constant with var siblings (const byte*) init_mul_tables::sqr_hi#0 Inlining constant with var siblings (const byte) mul_tables_compare::i#0 Inlining constant with var siblings (const byte) mul_tables_compare::i#0 +Constant inlined init_mul_tables::i_2#0 = (byte/signed byte/word/signed word) 0 Constant inlined mul_tables_compare::i#0 = (byte/signed byte/word/signed word) 0 Constant inlined init_mul_tables::sqr_lo#0 = (const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 Constant inlined init_mul_tables::sqr#0 = (byte/signed byte/word/signed word) 0 @@ -2307,6 +2365,7 @@ main::@return: scope:[main] from main::@2 init_mul_tables: scope:[init_mul_tables] from main to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) (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 ) (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 ) (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 ) @@ -2315,6 +2374,7 @@ 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::@2 to:init_mul_tables::@3 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) (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 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -2322,13 +2382,13 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 if((word) init_mul_tables::i#1!=(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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return @@ -2393,7 +2453,6 @@ FINAL SYMBOL TABLE (byte~) init_mul_tables::$2 (byte~) init_mul_tables::$5 (byte~) init_mul_tables::$6 -(word~) init_mul_tables::$7 (label) init_mul_tables::@1 (label) init_mul_tables::@2 (label) init_mul_tables::@3 @@ -2401,6 +2460,10 @@ FINAL SYMBOL TABLE (word) init_mul_tables::i (word) init_mul_tables::i#1 (word) init_mul_tables::i#2 +(byte) init_mul_tables::i_2 +(byte) init_mul_tables::i_2#1 +(byte) init_mul_tables::i_2#2 +(byte) init_mul_tables::i_2#3 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 (word) init_mul_tables::sqr#2 @@ -2508,6 +2571,7 @@ init_mul_tables_asm::@return: scope:[init_mul_tables_asm] from init_mul_tables_ init_mul_tables: scope:[init_mul_tables] from main to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@5 + (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@5/(byte~) init_mul_tables::i_2#5 ) (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::@5/(byte*~) init_mul_tables::sqr_hi#5 ) (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::@5/(byte*~) init_mul_tables::sqr_lo#5 ) (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@5/(word~) init_mul_tables::sqr#6 ) @@ -2517,9 +2581,12 @@ init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tabl 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::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 (word~) init_mul_tables::sqr#8 ← (word) init_mul_tables::sqr#2 + (byte~) init_mul_tables::i_2#7 ← (byte) init_mul_tables::i_2#1 to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@6 + (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@6/(byte~) init_mul_tables::i_2#6 init_mul_tables::@3/(byte~) init_mul_tables::i_2#7 ) (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@6/(word~) init_mul_tables::sqr#7 init_mul_tables::@3/(word~) init_mul_tables::sqr#8 ) (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 @@ -2527,8 +2594,7 @@ init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_ (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 - (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 + (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@5 to:init_mul_tables::@return @@ -2540,9 +2606,11 @@ init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@2 (word~) init_mul_tables::sqr#6 ← (word) init_mul_tables::sqr#1 (byte*~) init_mul_tables::sqr_lo#5 ← (byte*) init_mul_tables::sqr_lo#1 (byte*~) init_mul_tables::sqr_hi#5 ← (byte*) init_mul_tables::sqr_hi#1 + (byte~) init_mul_tables::i_2#5 ← (byte) init_mul_tables::i_2#2 to:init_mul_tables::@1 init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@1 (word~) init_mul_tables::sqr#7 ← (word) init_mul_tables::sqr#4 + (byte~) init_mul_tables::i_2#6 ← (byte) init_mul_tables::i_2#3 to:init_mul_tables::@2 Adding NOP phi() at start of @begin @@ -2567,6 +2635,8 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... +Propagating live ranges... +Propagating live ranges... CONTROL FLOW GRAPH - LIVE RANGES FOUND @begin: scope:[] from [0] phi() [ ] @@ -2640,52 +2710,60 @@ init_mul_tables: scope:[init_mul_tables] from main [27] phi() [ ] to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@5 - [28] (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::@5/(byte*~) init_mul_tables::sqr_hi#5 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [28] (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::@5/(byte*~) init_mul_tables::sqr_lo#5 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [28] (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@5/(word~) init_mul_tables::sqr#6 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [28] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@5/(word~) init_mul_tables::i#5 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [29] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] - [30] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@6 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] + [28] (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@5/(byte~) init_mul_tables::i_2#5 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] + [28] (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::@5/(byte*~) init_mul_tables::sqr_hi#5 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] + [28] (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::@5/(byte*~) init_mul_tables::sqr_lo#5 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] + [28] (word) init_mul_tables::sqr#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@5/(word~) init_mul_tables::sqr#6 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] + [28] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@5/(word~) init_mul_tables::i#5 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] + [29] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] + [30] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@6 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] 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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] - [32] (word~) init_mul_tables::sqr#8 ← (word) init_mul_tables::sqr#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#8 ] + [31] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] + [32] (byte) init_mul_tables::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] + [33] (word~) init_mul_tables::sqr#8 ← (word) init_mul_tables::sqr#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#1 init_mul_tables::sqr#8 ] + [34] (byte~) init_mul_tables::i_2#7 ← (byte) init_mul_tables::i_2#1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#8 init_mul_tables::i_2#7 ] to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@6 - [33] (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@6/(word~) init_mul_tables::sqr#7 init_mul_tables::@3/(word~) init_mul_tables::sqr#8 ) [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] - [34] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] - [35] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] - [36] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::sqr_lo#1 ] - [37] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::sqr_lo#1 init_mul_tables::$6 ] - [38] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::sqr_lo#1 ] - [39] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr#3 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] - [40] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#3 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::$7 ] - [41] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 ] - [42] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 init_mul_tables::i#1 ] - [43] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@5 [ init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 init_mul_tables::i#1 ] + [35] (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@6/(byte~) init_mul_tables::i_2#6 init_mul_tables::@3/(byte~) init_mul_tables::i_2#7 ) [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 ] + [35] (word) init_mul_tables::sqr#3 ← phi( init_mul_tables::@6/(word~) init_mul_tables::sqr#7 init_mul_tables::@3/(word~) init_mul_tables::sqr#8 ) [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 ] + [36] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 init_mul_tables::$5 ] + [37] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 ] + [38] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 ] + [39] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 init_mul_tables::$6 ] + [40] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 ] + [41] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr#3 init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] + [42] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 ] + [43] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 init_mul_tables::i#1 ] + [44] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@5 [ init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 init_mul_tables::i#1 ] to:init_mul_tables::@return init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 - [44] return [ ] + [45] return [ ] to:@return init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@2 - [45] (word~) init_mul_tables::i#5 ← (word) init_mul_tables::i#1 [ init_mul_tables::i#5 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 ] - [46] (word~) init_mul_tables::sqr#6 ← (word) init_mul_tables::sqr#1 [ init_mul_tables::i#5 init_mul_tables::sqr#6 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] - [47] (byte*~) init_mul_tables::sqr_lo#5 ← (byte*) init_mul_tables::sqr_lo#1 [ init_mul_tables::i#5 init_mul_tables::sqr#6 init_mul_tables::sqr_lo#5 init_mul_tables::sqr_hi#1 ] - [48] (byte*~) init_mul_tables::sqr_hi#5 ← (byte*) init_mul_tables::sqr_hi#1 [ init_mul_tables::i#5 init_mul_tables::sqr#6 init_mul_tables::sqr_lo#5 init_mul_tables::sqr_hi#5 ] + [46] (word~) init_mul_tables::i#5 ← (word) init_mul_tables::i#1 [ init_mul_tables::i#5 init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#1 ] + [47] (word~) init_mul_tables::sqr#6 ← (word) init_mul_tables::sqr#1 [ init_mul_tables::i#5 init_mul_tables::sqr#6 init_mul_tables::i_2#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] + [48] (byte*~) init_mul_tables::sqr_lo#5 ← (byte*) init_mul_tables::sqr_lo#1 [ init_mul_tables::i#5 init_mul_tables::sqr#6 init_mul_tables::sqr_lo#5 init_mul_tables::i_2#2 init_mul_tables::sqr_hi#1 ] + [49] (byte*~) init_mul_tables::sqr_hi#5 ← (byte*) init_mul_tables::sqr_hi#1 [ init_mul_tables::i#5 init_mul_tables::sqr#6 init_mul_tables::sqr_lo#5 init_mul_tables::sqr_hi#5 init_mul_tables::i_2#2 ] + [50] (byte~) init_mul_tables::i_2#5 ← (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#5 init_mul_tables::sqr#6 init_mul_tables::sqr_lo#5 init_mul_tables::sqr_hi#5 init_mul_tables::i_2#5 ] to:init_mul_tables::@1 init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@1 - [49] (word~) init_mul_tables::sqr#7 ← (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#7 ] + [51] (word~) init_mul_tables::sqr#7 ← (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#7 ] + [52] (byte~) init_mul_tables::i_2#6 ← (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#7 init_mul_tables::i_2#6 ] to:init_mul_tables::@2 -Created 6 initial phi equivalence classes +Created 8 initial phi equivalence classes Coalesced [24] mul_tables_compare::i#11 ← mul_tables_compare::i#1 -Coalesced [32] init_mul_tables::sqr#8 ← init_mul_tables::sqr#2 -Coalesced [45] init_mul_tables::i#5 ← init_mul_tables::i#1 -Coalesced [46] init_mul_tables::sqr#6 ← init_mul_tables::sqr#1 -Coalesced [47] init_mul_tables::sqr_lo#5 ← init_mul_tables::sqr_lo#1 -Coalesced [48] init_mul_tables::sqr_hi#5 ← init_mul_tables::sqr_hi#1 -Coalesced [49] init_mul_tables::sqr#7 ← init_mul_tables::sqr#4 -Coalesced down to 5 phi equivalence classes +Coalesced [33] init_mul_tables::sqr#8 ← init_mul_tables::sqr#2 +Coalesced [34] init_mul_tables::i_2#7 ← init_mul_tables::i_2#1 +Coalesced [46] init_mul_tables::i#5 ← init_mul_tables::i#1 +Coalesced [47] init_mul_tables::sqr#6 ← init_mul_tables::sqr#1 +Coalesced [48] init_mul_tables::sqr_lo#5 ← init_mul_tables::sqr_lo#1 +Coalesced [49] init_mul_tables::sqr_hi#5 ← init_mul_tables::sqr_hi#1 +Coalesced [50] init_mul_tables::i_2#5 ← init_mul_tables::i_2#2 +Coalesced [51] init_mul_tables::sqr#7 ← init_mul_tables::sqr#4 +Coalesced (already) [52] init_mul_tables::i_2#6 ← init_mul_tables::i_2#3 +Coalesced down to 6 phi equivalence classes Culled Empty Block (label) mul_tables_compare::@11 Culled Empty Block (label) init_mul_tables::@5 Culled Empty Block (label) init_mul_tables::@6 @@ -2707,6 +2785,7 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... +Propagating live ranges... CONTROL FLOW GRAPH - BEFORE EFFECTIVE LIVE RANGES @begin: scope:[] from [0] phi() [ ] @@ -2777,28 +2856,30 @@ init_mul_tables: scope:[init_mul_tables] from main [26] phi() [ ] to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [27] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(word) init_mul_tables::i#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] - [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] - [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] + [27] (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] + [27] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(word) init_mul_tables::i#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] + [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] + [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] to:init_mul_tables::@3 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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] + [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] + [31] (byte) init_mul_tables::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 - [31] (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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] - [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] - [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] - [34] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] - [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] - [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] - [37] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] - [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] - [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] - [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] - [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] + [32] (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] + [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] + [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_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::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] + [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] + [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] + [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] to:init_mul_tables::@return init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 [42] return [ ] @@ -2874,28 +2955,30 @@ init_mul_tables: scope:[init_mul_tables] from main [26] phi() [ ] ( main:2::init_mul_tables:5 [ ] ) to:init_mul_tables::@1 init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@2 - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [27] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(word) init_mul_tables::i#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) - [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ) - [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) + [27] (byte) init_mul_tables::i_2#3 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(byte) init_mul_tables::i_2#2 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) + [27] (word) init_mul_tables::i#2 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(word) init_mul_tables::i#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) + [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ) + [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) to:init_mul_tables::@3 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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ) + [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ) + [31] (byte) init_mul_tables::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ) to:init_mul_tables::@2 init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@3 - [31] (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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) - [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) - [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) - [34] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) - [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) - [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) - [37] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ) - [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ) - [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) - [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) - [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) + [32] (byte) init_mul_tables::i_2#2 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i_2#3 init_mul_tables::@3/(byte) init_mul_tables::i_2#1 ) [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) + [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_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::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) + [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_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::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_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::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) + [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) + [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) + [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) to:init_mul_tables::@return init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) @@ -2956,21 +3039,24 @@ VARIABLE REGISTER WEIGHTS (byte~) init_mul_tables::$2 22.0 (byte~) init_mul_tables::$5 22.0 (byte~) init_mul_tables::$6 22.0 -(word~) init_mul_tables::$7 22.0 (word) init_mul_tables::i (word) init_mul_tables::i#1 16.5 -(word) init_mul_tables::i#2 3.3846153846153846 +(word) init_mul_tables::i#2 2.5384615384615383 +(byte) init_mul_tables::i_2 +(byte) init_mul_tables::i_2#1 22.0 +(byte) init_mul_tables::i_2#2 4.4 +(byte) init_mul_tables::i_2#3 8.25 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 7.333333333333333 -(word) init_mul_tables::sqr#2 22.0 -(word) init_mul_tables::sqr#3 6.875 +(word) init_mul_tables::sqr#2 11.0 +(word) init_mul_tables::sqr#3 7.857142857142857 (word) init_mul_tables::sqr#4 11.0 (byte*) init_mul_tables::sqr_hi -(byte*) init_mul_tables::sqr_hi#1 4.4 -(byte*) init_mul_tables::sqr_hi#2 3.3000000000000003 +(byte*) init_mul_tables::sqr_hi#1 5.5 +(byte*) init_mul_tables::sqr_hi#2 3.0 (byte*) init_mul_tables::sqr_lo -(byte*) init_mul_tables::sqr_lo#1 2.75 -(byte*) init_mul_tables::sqr_lo#2 4.714285714285714 +(byte*) init_mul_tables::sqr_lo#1 3.142857142857143 +(byte*) init_mul_tables::sqr_lo#2 4.125 (void()) init_mul_tables_asm() (void()) main() (byte[512]) mul_sqr_hi @@ -2985,30 +3071,30 @@ Initial phi equivalence classes [ init_mul_tables::i#2 init_mul_tables::i#1 ] [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] +[ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_2#1 ] [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] Added variable init_mul_tables::$2 to zero page equivalence class [ init_mul_tables::$2 ] Added variable init_mul_tables::$5 to zero page equivalence class [ init_mul_tables::$5 ] Added variable init_mul_tables::$6 to zero page equivalence class [ init_mul_tables::$6 ] -Added variable init_mul_tables::$7 to zero page equivalence class [ init_mul_tables::$7 ] Complete equivalence classes [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] [ init_mul_tables::i#2 init_mul_tables::i#1 ] [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] +[ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_2#1 ] [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] [ init_mul_tables::$2 ] [ init_mul_tables::$5 ] [ init_mul_tables::$6 ] -[ init_mul_tables::$7 ] Allocated zp ZP_BYTE:2 [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] Allocated zp ZP_WORD:3 [ init_mul_tables::i#2 init_mul_tables::i#1 ] Allocated zp ZP_WORD:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] Allocated zp ZP_WORD:7 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] -Allocated zp ZP_WORD:9 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -Allocated zp ZP_BYTE:11 [ init_mul_tables::$2 ] -Allocated zp ZP_BYTE:12 [ init_mul_tables::$5 ] -Allocated zp ZP_BYTE:13 [ init_mul_tables::$6 ] -Allocated zp ZP_WORD:14 [ init_mul_tables::$7 ] +Allocated zp ZP_BYTE:9 [ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_2#1 ] +Allocated zp ZP_WORD:10 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] +Allocated zp ZP_BYTE:12 [ init_mul_tables::$2 ] +Allocated zp ZP_BYTE:13 [ init_mul_tables::$5 ] +Allocated zp ZP_BYTE:14 [ init_mul_tables::$6 ] INITIAL ASM //SEG0 Basic Upstart .pc = $801 "Basic" @@ -3182,113 +3268,113 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label _2 = $b - .label _5 = $c - .label _6 = $d - .label _7 = $e + .label _2 = $c + .label _5 = $d + .label _6 = $e .label sqr_lo = 5 .label sqr_hi = 7 - .label sqr = 9 + .label sqr = $a .label i = 3 + .label i_2 = 9 //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::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#0] -- pbuz1=pbuc1 + //SEG53 [27] phi (byte) init_mul_tables::i_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuz1=vbuc1 + lda #0 + sta i_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_hi+1 sta sqr_hi+1 - //SEG54 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 + //SEG55 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#2] -- pbuz1=pbuc1 lda #mul_sqr_lo+1 sta sqr_lo+1 - //SEG55 [27] phi (word) init_mul_tables::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#2] -- vwuz1=vbuc1 + //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 lda #0 sta sqr lda #0 sta sqr+1 - //SEG56 [27] phi (word) init_mul_tables::i#2 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#3] -- vwuz1=vbuc1 + //SEG57 [27] phi (word) init_mul_tables::i#2 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#4] -- vwuz1=vbuc1 lda #1 sta i lda #0 sta i+1 jmp b1 - //SEG57 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] + //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: - //SEG58 [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#0] -- register_copy - //SEG59 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (byte*) init_mul_tables::sqr_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy - //SEG60 [27] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy - //SEG61 [27] phi (word) init_mul_tables::i#2 = (word) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy + //SEG59 [27] phi (byte) init_mul_tables::i_2#3 = (byte) init_mul_tables::i_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 + //SEG61 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (byte*) init_mul_tables::sqr_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy + //SEG62 [27] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy + //SEG63 [27] phi (word) init_mul_tables::i#2 = (word) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#4] -- register_copy jmp b1 - //SEG62 init_mul_tables::@1 + //SEG64 init_mul_tables::@1 b1: - //SEG63 [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ) -- vbuz1=vwuz2_band_vbuc1 + //SEG65 [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ) -- vbuz1=vwuz2_band_vbuc1 lda i and #1 sta _2 - //SEG64 [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) -- vbuz1_neq_0_then_la1 + //SEG66 [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) -- vbuz1_neq_0_then_la1 lda _2 bne b2_from_b1 jmp b3 - //SEG65 init_mul_tables::@3 + //SEG67 init_mul_tables::@3 b3: - //SEG66 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG68 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - //SEG67 [31] 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] + //SEG69 [31] (byte) init_mul_tables::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ) -- vbuz1=_inc_vbuz1 + inc i_2 + //SEG70 [32] 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: - //SEG68 [31] 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#0] -- register_copy + //SEG71 [32] phi (byte) init_mul_tables::i_2#2 = (byte) init_mul_tables::i_2#3 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2#0] -- register_copy + //SEG72 [32] 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 jmp b2 - //SEG69 init_mul_tables::@2 + //SEG73 init_mul_tables::@2 b2: - //SEG70 [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuz1=_lo_vwuz2 + //SEG74 [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuz1=_lo_vwuz2 lda sqr sta _5 - //SEG71 [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuz2 + //SEG75 [34] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuz2 ldy #0 lda _5 sta (sqr_lo),y - //SEG72 [34] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + //SEG76 [35] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 inc sqr_lo bne !+ inc sqr_lo+1 !: - //SEG73 [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuz1=_hi_vwuz2 + //SEG77 [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuz1=_hi_vwuz2 lda sqr+1 sta _6 - //SEG74 [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuz2 + //SEG78 [37] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuz2 ldy #0 lda _6 sta (sqr_hi),y - //SEG75 [37] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + //SEG79 [38] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 inc sqr_hi bne !+ inc sqr_hi+1 !: - //SEG76 [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ) -- vwuz1=vwuz2_ror_1 - lda i+1 - ror - sta _7+1 - lda i - ror - sta _7 - //SEG77 [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 - lda sqr + //SEG80 [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda i_2 clc - adc _7 + adc sqr sta sqr - lda sqr+1 - adc _7+1 - sta sqr+1 - //SEG78 [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1=_inc_vwuz1 + bcc !+ + inc sqr+1 + !: + //SEG81 [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - //SEG79 [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1_neq_vwuc1_then_la1 + //SEG82 [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1_neq_vwuc1_then_la1 lda i cmp #<$200 bne b1_from_b2 @@ -3296,9 +3382,9 @@ init_mul_tables: { cmp #>$200 bne b1_from_b2 jmp breturn - //SEG80 init_mul_tables::@return + //SEG83 init_mul_tables::@return breturn: - //SEG81 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) + //SEG84 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) rts } @@ -3314,14 +3400,15 @@ Statement [18] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) Statement [19] if(*((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) mul_tables_compare::i#10)==*((const byte[512]) asm_mul_sqr_hi#0+(word/signed word) 256 + (byte) mul_tables_compare::i#10)) goto mul_tables_compare::@5 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement [20] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr_lo,xbnelb1incml0+2incml1+2clcinybnelb1 } always clobbers reg byte a reg byte x reg byte y -Statement [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ) always clobbers reg byte a -Statement [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) always clobbers reg byte a -Statement [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Statement [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) always clobbers reg byte a -Statement [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Statement [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ) always clobbers reg byte a -Statement [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) always clobbers reg byte a -Statement [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) always clobbers reg byte a +Statement [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_2#1 ] +Statement [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) always clobbers reg byte a +Statement [34] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:9 [ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_2#1 ] +Statement [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) always clobbers reg byte a +Statement [37] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y +Statement [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) always clobbers reg byte a +Statement [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) always clobbers reg byte a Statement [11] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2::mul_tables_compare:9 [ ] ) always clobbers reg byte a Statement [13] if(*((const byte[512]) mul_sqr_lo#0 + (byte) mul_tables_compare::i#10)==*((const byte[512]) asm_mul_sqr_lo#0 + (byte) mul_tables_compare::i#10)) goto mul_tables_compare::@2 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement [14] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a @@ -3332,41 +3419,39 @@ Statement [18] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) Statement [19] if(*((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) mul_tables_compare::i#10)==*((const byte[512]) asm_mul_sqr_hi#0+(word/signed word) 256 + (byte) mul_tables_compare::i#10)) goto mul_tables_compare::@5 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement [20] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr_lo,xbnelb1incml0+2incml1+2clcinybnelb1 } always clobbers reg byte a reg byte x reg byte y -Statement [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ) always clobbers reg byte a -Statement [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) always clobbers reg byte a -Statement [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Statement [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) always clobbers reg byte a -Statement [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) always clobbers reg byte y -Statement [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ) always clobbers reg byte a -Statement [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) always clobbers reg byte a -Statement [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) always clobbers reg byte a +Statement [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ) always clobbers reg byte a +Statement [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) always clobbers reg byte a +Statement [34] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y +Statement [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) always clobbers reg byte a +Statement [37] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) always clobbers reg byte y +Statement [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) always clobbers reg byte a +Statement [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_WORD:3 [ init_mul_tables::i#2 init_mul_tables::i#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_WORD:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] : zp ZP_WORD:5 , Potential registers zp ZP_WORD:7 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] : zp ZP_WORD:7 , -Potential registers zp ZP_WORD:9 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] : zp ZP_WORD:9 , -Potential registers zp ZP_BYTE:11 [ init_mul_tables::$2 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:12 [ init_mul_tables::$5 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 [ init_mul_tables::$6 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:14 [ init_mul_tables::$7 ] : zp ZP_WORD:14 , +Potential registers zp ZP_BYTE:9 [ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_2#1 ] : zp ZP_BYTE:9 , reg byte x , +Potential registers zp ZP_WORD:10 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] : zp ZP_WORD:10 , +Potential registers zp ZP_BYTE:12 [ init_mul_tables::$2 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ init_mul_tables::$5 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:14 [ init_mul_tables::$6 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [init_mul_tables] 47.21: zp ZP_WORD:9 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] 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 ] 22: zp ZP_WORD:14 [ init_mul_tables::$7 ] 19.88: zp ZP_WORD:3 [ init_mul_tables::i#2 init_mul_tables::i#1 ] 7.7: zp ZP_WORD:7 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] 7.46: zp ZP_WORD:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] +Uplift Scope [init_mul_tables] 37.19: zp ZP_WORD:10 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] 34.65: zp ZP_BYTE:9 [ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_2#1 ] 22: zp ZP_BYTE:12 [ init_mul_tables::$2 ] 22: zp ZP_BYTE:13 [ init_mul_tables::$5 ] 22: zp ZP_BYTE:14 [ init_mul_tables::$6 ] 19.04: zp ZP_WORD:3 [ init_mul_tables::i#2 init_mul_tables::i#1 ] 8.5: zp ZP_WORD:7 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] 7.27: zp ZP_WORD:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#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 3457 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 a [ init_mul_tables::$2 ] reg byte a [ init_mul_tables::$5 ] reg byte a [ init_mul_tables::$6 ] zp ZP_WORD:14 [ init_mul_tables::$7 ] zp ZP_WORD:3 [ init_mul_tables::i#2 init_mul_tables::i#1 ] zp ZP_WORD:7 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] zp ZP_WORD:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] -Uplifting [mul_tables_compare] best 3267 combination reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -Uplifting [main] best 3267 combination -Uplifting [init_mul_tables_asm] best 3267 combination -Uplifting [] best 3267 combination +Uplifting [init_mul_tables] best 3272 combination zp ZP_WORD:10 [ 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::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_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:3 [ init_mul_tables::i#2 init_mul_tables::i#1 ] zp ZP_WORD:7 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] zp ZP_WORD:5 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] +Uplifting [mul_tables_compare] best 3082 combination reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] +Uplifting [main] best 3082 combination +Uplifting [init_mul_tables_asm] best 3082 combination +Uplifting [] best 3082 combination Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ init_mul_tables::i#2 init_mul_tables::i#1 ] Allocated (was zp ZP_WORD:5) zp ZP_WORD:4 [ init_mul_tables::sqr_lo#2 init_mul_tables::sqr_lo#1 ] Allocated (was zp ZP_WORD:7) zp ZP_WORD:6 [ init_mul_tables::sqr_hi#2 init_mul_tables::sqr_hi#1 ] -Allocated (was zp ZP_WORD:9) zp ZP_WORD:8 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] -Allocated (was zp ZP_WORD:14) zp ZP_WORD:10 [ init_mul_tables::$7 ] +Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ init_mul_tables::sqr#3 init_mul_tables::sqr#4 init_mul_tables::sqr#1 init_mul_tables::sqr#2 ] ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -3535,105 +3620,103 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label _7 = $a .label sqr_lo = 4 .label sqr_hi = 6 .label sqr = 8 .label i = 2 //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::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#0] -- pbuz1=pbuc1 + //SEG53 [27] phi (byte) init_mul_tables::i_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuxx=vbuc1 + ldx #0 + //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_hi+1 sta sqr_hi+1 - //SEG54 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 + //SEG55 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#2] -- pbuz1=pbuc1 lda #mul_sqr_lo+1 sta sqr_lo+1 - //SEG55 [27] phi (word) init_mul_tables::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#2] -- vwuz1=vbuc1 + //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 lda #0 sta sqr lda #0 sta sqr+1 - //SEG56 [27] phi (word) init_mul_tables::i#2 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#3] -- vwuz1=vbuc1 + //SEG57 [27] phi (word) init_mul_tables::i#2 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#4] -- vwuz1=vbuc1 lda #1 sta i lda #0 sta i+1 jmp b1 - //SEG57 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] + //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: - //SEG58 [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#0] -- register_copy - //SEG59 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (byte*) init_mul_tables::sqr_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy - //SEG60 [27] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy - //SEG61 [27] phi (word) init_mul_tables::i#2 = (word) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy + //SEG59 [27] phi (byte) init_mul_tables::i_2#3 = (byte) init_mul_tables::i_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 + //SEG61 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (byte*) init_mul_tables::sqr_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy + //SEG62 [27] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy + //SEG63 [27] phi (word) init_mul_tables::i#2 = (word) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#4] -- register_copy jmp b1 - //SEG62 init_mul_tables::@1 + //SEG64 init_mul_tables::@1 b1: - //SEG63 [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG65 [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ) -- vbuaa=vwuz1_band_vbuc1 lda i and #1 - //SEG64 [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) -- vbuaa_neq_0_then_la1 + //SEG66 [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) -- vbuaa_neq_0_then_la1 cmp #0 bne b2_from_b1 jmp b3 - //SEG65 init_mul_tables::@3 + //SEG67 init_mul_tables::@3 b3: - //SEG66 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG68 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - //SEG67 [31] 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] + //SEG69 [31] (byte) init_mul_tables::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG70 [32] 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: - //SEG68 [31] 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#0] -- register_copy + //SEG71 [32] phi (byte) init_mul_tables::i_2#2 = (byte) init_mul_tables::i_2#3 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2#0] -- register_copy + //SEG72 [32] 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 jmp b2 - //SEG69 init_mul_tables::@2 + //SEG73 init_mul_tables::@2 b2: - //SEG70 [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuaa=_lo_vwuz1 + //SEG74 [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuaa=_lo_vwuz1 lda sqr - //SEG71 [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa + //SEG75 [34] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa ldy #0 sta (sqr_lo),y - //SEG72 [34] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + //SEG76 [35] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 inc sqr_lo bne !+ inc sqr_lo+1 !: - //SEG73 [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuaa=_hi_vwuz1 + //SEG77 [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuaa=_hi_vwuz1 lda sqr+1 - //SEG74 [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa + //SEG78 [37] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa ldy #0 sta (sqr_hi),y - //SEG75 [37] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + //SEG79 [38] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 inc sqr_hi bne !+ inc sqr_hi+1 !: - //SEG76 [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ) -- vwuz1=vwuz2_ror_1 - lda i+1 - ror - sta _7+1 - lda i - ror - sta _7 - //SEG77 [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 - lda sqr + //SEG80 [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1=vwuz1_plus_vbuxx + txa clc - adc _7 + adc sqr sta sqr - lda sqr+1 - adc _7+1 - sta sqr+1 - //SEG78 [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1=_inc_vwuz1 + bcc !+ + inc sqr+1 + !: + //SEG81 [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - //SEG79 [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1_neq_vwuc1_then_la1 + //SEG82 [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1_neq_vwuc1_then_la1 lda i cmp #<$200 bne b1_from_b2 @@ -3641,9 +3724,9 @@ init_mul_tables: { cmp #>$200 bne b1_from_b2 jmp breturn - //SEG80 init_mul_tables::@return + //SEG83 init_mul_tables::@return breturn: - //SEG81 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) + //SEG84 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) rts } @@ -3669,7 +3752,9 @@ 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 +Replacing instruction lda #0 with TXA Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b5 with b1 Replacing label b2_from_b1 with b2 @@ -3721,25 +3806,28 @@ FINAL SYMBOL TABLE (byte~) init_mul_tables::$2 reg byte a 22.0 (byte~) init_mul_tables::$5 reg byte a 22.0 (byte~) init_mul_tables::$6 reg byte a 22.0 -(word~) init_mul_tables::$7 $7 zp ZP_WORD:10 22.0 (label) init_mul_tables::@1 (label) init_mul_tables::@2 (label) init_mul_tables::@3 (label) init_mul_tables::@return (word) init_mul_tables::i (word) init_mul_tables::i#1 i zp ZP_WORD:2 16.5 -(word) init_mul_tables::i#2 i zp ZP_WORD:2 3.3846153846153846 +(word) init_mul_tables::i#2 i zp ZP_WORD:2 2.5384615384615383 +(byte) init_mul_tables::i_2 +(byte) init_mul_tables::i_2#1 reg byte x 22.0 +(byte) init_mul_tables::i_2#2 reg byte x 4.4 +(byte) init_mul_tables::i_2#3 reg byte x 8.25 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 sqr zp ZP_WORD:8 7.333333333333333 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:8 22.0 -(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:8 6.875 +(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:8 11.0 +(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:8 7.857142857142857 (word) init_mul_tables::sqr#4 sqr zp ZP_WORD:8 11.0 (byte*) init_mul_tables::sqr_hi -(byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:6 4.4 -(byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:6 3.3000000000000003 +(byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:6 5.5 +(byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:6 3.0 (byte*) init_mul_tables::sqr_lo -(byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:4 2.75 -(byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:4 4.714285714285714 +(byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:4 3.142857142857143 +(byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:4 4.125 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -3769,11 +3857,11 @@ reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] zp ZP_WORD:2 [ init_mul_tables::i#2 init_mul_tables::i#1 ] 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 ] +reg byte x [ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_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 ] reg byte a [ init_mul_tables::$2 ] reg byte a [ init_mul_tables::$5 ] reg byte a [ init_mul_tables::$6 ] -zp ZP_WORD:10 [ init_mul_tables::$7 ] FINAL CODE //SEG0 Basic Upstart @@ -3905,103 +3993,101 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label _7 = $a .label sqr_lo = 4 .label sqr_hi = 6 .label sqr = 8 .label i = 2 //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::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#0] -- pbuz1=pbuc1 + //SEG53 [27] phi (byte) init_mul_tables::i_2#3 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vbuxx=vbuc1 + ldx #0 + //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_hi+1 sta sqr_hi+1 - //SEG54 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- pbuz1=pbuc1 + //SEG55 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (const byte[512]) mul_sqr_lo#0+(byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#2] -- pbuz1=pbuc1 lda #mul_sqr_lo+1 sta sqr_lo+1 - //SEG55 [27] phi (word) init_mul_tables::sqr#4 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#2] -- vwuz1=vbuc1 - lda #0 + //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 sta sqr sta sqr+1 - //SEG56 [27] phi (word) init_mul_tables::i#2 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#3] -- vwuz1=vbuc1 + //SEG57 [27] phi (word) init_mul_tables::i#2 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#4] -- vwuz1=vbuc1 lda #1 sta i - lda #0 + txa sta i+1 - //SEG57 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] - //SEG58 [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#0] -- register_copy - //SEG59 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (byte*) init_mul_tables::sqr_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy - //SEG60 [27] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy - //SEG61 [27] phi (word) init_mul_tables::i#2 = (word) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy - //SEG62 init_mul_tables::@1 + //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::i_2#3 = (byte) init_mul_tables::i_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 + //SEG61 [27] phi (byte*) init_mul_tables::sqr_lo#2 = (byte*) init_mul_tables::sqr_lo#1 [phi:init_mul_tables::@2->init_mul_tables::@1#2] -- register_copy + //SEG62 [27] phi (word) init_mul_tables::sqr#4 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#3] -- register_copy + //SEG63 [27] phi (word) init_mul_tables::i#2 = (word) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#4] -- register_copy + //SEG64 init_mul_tables::@1 b1: - //SEG63 [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::$2 ] ) -- vbuaa=vwuz1_band_vbuc1 + //SEG65 [28] (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::$2 ] ) -- vbuaa=vwuz1_band_vbuc1 lda i and #1 - //SEG64 [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 ] ) -- vbuaa_neq_0_then_la1 + //SEG66 [29] if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#4 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 ] ) -- vbuaa_neq_0_then_la1 cmp #0 bne b2 - //SEG65 init_mul_tables::@3 - //SEG66 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG67 init_mul_tables::@3 + //SEG68 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#4 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#3 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 inc sqr bne !+ inc sqr+1 !: - //SEG67 [31] 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] - //SEG68 [31] 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#0] -- register_copy - //SEG69 init_mul_tables::@2 + //SEG69 [31] (byte) init_mul_tables::i_2#1 ← ++ (byte) init_mul_tables::i_2#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#2 init_mul_tables::i_2#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG70 [32] 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] + //SEG71 [32] phi (byte) init_mul_tables::i_2#2 = (byte) init_mul_tables::i_2#3 [phi:init_mul_tables::@1/init_mul_tables::@3->init_mul_tables::@2#0] -- register_copy + //SEG72 [32] 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 + //SEG73 init_mul_tables::@2 b2: - //SEG70 [32] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuaa=_lo_vwuz1 + //SEG74 [33] (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$5 ] ) -- vbuaa=_lo_vwuz1 lda sqr - //SEG71 [33] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa + //SEG75 [34] *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#2 init_mul_tables::sqr_hi#2 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa ldy #0 sta (sqr_lo),y - //SEG72 [34] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + //SEG76 [35] (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 inc sqr_lo bne !+ inc sqr_lo+1 !: - //SEG73 [35] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuaa=_hi_vwuz1 + //SEG77 [36] (byte~) init_mul_tables::$6 ← > (word) init_mul_tables::sqr#3 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 init_mul_tables::$6 ] ) -- vbuaa=_hi_vwuz1 lda sqr+1 - //SEG74 [36] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa + //SEG78 [37] *((byte*) init_mul_tables::sqr_hi#2) ← (byte~) init_mul_tables::$6 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_hi#2 init_mul_tables::sqr_lo#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- _deref_pbuz1=vbuaa ldy #0 sta (sqr_hi),y - //SEG75 [37] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 + //SEG79 [38] (byte*) init_mul_tables::sqr_hi#1 ← ++ (byte*) init_mul_tables::sqr_hi#2 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 init_mul_tables::sqr#3 ] ) -- pbuz1=_inc_pbuz1 inc sqr_hi bne !+ inc sqr_hi+1 !: - //SEG76 [38] (word~) init_mul_tables::$7 ← (word) init_mul_tables::i#2 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::sqr#3 init_mul_tables::$7 ] ) -- vwuz1=vwuz2_ror_1 - lda i+1 - ror - sta _7+1 - lda i - ror - sta _7 - //SEG77 [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (word~) init_mul_tables::$7 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 - lda sqr + //SEG80 [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#3 + (byte) init_mul_tables::i_2#2 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#2 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1=vwuz1_plus_vbuxx + txa clc - adc _7 + adc sqr sta sqr - lda sqr+1 - adc _7+1 - sta sqr+1 - //SEG78 [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1=_inc_vwuz1 + bcc !+ + inc sqr+1 + !: + //SEG81 [40] (word) init_mul_tables::i#1 ← ++ (word) init_mul_tables::i#2 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1=_inc_vwuz1 inc i bne !+ inc i+1 !: - //SEG79 [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 ] ) -- vwuz1_neq_vwuc1_then_la1 + //SEG82 [41] if((word) init_mul_tables::i#1!=(word/signed word) 512) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 init_mul_tables::sqr_lo#1 init_mul_tables::sqr_hi#1 init_mul_tables::i_2#2 ] ) -- vwuz1_neq_vwuc1_then_la1 lda i cmp #<$200 bne b1 lda i+1 cmp #>$200 bne b1 - //SEG80 init_mul_tables::@return - //SEG81 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) + //SEG83 init_mul_tables::@return + //SEG84 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) rts } 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 aa4fc5779..0afc74347 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym @@ -11,25 +11,28 @@ (byte~) init_mul_tables::$2 reg byte a 22.0 (byte~) init_mul_tables::$5 reg byte a 22.0 (byte~) init_mul_tables::$6 reg byte a 22.0 -(word~) init_mul_tables::$7 $7 zp ZP_WORD:10 22.0 (label) init_mul_tables::@1 (label) init_mul_tables::@2 (label) init_mul_tables::@3 (label) init_mul_tables::@return (word) init_mul_tables::i (word) init_mul_tables::i#1 i zp ZP_WORD:2 16.5 -(word) init_mul_tables::i#2 i zp ZP_WORD:2 3.3846153846153846 +(word) init_mul_tables::i#2 i zp ZP_WORD:2 2.5384615384615383 +(byte) init_mul_tables::i_2 +(byte) init_mul_tables::i_2#1 reg byte x 22.0 +(byte) init_mul_tables::i_2#2 reg byte x 4.4 +(byte) init_mul_tables::i_2#3 reg byte x 8.25 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 sqr zp ZP_WORD:8 7.333333333333333 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:8 22.0 -(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:8 6.875 +(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:8 11.0 +(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:8 7.857142857142857 (word) init_mul_tables::sqr#4 sqr zp ZP_WORD:8 11.0 (byte*) init_mul_tables::sqr_hi -(byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:6 4.4 -(byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:6 3.3000000000000003 +(byte*) init_mul_tables::sqr_hi#1 sqr_hi zp ZP_WORD:6 5.5 +(byte*) init_mul_tables::sqr_hi#2 sqr_hi zp ZP_WORD:6 3.0 (byte*) init_mul_tables::sqr_lo -(byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:4 2.75 -(byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:4 4.714285714285714 +(byte*) init_mul_tables::sqr_lo#1 sqr_lo zp ZP_WORD:4 3.142857142857143 +(byte*) init_mul_tables::sqr_lo#2 sqr_lo zp ZP_WORD:4 4.125 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -59,8 +62,8 @@ reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] zp ZP_WORD:2 [ init_mul_tables::i#2 init_mul_tables::i#1 ] 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 ] +reg byte x [ init_mul_tables::i_2#3 init_mul_tables::i_2#2 init_mul_tables::i_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 ] reg byte a [ init_mul_tables::$2 ] reg byte a [ init_mul_tables::$5 ] reg byte a [ init_mul_tables::$6 ] -zp ZP_WORD:10 [ init_mul_tables::$7 ]