From 8198b8f1689a9d051bfc5c1c069a9159fce0d94e Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Thu, 28 Dec 2017 04:13:31 +0100 Subject: [PATCH] Generating fast multiply table in both ASM and KC - now word-based generation. --- .../kickc/fragment/AsmFragmentManager.java | 13 +- .../fragment/asm/vbuaa=vwuz1_band_vbuc1.asm | 2 + ...vbuaa_eq_pbuc1_derefidx_vbuyy_then_la1.asm | 2 + .../kickc/fragment/asm/vwsz1=vwsz1_ror_1.asm | 4 + .../kickc/fragment/asm/vwsz1=vwsz2_ror_1.asm | 7 + .../kickc/fragment/asm/vwuz1=vwuz1_ror_1.asm | 2 + .../kickc/fragment/asm/vwuz1=vwuz2_ror_1.asm | 6 + .../fragment/asm/vwuz1_neq_0_then_la1.asm | 4 + .../fragment/asm/vwuz1_neq_vwuc1_then_la1.asm | 6 + .../kickc/model/SymbolTypeInference.java | 15 + .../java/dk/camelot64/kickc/test/multiply.kc | 18 +- .../dk/camelot64/kickc/test/ref/multiply.asm | 91 +- .../dk/camelot64/kickc/test/ref/multiply.cfg | 63 +- .../dk/camelot64/kickc/test/ref/multiply.log | 3023 ++++++----------- .../dk/camelot64/kickc/test/ref/multiply.sym | 57 +- 15 files changed, 1198 insertions(+), 2115 deletions(-) create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=vwuz1_band_vbuc1.asm create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_eq_pbuc1_derefidx_vbuyy_then_la1.asm create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz1_ror_1.asm create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz2_ror_1.asm create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz1_ror_1.asm create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz2_ror_1.asm create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_0_then_la1.asm create mode 100644 src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_vwuc1_then_la1.asm diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentManager.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentManager.java index 459625de4..b279d8f7e 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentManager.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentManager.java @@ -20,7 +20,7 @@ import java.util.regex.Pattern; */ public class AsmFragmentManager { - static boolean verboseFragmentLog = true; + static boolean verboseFragmentLog = false; /** * Cache for fragment files. Maps signature to the parsed file. @@ -165,10 +165,13 @@ public class AsmFragmentManager { synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz2(.*)", ".*=.*yy.*|.*z2.*z2.*", "ldy {z2}\n", "$1=$2_derefidx_vbuyy$3", null, mapZ3)); synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*yy.*", "ldy {z3}\n", "$1=$2_derefidx_vbuyy$3", null, null)); synths.add(new FragmentSynthesis("(.*)=(.*)_derefidx_vbuz3(.*)", ".*=.*xx.*", "ldx {z3}\n", "$1=$2_derefidx_vbuxx$3", null, null)); - synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z1}\n", mapZ)); - synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z1}\n", mapZ)); - synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z2}\n", mapZ)); - synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z2}\n", mapZ)); + // Convert array indexing twice with A/zp1/zp2 to X/Y register + synths.add(new FragmentSynthesis("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", ".*aa.*aa.*aa.*|.*xx.*|.*aa.*=.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "tax\n", null)); + synths.add(new FragmentSynthesis("(.*)_derefidx_vbuaa(.*)_derefidx_vbuaa(.*)", ".*aa.*aa.*aa.*|.*yy.*|.*aa.*=.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "tay\n", null)); + synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*xx.*|.*z1.*=.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z1}\n", mapZ)); + synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*yy.*|.*z1.*=.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z1}\n", mapZ)); + synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*xx.*|.*z2.*=.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z2}\n", mapZ)); + synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*yy.*|.*z2.*=.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z2}\n", mapZ)); // Convert X/Y-based array indexing of a constant pointer into A-register by prefixing lda cn,x / lda cn,y ( ...pb.c1_derefidx_vbuxx... / ...pb.c1_derefidx_vbuyy... -> ...vb.aa... ) synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*|.*c1.*c1.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, mapC)); synths.add(new FragmentSynthesis("(.*)=(.*c1.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, null)); diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=vwuz1_band_vbuc1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=vwuz1_band_vbuc1.asm new file mode 100644 index 000000000..4aea063a6 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=vwuz1_band_vbuc1.asm @@ -0,0 +1,2 @@ +lda {z1} +and #{c1} diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_eq_pbuc1_derefidx_vbuyy_then_la1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_eq_pbuc1_derefidx_vbuyy_then_la1.asm new file mode 100644 index 000000000..4ad54a5ab --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_eq_pbuc1_derefidx_vbuyy_then_la1.asm @@ -0,0 +1,2 @@ +cmp {c1},y +beq {la1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz1_ror_1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz1_ror_1.asm new file mode 100644 index 000000000..4e6837599 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz1_ror_1.asm @@ -0,0 +1,4 @@ +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz2_ror_1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz2_ror_1.asm new file mode 100644 index 000000000..993dbe53e --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vwsz1=vwsz2_ror_1.asm @@ -0,0 +1,7 @@ +lda {z2}+1 +cmp #$80 +ror +sta {z1}+1 +lda {z2} +ror +sta {z1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz1_ror_1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz1_ror_1.asm new file mode 100644 index 000000000..ad9864458 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz1_ror_1.asm @@ -0,0 +1,2 @@ +ror {z1}+1 +ror {z1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz2_ror_1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz2_ror_1.asm new file mode 100644 index 000000000..0e46c68cb --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1=vwuz2_ror_1.asm @@ -0,0 +1,6 @@ +lda {z2}+1 +ror +sta {z1}+1 +lda {z2} +ror +sta {z1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_0_then_la1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_0_then_la1.asm new file mode 100644 index 000000000..c32fba16e --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_0_then_la1.asm @@ -0,0 +1,4 @@ +lda {z1} +bne {la1} +lda {z1}+1 +bne {la1} diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_vwuc1_then_la1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_vwuc1_then_la1.asm new file mode 100644 index 000000000..382b67672 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vwuz1_neq_vwuc1_then_la1.asm @@ -0,0 +1,6 @@ +lda {z1} +cmp #<{c1} +bne {la1} +lda {z1}+1 +cmp #>{c1} +bne {la1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java b/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java index a8f2a82c6..7ab944bda 100644 --- a/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java +++ b/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java @@ -98,6 +98,8 @@ public class SymbolTypeInference { return inferPlus(type1, type2); } else if(Operator.MINUS.equals(operator)) { return inferMinus(type1, type2); + } else if(Operator.BOOL_AND.equals(operator)) { + return inferBoolAnd(type1, type2); } else if(Operator.SET_HIBYTE.equals(operator)) { return type1; } else if(Operator.SET_LOWBYTE.equals(operator)) { @@ -203,6 +205,19 @@ public class SymbolTypeInference { throw new RuntimeException("Type inference case not handled " + type1 + " " + "+" + " " + type2); } + private static SymbolType inferBoolAnd(SymbolType type1, SymbolType type2) { + if(SymbolType.isSByte(type1) && SymbolType.isSByte(type2)) { + return SymbolTypeInline.SBYTE; + } else if(SymbolType.isByte(type1) || SymbolType.isByte(type2)) { + return SymbolType.BYTE; + } else if(SymbolType.isSWord(type1) && SymbolType.isSWord(type2)) { + return SymbolType.SWORD; + } else if(SymbolType.isWord(type1) || SymbolType.isWord(type2)) { + return SymbolType.WORD; + } + throw new RuntimeException("Type inference case not handled " + type1 + " " + "+" + " " + type2); + } + private static SymbolType inferMinus(SymbolType type1, SymbolType type2) { if(type1 instanceof SymbolTypePointer && isInteger(type2)) { return new SymbolTypePointer(((SymbolTypePointer) type1).getElementType()); diff --git a/src/main/java/dk/camelot64/kickc/test/multiply.kc b/src/main/java/dk/camelot64/kickc/test/multiply.kc index 91516ace2..193a160b5 100644 --- a/src/main/java/dk/camelot64/kickc/test/multiply.kc +++ b/src/main/java/dk/camelot64/kickc/test/multiply.kc @@ -16,25 +16,17 @@ byte[512] mul_sqr_hi; 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; - // First do bytes 1-255 - byte 0 is already zero - for(byte i : 1..255) { + 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++; - mul_sqr_lo[i] = sqr; + *sqr_lo++ = sqr; // sqr = sqr + i/2 (when uneven 1/2 is not added here) sqr = sqr + i>>1; } - // Then do bytes 256-511 - for(i : 0..255) { - // 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++; - (mul_sqr_lo+$100)[i] = sqr; - // sqr = sqr + i/2 (when uneven 1/2 is not added here) - sqr = sqr + 128 + i>>1; - } } 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 b96a77b47..fd478ab51 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.asm +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.asm @@ -75,14 +75,28 @@ init_mul_tables_asm: { rts } init_mul_tables: { - .label _15 = 2 - .label sqr = 2 + .label _7 = $a + .label sqr_lo = 4 + .label sqr_hi = 6 + .label sqr = 8 + .label i = 2 + lda #mul_sqr_hi+1 + sta sqr_hi+1 + lda #mul_sqr_lo+1 + sta sqr_lo+1 lda #0 sta sqr sta sqr+1 - ldx #1 + lda #1 + sta i + lda #0 + sta i+1 b1: - txa + lda i and #1 cmp #0 bne b2 @@ -92,52 +106,41 @@ init_mul_tables: { !: b2: lda sqr - sta mul_sqr_lo,x - lda sqr+1 - sta mul_sqr_hi,x - txa - lsr - clc - adc sqr - sta sqr - bcc !+ - inc sqr+1 - !: - inx - cpx #0 - bne b1 - ldx #0 - b3: - txa - and #1 - cmp #0 - bne b4 - inc sqr + ldy #0 + sta (sqr_lo),y + inc sqr_lo bne !+ - inc sqr+1 + inc sqr_lo+1 !: - b4: - lda sqr - sta mul_sqr_lo+$100,x lda sqr+1 - sta mul_sqr_hi+$100,x - lda _15 - clc - adc #<$80 - sta _15 - bcc !+ - inc _15+1 + ldy #0 + sta (sqr_hi),y + inc sqr_hi + bne !+ + inc sqr_hi+1 !: - txa - lsr + lda i+1 + ror + sta _7+1 + lda i + ror + sta _7 + lda sqr clc - adc sqr + adc _7 sta sqr - bcc !+ - inc sqr+1 + lda sqr+1 + adc _7+1 + sta sqr+1 + inc i + bne !+ + inc i+1 !: - inx - cpx #0 - bne b3 + lda i + cmp #<$200 + bne b1 + lda i+1 + cmp #>$200 + bne b1 rts } 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 9592aa3a1..6cfbc2a54 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.cfg @@ -67,46 +67,29 @@ 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] (word) init_mul_tables::sqr#6 ← 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#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) - [27] (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) - [28] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ) - [29] if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) - to:init_mul_tables::@5 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ) - to:init_mul_tables::@2 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - [31] (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) - [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ) - [33] *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) - [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ) - [35] *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) - [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ) - [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ) - [38] (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) - [39] if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) + [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 ] ) to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@4 - [40] (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) - [40] (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) - [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ) - [42] if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) - to:init_mul_tables::@7 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - [43] (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ) - to:init_mul_tables::@4 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - [44] (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) - [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ) - [46] *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) - [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ) - [48] *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) - [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 ] ) - [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ) - [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ) - [52] (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) - [53] if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@3 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#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 ] ) + 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 ] ) to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 - [54] return [ ] ( main:2::init_mul_tables:5 [ ] ) +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 + [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) to:@return 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 90e9b3d5e..c5c407df2 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.log @@ -16,25 +16,17 @@ byte[512] mul_sqr_hi; 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; - // First do bytes 1-255 - byte 0 is already zero - for(byte i : 1..255) { + 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++; - mul_sqr_lo[i] = sqr; + *sqr_lo++ = sqr; // sqr = sqr + i/2 (when uneven 1/2 is not added here) sqr = sqr + i>>1; } - // Then do bytes 256-511 - for(i : 0..255) { - // 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++; - (mul_sqr_lo+$100)[i] = sqr; - // sqr = sqr + i/2 (when uneven 1/2 is not added here) - sqr = sqr + 128 + i>>1; - } } @@ -88,7 +80,8 @@ void mul_tables_compare() { } } Adding pre/post-modifier (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr -Adding pre/post-modifier (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr +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 (byte*) BGCOL ← (word) 53281 proc (void()) main() @@ -101,46 +94,31 @@ endproc // main() (byte[512]) mul_sqr_lo ← { fill( 512, 0) } (byte[512]) mul_sqr_hi ← { fill( 512, 0) } proc (void()) init_mul_tables() + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo ← (byte*~) init_mul_tables::$0 + (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 ← (byte/signed byte/word/signed word) 1 + (word) init_mul_tables::i ← (byte/signed byte/word/signed word) 1 init_mul_tables::@1: - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$2 ← ! (boolean~) init_mul_tables::$1 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr init_mul_tables::@2: - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_lo + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_hi + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - (byte) init_mul_tables::i ← (byte/signed byte/word/signed word) 0 -init_mul_tables::@3: - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$10 ← ! (boolean~) init_mul_tables::$9 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr -init_mul_tables::@4: - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto init_mul_tables::@3 + (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr + *((byte*) init_mul_tables::sqr_lo) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo ← ++ (byte*) init_mul_tables::sqr_lo + (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::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 init_mul_tables::@return: return endproc // init_mul_tables() @@ -192,32 +170,23 @@ SYMBOLS (byte[512]) asm_mul_sqr_hi (byte[512]) asm_mul_sqr_lo (void()) init_mul_tables() -(byte~) init_mul_tables::$0 -(boolean~) init_mul_tables::$1 -(boolean~) init_mul_tables::$10 -(byte*~) init_mul_tables::$11 -(byte~) init_mul_tables::$12 -(byte*~) init_mul_tables::$13 -(byte~) init_mul_tables::$14 -(word~) init_mul_tables::$15 -(byte~) init_mul_tables::$16 -(word~) init_mul_tables::$17 -(boolean~) init_mul_tables::$18 -(boolean~) init_mul_tables::$2 -(byte~) init_mul_tables::$3 -(byte~) init_mul_tables::$4 +(byte*~) init_mul_tables::$0 +(byte*~) init_mul_tables::$1 +(byte~) init_mul_tables::$2 +(boolean~) init_mul_tables::$3 +(boolean~) init_mul_tables::$4 (byte~) init_mul_tables::$5 -(word~) init_mul_tables::$6 -(boolean~) init_mul_tables::$7 -(byte~) init_mul_tables::$8 +(byte~) init_mul_tables::$6 +(word~) init_mul_tables::$7 +(word~) init_mul_tables::$8 (boolean~) init_mul_tables::$9 (label) init_mul_tables::@1 (label) init_mul_tables::@2 -(label) init_mul_tables::@3 -(label) init_mul_tables::@4 (label) init_mul_tables::@return -(byte) init_mul_tables::i +(word) init_mul_tables::i (word) init_mul_tables::sqr +(byte*) init_mul_tables::sqr_hi +(byte*) init_mul_tables::sqr_lo (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -267,60 +236,39 @@ main::@return: scope:[main] from main (byte[512]) mul_sqr_hi ← { fill( 512, 0) } to:@2 init_mul_tables: scope:[init_mul_tables] from + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo ← (byte*~) init_mul_tables::$0 + (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 ← (byte/signed byte/word/signed word) 1 + (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 - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$2 ← ! (boolean~) init_mul_tables::$1 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_lo + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_hi + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 + 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::$5 ← < (word) init_mul_tables::sqr + *((byte*) init_mul_tables::sqr_lo) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo ← ++ (byte*) init_mul_tables::sqr_lo + (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::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 + 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 to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i ← (byte/signed byte/word/signed word) 0 - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$10 ← ! (boolean~) init_mul_tables::$9 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto init_mul_tables::@3 - to:init_mul_tables::@8 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr - to:init_mul_tables::@4 -init_mul_tables::@8: scope:[init_mul_tables] from init_mul_tables::@4 +init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@2 to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@8 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 return to:@return @2: scope:[] from @1 @@ -393,7 +341,7 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare Eliminating unused variable - keeping the call (void~) main::$0 Eliminating unused variable - keeping the call (void~) main::$1 Eliminating unused variable - keeping the call (void~) main::$2 -Removing empty block init_mul_tables::@8 +Removing empty block init_mul_tables::@4 Removing empty block @3 Removing empty block mul_tables_compare::@10 CONTROL FLOW GRAPH @@ -413,58 +361,37 @@ main::@return: scope:[main] from main (byte[512]) mul_sqr_hi ← { fill( 512, 0) } to:@2 init_mul_tables: scope:[init_mul_tables] from + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo ← (byte*~) init_mul_tables::$0 + (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 ← (byte/signed byte/word/signed word) 1 + (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 - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$2 ← ! (boolean~) init_mul_tables::$1 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_lo + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_hi + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 + 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::$5 ← < (word) init_mul_tables::sqr + *((byte*) init_mul_tables::sqr_lo) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo ← ++ (byte*) init_mul_tables::sqr_lo + (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::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 + 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 to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i ← (byte/signed byte/word/signed word) 0 - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$10 ← ! (boolean~) init_mul_tables::$9 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto init_mul_tables::@3 - to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -555,58 +482,37 @@ main::@return: scope:[main] from main::@3 (byte[512]) mul_sqr_hi ← { fill( 512, 0) } to:@2 init_mul_tables: scope:[init_mul_tables] from main + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo ← (byte*~) init_mul_tables::$0 + (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 ← (byte/signed byte/word/signed word) 1 + (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 - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$2 ← ! (boolean~) init_mul_tables::$1 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_lo + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr - *((byte[512]) mul_sqr_hi + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 + 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::$5 ← < (word) init_mul_tables::sqr + *((byte*) init_mul_tables::sqr_lo) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo ← ++ (byte*) init_mul_tables::sqr_lo + (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::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 + 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 to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i ← (byte/signed byte/word/signed word) 0 - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$10 ← ! (boolean~) init_mul_tables::$9 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i ← ++ (byte) init_mul_tables::i - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto init_mul_tables::@3 - to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr ← ++ (word) init_mul_tables::sqr - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -708,71 +614,49 @@ main::@return: scope:[main] from main::@3 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 init_mul_tables: scope:[init_mul_tables] from main + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo#0 ← (byte*~) init_mul_tables::$0 + (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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#9 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$2 ← ! (boolean~) init_mul_tables::$1 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte) init_mul_tables::i#5 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 init_mul_tables::@5/(byte) init_mul_tables::i#8 ) - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#5 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#5 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (byte) init_mul_tables::i#8 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 ) - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (word) init_mul_tables::sqr#11 ← phi( init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#11 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$10 ← ! (boolean~) init_mul_tables::$9 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte) init_mul_tables::i#7 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 init_mul_tables::@7/(byte) init_mul_tables::i#9 ) - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#7 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#7 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 ) + (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 + *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (byte) init_mul_tables::i#9 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 ) - (word) init_mul_tables::sqr#8 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 ) - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#8 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 ) + (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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -888,71 +772,49 @@ main::@return: scope:[main] from main::@3 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 init_mul_tables: scope:[init_mul_tables] from main + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo#0 ← (byte*~) init_mul_tables::$0 + (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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#9 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$2 ← ! (boolean~) init_mul_tables::$1 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte) init_mul_tables::i#5 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 init_mul_tables::@5/(byte) init_mul_tables::i#8 ) - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#5 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#5 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (byte) init_mul_tables::i#8 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 ) - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (word) init_mul_tables::sqr#11 ← phi( init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#11 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$10 ← ! (boolean~) init_mul_tables::$9 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte) init_mul_tables::i#7 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 init_mul_tables::@7/(byte) init_mul_tables::i#9 ) - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#7 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#7 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 ) + (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 + *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (byte) init_mul_tables::i#9 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 ) - (word) init_mul_tables::sqr#8 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 ) - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#8 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 ) + (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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -1071,57 +933,45 @@ INITIAL SSA SYMBOL TABLE (byte[512]) asm_mul_sqr_lo (byte[512]) asm_mul_sqr_lo#0 (void()) init_mul_tables() -(byte~) init_mul_tables::$0 -(boolean~) init_mul_tables::$1 -(boolean~) init_mul_tables::$10 -(byte*~) init_mul_tables::$11 -(byte~) init_mul_tables::$12 -(byte*~) init_mul_tables::$13 -(byte~) init_mul_tables::$14 -(word~) init_mul_tables::$15 -(byte~) init_mul_tables::$16 -(word~) init_mul_tables::$17 -(boolean~) init_mul_tables::$18 -(boolean~) init_mul_tables::$2 -(byte~) init_mul_tables::$3 -(byte~) init_mul_tables::$4 +(byte*~) init_mul_tables::$0 +(byte*~) init_mul_tables::$1 +(byte~) init_mul_tables::$2 +(boolean~) init_mul_tables::$3 +(boolean~) init_mul_tables::$4 (byte~) init_mul_tables::$5 -(word~) init_mul_tables::$6 -(boolean~) init_mul_tables::$7 -(byte~) init_mul_tables::$8 +(byte~) init_mul_tables::$6 +(word~) init_mul_tables::$7 +(word~) init_mul_tables::$8 (boolean~) init_mul_tables::$9 (label) init_mul_tables::@1 (label) init_mul_tables::@2 (label) init_mul_tables::@3 -(label) init_mul_tables::@4 -(label) init_mul_tables::@5 -(label) init_mul_tables::@6 -(label) init_mul_tables::@7 (label) init_mul_tables::@return -(byte) init_mul_tables::i -(byte) init_mul_tables::i#0 -(byte) init_mul_tables::i#1 -(byte) init_mul_tables::i#2 -(byte) init_mul_tables::i#3 -(byte) init_mul_tables::i#4 -(byte) init_mul_tables::i#5 -(byte) init_mul_tables::i#6 -(byte) init_mul_tables::i#7 -(byte) init_mul_tables::i#8 -(byte) init_mul_tables::i#9 +(word) init_mul_tables::i +(word) init_mul_tables::i#0 +(word) init_mul_tables::i#1 +(word) init_mul_tables::i#2 +(word) init_mul_tables::i#3 +(word) init_mul_tables::i#4 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#0 (word) init_mul_tables::sqr#1 -(word) init_mul_tables::sqr#10 -(word) init_mul_tables::sqr#11 (word) init_mul_tables::sqr#2 (word) init_mul_tables::sqr#3 (word) init_mul_tables::sqr#4 (word) init_mul_tables::sqr#5 -(word) init_mul_tables::sqr#6 -(word) init_mul_tables::sqr#7 -(word) init_mul_tables::sqr#8 -(word) init_mul_tables::sqr#9 +(byte*) init_mul_tables::sqr_hi +(byte*) init_mul_tables::sqr_hi#0 +(byte*) init_mul_tables::sqr_hi#1 +(byte*) init_mul_tables::sqr_hi#2 +(byte*) init_mul_tables::sqr_hi#3 +(byte*) init_mul_tables::sqr_hi#4 +(byte*) init_mul_tables::sqr_lo +(byte*) init_mul_tables::sqr_lo#0 +(byte*) init_mul_tables::sqr_lo#1 +(byte*) init_mul_tables::sqr_lo#2 +(byte*) init_mul_tables::sqr_lo#3 +(byte*) init_mul_tables::sqr_lo#4 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -1198,71 +1048,49 @@ main::@return: scope:[main] from main::@2 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 init_mul_tables: scope:[init_mul_tables] from main + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo#0 ← (byte*~) init_mul_tables::$0 + (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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#9 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$2 ← ! (boolean~) init_mul_tables::$1 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte) init_mul_tables::i#5 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 init_mul_tables::@5/(byte) init_mul_tables::i#8 ) - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#5 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#5 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (byte) init_mul_tables::i#8 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 ) - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (word) init_mul_tables::sqr#11 ← phi( init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 + (boolean~) init_mul_tables::$4 ← ! (boolean~) init_mul_tables::$3 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#11 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 - (boolean~) init_mul_tables::$10 ← ! (boolean~) init_mul_tables::$9 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte) init_mul_tables::i#7 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 init_mul_tables::@7/(byte) init_mul_tables::i#9 ) - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#7 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#7 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 ) + (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 + *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (byte) init_mul_tables::i#9 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 ) - (word) init_mul_tables::sqr#8 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 ) - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#8 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 ) + (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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -1349,8 +1177,7 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare to:@end @end: scope:[] from @4 -Inversing boolean not (boolean~) init_mul_tables::$2 ← (byte~) init_mul_tables::$0 != (byte/signed byte/word/signed word) 0 from (boolean~) init_mul_tables::$1 ← (byte~) init_mul_tables::$0 == (byte/signed byte/word/signed word) 0 -Inversing boolean not (boolean~) init_mul_tables::$10 ← (byte~) init_mul_tables::$8 != (byte/signed byte/word/signed word) 0 from (boolean~) init_mul_tables::$9 ← (byte~) init_mul_tables::$8 == (byte/signed byte/word/signed word) 0 +Inversing boolean not (boolean~) init_mul_tables::$4 ← (byte~) init_mul_tables::$2 != (byte/signed byte/word/signed word) 0 from (boolean~) init_mul_tables::$3 ← (byte~) init_mul_tables::$2 == (byte/signed byte/word/signed word) 0 Inversing boolean not (boolean~) mul_tables_compare::$1 ← *((byte[512]) mul_sqr_lo#0 + (byte) mul_tables_compare::i#2) == *((byte[512]) asm_mul_sqr_lo#0 + (byte) mul_tables_compare::i#2) from (boolean~) mul_tables_compare::$0 ← *((byte[512]) mul_sqr_lo#0 + (byte) mul_tables_compare::i#2) != *((byte[512]) asm_mul_sqr_lo#0 + (byte) mul_tables_compare::i#2) Inversing boolean not (boolean~) mul_tables_compare::$5 ← *((byte*~) mul_tables_compare::$2 + (byte) mul_tables_compare::i#3) == *((byte*~) mul_tables_compare::$3 + (byte) mul_tables_compare::i#3) from (boolean~) mul_tables_compare::$4 ← *((byte*~) mul_tables_compare::$2 + (byte) mul_tables_compare::i#3) != *((byte*~) mul_tables_compare::$3 + (byte) mul_tables_compare::i#3) Inversing boolean not (boolean~) mul_tables_compare::$7 ← *((byte[512]) mul_sqr_lo#0 + (byte) mul_tables_compare::i#4) == *((byte[512]) asm_mul_sqr_lo#0 + (byte) mul_tables_compare::i#4) from (boolean~) mul_tables_compare::$6 ← *((byte[512]) mul_sqr_lo#0 + (byte) mul_tables_compare::i#4) != *((byte[512]) asm_mul_sqr_lo#0 + (byte) mul_tables_compare::i#4) @@ -1381,69 +1208,48 @@ main::@return: scope:[main] from main::@2 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 init_mul_tables: scope:[init_mul_tables] from main + (byte*~) init_mul_tables::$0 ← (byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 + (byte*) init_mul_tables::sqr_lo#0 ← (byte*~) init_mul_tables::$0 + (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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#9 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$2 ← (byte~) init_mul_tables::$0 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte) init_mul_tables::i#5 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 init_mul_tables::@5/(byte) init_mul_tables::i#8 ) - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#5 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$6 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (word) init_mul_tables::sqr#1 ← (word~) init_mul_tables::$6 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#5 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (byte) init_mul_tables::i#8 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 ) - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#9 ) - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (word) init_mul_tables::sqr#11 ← phi( init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$4 ← (byte~) init_mul_tables::$2 != (byte/signed byte/word/signed word) 0 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#11 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$10 ← (byte~) init_mul_tables::$8 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte) init_mul_tables::i#7 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 init_mul_tables::@7/(byte) init_mul_tables::i#9 ) - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#7 >> (byte/signed byte/word/signed word) 1 - (word~) init_mul_tables::$17 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$17 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#7 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 ) + (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 + *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (byte) init_mul_tables::i#9 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 ) - (word) init_mul_tables::sqr#8 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 ) - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#8 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 ) + (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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -1530,12 +1336,13 @@ Not aliassing across scopes: BGCOL#13 BGCOL#14 Not aliassing across scopes: BGCOL#1 BGCOL#6 Alias (byte*) BGCOL#11 = (byte*) BGCOL#13 (byte*) BGCOL#6 Alias (byte*) BGCOL#0 = (byte*) BGCOL#16 (byte*) BGCOL#15 (byte*) BGCOL#14 -Alias (word) init_mul_tables::sqr#1 = (word~) init_mul_tables::$6 (word) init_mul_tables::sqr#11 -Alias (word) init_mul_tables::sqr#6 = (word) init_mul_tables::sqr#9 -Alias (byte) init_mul_tables::i#4 = (byte) init_mul_tables::i#8 -Alias (word) init_mul_tables::sqr#3 = (word~) init_mul_tables::$17 -Alias (word) init_mul_tables::sqr#10 = (word) init_mul_tables::sqr#8 -Alias (byte) init_mul_tables::i#6 = (byte) init_mul_tables::i#9 +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#4 = (word) init_mul_tables::sqr#5 +Alias (byte*) init_mul_tables::sqr_lo#3 = (byte*) init_mul_tables::sqr_lo#4 +Alias (byte*) init_mul_tables::sqr_hi#3 = (byte*) init_mul_tables::sqr_hi#4 +Alias (word) init_mul_tables::i#2 = (word) init_mul_tables::i#4 Alias (byte*) BGCOL#2 = (byte*) BGCOL#7 Alias (byte) mul_tables_compare::i#2 = (byte) mul_tables_compare::i#7 Alias (byte*) BGCOL#3 = (byte*) BGCOL#8 @@ -1567,62 +1374,41 @@ main::@return: scope:[main] from main::@2 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$2 ← (byte~) init_mul_tables::$0 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (byte) init_mul_tables::i#5 ← phi( init_mul_tables::@1/(byte) init_mul_tables::i#4 init_mul_tables::@5/(byte) init_mul_tables::i#4 ) - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#5) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#5 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#5 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$4 ← (byte~) init_mul_tables::$2 != (byte/signed byte/word/signed word) 0 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$10 ← (byte~) init_mul_tables::$8 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (byte) init_mul_tables::i#7 ← phi( init_mul_tables::@3/(byte) init_mul_tables::i#6 init_mul_tables::@7/(byte) init_mul_tables::i#6 ) - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#7) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#7 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#7 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 ) + (byte~) init_mul_tables::$5 ← < (word) init_mul_tables::sqr#3 + *((byte*) init_mul_tables::sqr_lo#2) ← (byte~) init_mul_tables::$5 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -1697,8 +1483,9 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare Not aliassing across scopes: BGCOL#11 BGCOL#0 Not aliassing across scopes: BGCOL#1 BGCOL#11 -Alias (byte) init_mul_tables::i#4 = (byte) init_mul_tables::i#5 -Alias (byte) init_mul_tables::i#6 = (byte) init_mul_tables::i#7 +Alias (byte*) init_mul_tables::sqr_lo#2 = (byte*) init_mul_tables::sqr_lo#3 +Alias (byte*) init_mul_tables::sqr_hi#2 = (byte*) init_mul_tables::sqr_hi#3 +Alias (word) init_mul_tables::i#2 = (word) init_mul_tables::i#3 Alias (byte) mul_tables_compare::i#10 = (byte) mul_tables_compare::i#3 (byte) mul_tables_compare::i#2 (byte) mul_tables_compare::i#4 (byte) mul_tables_compare::i#6 Alias (byte*) BGCOL#10 = (byte*) BGCOL#3 (byte*) BGCOL#2 (byte*) BGCOL#4 (byte*) BGCOL#12 Succesful SSA optimization Pass2AliasElimination @@ -1724,60 +1511,38 @@ main::@return: scope:[main] from main::@2 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$2 ← (byte~) init_mul_tables::$0 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$4 ← (byte~) init_mul_tables::$2 != (byte/signed byte/word/signed word) 0 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$10 ← (byte~) init_mul_tables::$8 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -1868,60 +1633,38 @@ main::@return: scope:[main] from main::@2 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$2 ← (byte~) init_mul_tables::$0 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$4 ← (byte~) init_mul_tables::$2 != (byte/signed byte/word/signed word) 0 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$10 ← (byte~) init_mul_tables::$8 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -2011,60 +1754,38 @@ main::@return: scope:[main] from main::@2 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$2 ← (byte~) init_mul_tables::$0 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$2) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - (boolean~) init_mul_tables::$7 ← (byte) init_mul_tables::i#1 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$7) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + (boolean~) init_mul_tables::$4 ← (byte~) init_mul_tables::$2 != (byte/signed byte/word/signed word) 0 + if((boolean~) init_mul_tables::$4) goto init_mul_tables::@2 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - (boolean~) init_mul_tables::$10 ← (byte~) init_mul_tables::$8 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$10) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - (boolean~) init_mul_tables::$18 ← (byte) init_mul_tables::i#3 != (byte/signed byte/word/signed word) 0 - if((boolean~) init_mul_tables::$18) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 to:init_mul_tables::@return -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -2127,10 +1848,8 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare to:@end @end: scope:[] from @4 -Simple Condition (boolean~) init_mul_tables::$2 if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 -Simple Condition (boolean~) init_mul_tables::$7 if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 -Simple Condition (boolean~) init_mul_tables::$10 if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 -Simple Condition (boolean~) init_mul_tables::$18 if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@3 +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~) 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 @@ -2158,56 +1877,36 @@ main::@return: scope:[main] from main::@2 (byte[512]) mul_sqr_hi#0 ← { fill( 512, 0) } to:@2 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#0 ← (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@2 - (byte) init_mul_tables::i#2 ← (byte/signed byte/word/signed word) 0 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + 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::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -2269,8 +1968,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#0 = 1 -Constant (const byte) init_mul_tables::i#2 = 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) } Constant (const byte) mul_tables_compare::i#0 = 0 @@ -2293,53 +1991,34 @@ main::@return: scope:[main] from main::@2 @1: scope:[] from @begin to:@2 init_mul_tables: scope:[init_mul_tables] from main + (byte*) init_mul_tables::sqr_lo#0 ← (const byte[512]) mul_sqr_lo#0 + (byte/signed byte/word/signed word) 1 + (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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(const word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(const byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(const word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + 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::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(const byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte*~) init_mul_tables::$11 ← (const byte[512]) mul_sqr_lo#0 + (word/signed word) 256 - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$11 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte*~) init_mul_tables::$13 ← (const byte[512]) mul_sqr_hi#0 + (word/signed word) 256 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((byte*~) init_mul_tables::$13 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -2394,8 +2073,8 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare to:@end @end: scope:[] from @4 -Constant (const byte*) init_mul_tables::$11 = mul_sqr_lo#0+256 -Constant (const byte*) init_mul_tables::$13 = mul_sqr_hi#0+256 +Constant (const byte*) init_mul_tables::sqr_lo#0 = mul_sqr_lo#0+1 +Constant (const byte*) init_mul_tables::sqr_hi#0 = mul_sqr_hi#0+1 Constant (const byte*) mul_tables_compare::$2 = mul_sqr_hi#0+256 Constant (const byte*) mul_tables_compare::$3 = asm_mul_sqr_hi#0+256 Constant (const byte*) mul_tables_compare::$8 = mul_sqr_hi#0+256 @@ -2421,49 +2100,30 @@ 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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(const word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(const byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 - to:init_mul_tables::@6 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@6: scope:[init_mul_tables] from init_mul_tables::@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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(const word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + 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::@3: scope:[init_mul_tables] from init_mul_tables::@4 init_mul_tables::@6 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@6/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@6/(const byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((const byte*) init_mul_tables::$11 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((const byte*) init_mul_tables::$13 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return @2: scope:[] from @1 @@ -2514,13 +2174,7 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare to:@end @end: scope:[] from @4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#6 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#6 -Multiple usages for variable. Not optimizing sub-constant (word) init_mul_tables::sqr#7 Culled Empty Block (label) @1 -Culled Empty Block (label) init_mul_tables::@6 Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks CONTROL FLOW GRAPH @@ -2541,47 +2195,30 @@ 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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(const word) init_mul_tables::sqr#0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(const byte) init_mul_tables::i#0 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 + (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 ) + (word) init_mul_tables::i#2 ← phi( init_mul_tables/(const word) init_mul_tables::i#0 init_mul_tables::@2/(word) init_mul_tables::i#1 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + 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::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@4 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@2/(const byte) init_mul_tables::i#2 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((const byte*) init_mul_tables::$11 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((const byte*) init_mul_tables::$13 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return init_mul_tables_asm: scope:[init_mul_tables_asm] from main::@1 @@ -2630,46 +2267,27 @@ mul_tables_compare::@return: scope:[mul_tables_compare] from mul_tables_compare to:@end @end: scope:[] from @4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#6 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#6 -Multiple usages for variable. Not optimizing sub-constant (word) init_mul_tables::sqr#7 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#4 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#6 -Multiple usages for variable. Not optimizing sub-constant (byte) init_mul_tables::i#6 -Multiple usages for variable. Not optimizing sub-constant (word) init_mul_tables::sqr#7 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 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#0 -Inlining constant with var siblings (const byte) init_mul_tables::i#0 -Inlining constant with var siblings (const byte) init_mul_tables::i#0 -Inlining constant with var siblings (const byte) init_mul_tables::i#0 -Inlining constant with different constant siblings (const byte) init_mul_tables::i#0 -Inlining constant with var siblings (const byte) init_mul_tables::i#2 -Inlining constant with var siblings (const byte) init_mul_tables::i#2 -Inlining constant with var siblings (const byte) init_mul_tables::i#2 -Inlining constant with var siblings (const byte) init_mul_tables::i#2 -Inlining constant with different constant siblings (const byte) init_mul_tables::i#2 +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 +Inlining constant with var siblings (const byte*) init_mul_tables::sqr_lo#0 +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 = (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 Constant inlined mul_tables_compare::$3 = (const byte[512]) asm_mul_sqr_hi#0+(word/signed word) 256 Constant inlined mul_tables_compare::$2 = (const byte[512]) mul_sqr_hi#0+(word/signed word) 256 Constant inlined mul_tables_compare::$9 = (const byte[512]) asm_mul_sqr_hi#0+(word/signed word) 256 Constant inlined mul_tables_compare::$8 = (const byte[512]) mul_sqr_hi#0+(word/signed word) 256 -Constant inlined init_mul_tables::$11 = (const byte[512]) mul_sqr_lo#0+(word/signed word) 256 Constant inlined init_mul_tables::i#0 = (byte/signed byte/word/signed word) 1 -Constant inlined init_mul_tables::$13 = (const byte[512]) mul_sqr_hi#0+(word/signed word) 256 +Constant inlined init_mul_tables::sqr_hi#0 = (const byte[512]) mul_sqr_hi#0+(byte/signed byte/word/signed word) 1 Succesful SSA optimization Pass2ConstantInlining CONTROL FLOW GRAPH @begin: scope:[] from @@ -2689,47 +2307,30 @@ 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 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 - to:init_mul_tables::@5 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 + (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 ) + (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 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + 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::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - to:init_mul_tables::@2 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@4 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@2/(byte/signed byte/word/signed word) 0 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 - to:init_mul_tables::@7 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto 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::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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +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 + to:init_mul_tables::@2 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return init_mul_tables_asm: scope:[init_mul_tables_asm] from main::@1 @@ -2789,36 +2390,28 @@ FINAL SYMBOL TABLE (byte[512]) asm_mul_sqr_lo (const byte[512]) asm_mul_sqr_lo#0 = { fill( 512, 0) } (void()) init_mul_tables() -(byte~) init_mul_tables::$0 -(byte~) init_mul_tables::$12 -(byte~) init_mul_tables::$14 -(word~) init_mul_tables::$15 -(byte~) init_mul_tables::$16 -(byte~) init_mul_tables::$3 -(byte~) init_mul_tables::$4 +(byte~) init_mul_tables::$2 (byte~) init_mul_tables::$5 -(byte~) init_mul_tables::$8 +(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 -(label) init_mul_tables::@4 -(label) init_mul_tables::@5 -(label) init_mul_tables::@7 (label) init_mul_tables::@return -(byte) init_mul_tables::i -(byte) init_mul_tables::i#1 -(byte) init_mul_tables::i#3 -(byte) init_mul_tables::i#4 -(byte) init_mul_tables::i#6 +(word) init_mul_tables::i +(word) init_mul_tables::i#1 +(word) init_mul_tables::i#2 (word) init_mul_tables::sqr (word) init_mul_tables::sqr#1 -(word) init_mul_tables::sqr#10 (word) init_mul_tables::sqr#2 (word) init_mul_tables::sqr#3 (word) init_mul_tables::sqr#4 -(word) init_mul_tables::sqr#5 -(word) init_mul_tables::sqr#6 -(word) init_mul_tables::sqr#7 +(byte*) init_mul_tables::sqr_hi +(byte*) init_mul_tables::sqr_hi#1 +(byte*) init_mul_tables::sqr_hi#2 +(byte*) init_mul_tables::sqr_lo +(byte*) init_mul_tables::sqr_lo#1 +(byte*) init_mul_tables::sqr_lo#2 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -2844,14 +2437,11 @@ FINAL SYMBOL TABLE (byte) mul_tables_compare::i#1 (byte) mul_tables_compare::i#10 -Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@6 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@5 mul_tables_compare::@return init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@5 init_mul_tables::@2 init_mul_tables::@3 init_mul_tables::@7 init_mul_tables::@4 init_mul_tables::@return +Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@6 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@5 mul_tables_compare::@return init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@3 init_mul_tables::@2 init_mul_tables::@return Added new block during phi lifting mul_tables_compare::@11(between mul_tables_compare::@5 and mul_tables_compare::@1) -Added new block during phi lifting init_mul_tables::@9(between init_mul_tables::@2 and init_mul_tables::@1) -Added new block during phi lifting init_mul_tables::@10(between init_mul_tables::@1 and init_mul_tables::@2) -Added new block during phi lifting init_mul_tables::@11(between init_mul_tables::@4 and init_mul_tables::@3) -Added new block during phi lifting init_mul_tables::@12(between init_mul_tables::@2 and init_mul_tables::@3) -Added new block during phi lifting init_mul_tables::@13(between init_mul_tables::@3 and init_mul_tables::@4) -Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@6 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@5 mul_tables_compare::@return mul_tables_compare::@11 init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@5 init_mul_tables::@2 init_mul_tables::@12 init_mul_tables::@3 init_mul_tables::@7 init_mul_tables::@4 init_mul_tables::@return init_mul_tables::@11 init_mul_tables::@13 init_mul_tables::@9 init_mul_tables::@10 +Added new block during phi lifting init_mul_tables::@5(between init_mul_tables::@2 and init_mul_tables::@1) +Added new block during phi lifting init_mul_tables::@6(between init_mul_tables::@1 and init_mul_tables::@2) +Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@6 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@5 mul_tables_compare::@return mul_tables_compare::@11 init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@3 init_mul_tables::@2 init_mul_tables::@return init_mul_tables::@5 init_mul_tables::@6 CONTROL FLOW GRAPH - PHI LIFTED @begin: scope:[] from to:@4 @@ -2917,68 +2507,42 @@ init_mul_tables_asm::@return: scope:[init_mul_tables_asm] from init_mul_tables_ to:@return 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::@9 - (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@9/(word~) init_mul_tables::sqr#12 ) - (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@9/(byte~) init_mul_tables::i#10 ) - (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@10 - to:init_mul_tables::@5 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 - (word~) init_mul_tables::sqr#14 ← (word) init_mul_tables::sqr#2 - to:init_mul_tables::@2 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@10 init_mul_tables::@5 - (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@10/(word~) init_mul_tables::sqr#13 init_mul_tables::@5/(word~) init_mul_tables::sqr#14 ) - (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 - (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 - *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 - (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 - (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 - if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@9 - to:init_mul_tables::@12 -init_mul_tables::@12: scope:[init_mul_tables] from init_mul_tables::@2 - (word~) init_mul_tables::sqr#16 ← (word) init_mul_tables::sqr#1 +init_mul_tables::@1: scope:[init_mul_tables] from init_mul_tables init_mul_tables::@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 ) + (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 ) + (byte~) init_mul_tables::$2 ← (word) init_mul_tables::i#2 & (byte/signed byte/word/signed word) 1 + if((byte~) init_mul_tables::$2!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@6 to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@11 init_mul_tables::@12 - (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@11/(word~) init_mul_tables::sqr#15 init_mul_tables::@12/(word~) init_mul_tables::sqr#16 ) - (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@11/(byte~) init_mul_tables::i#11 init_mul_tables::@2/(byte/signed byte/word/signed word) 0 ) - (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 - if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@13 - to:init_mul_tables::@7 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 - (word~) init_mul_tables::sqr#18 ← (word) init_mul_tables::sqr#4 - to:init_mul_tables::@4 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@13 init_mul_tables::@7 - (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@13/(word~) init_mul_tables::sqr#17 init_mul_tables::@7/(word~) init_mul_tables::sqr#18 ) - (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 - *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 - (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 - *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 - (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 - (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 - (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 - (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 - if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@11 +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 + (word~) init_mul_tables::sqr#8 ← (word) init_mul_tables::sqr#2 + to:init_mul_tables::@2 +init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@6 + (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 + (byte*) init_mul_tables::sqr_lo#1 ← ++ (byte*) init_mul_tables::sqr_lo#2 + (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::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 -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 return to:@return -init_mul_tables::@11: scope:[init_mul_tables] from init_mul_tables::@4 - (byte~) init_mul_tables::i#11 ← (byte) init_mul_tables::i#3 - (word~) init_mul_tables::sqr#15 ← (word) init_mul_tables::sqr#3 - to:init_mul_tables::@3 -init_mul_tables::@13: scope:[init_mul_tables] from init_mul_tables::@3 - (word~) init_mul_tables::sqr#17 ← (word) init_mul_tables::sqr#10 - to:init_mul_tables::@4 -init_mul_tables::@9: scope:[init_mul_tables] from init_mul_tables::@2 - (byte~) init_mul_tables::i#10 ← (byte) init_mul_tables::i#1 - (word~) init_mul_tables::sqr#12 ← (word) init_mul_tables::sqr#1 +init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@2 + (word~) init_mul_tables::i#5 ← (word) init_mul_tables::i#1 + (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 to:init_mul_tables::@1 -init_mul_tables::@10: scope:[init_mul_tables] from init_mul_tables::@1 - (word~) init_mul_tables::sqr#13 ← (word) init_mul_tables::sqr#6 +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 to:init_mul_tables::@2 Adding NOP phi() at start of @begin @@ -2992,6 +2556,12 @@ CALL GRAPH Calls in [] to main:2 Calls in [main] to init_mul_tables:5 init_mul_tables_asm:7 mul_tables_compare:9 +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... @@ -3069,89 +2639,57 @@ init_mul_tables_asm::@return: scope:[init_mul_tables_asm] from init_mul_tables_ 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::@9 - [28] (word) init_mul_tables::sqr#6 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 0 init_mul_tables::@9/(word~) init_mul_tables::sqr#12 ) [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] - [28] (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@9/(byte~) init_mul_tables::i#10 ) [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] - [29] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] - [30] if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@10 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] - to:init_mul_tables::@5 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - [31] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] - [32] (word~) init_mul_tables::sqr#14 ← (word) init_mul_tables::sqr#2 [ init_mul_tables::i#4 init_mul_tables::sqr#14 ] +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 ] + 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 ] to:init_mul_tables::@2 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@10 init_mul_tables::@5 - [33] (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@10/(word~) init_mul_tables::sqr#13 init_mul_tables::@5/(word~) init_mul_tables::sqr#14 ) [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] - [34] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] - [35] *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] - [36] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] - [37] *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] - [38] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] - [39] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] - [40] (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 [ init_mul_tables::sqr#1 init_mul_tables::i#1 ] - [41] if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@9 [ init_mul_tables::sqr#1 init_mul_tables::i#1 ] - to:init_mul_tables::@12 -init_mul_tables::@12: scope:[init_mul_tables] from init_mul_tables::@2 - [42] (word~) init_mul_tables::sqr#16 ← (word) init_mul_tables::sqr#1 [ init_mul_tables::sqr#16 ] - to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@11 init_mul_tables::@12 - [43] (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@11/(word~) init_mul_tables::sqr#15 init_mul_tables::@12/(word~) init_mul_tables::sqr#16 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] - [43] (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@11/(byte~) init_mul_tables::i#11 init_mul_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] - [44] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] - [45] if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@13 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] - to:init_mul_tables::@7 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - [46] (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] - [47] (word~) init_mul_tables::sqr#18 ← (word) init_mul_tables::sqr#4 [ init_mul_tables::i#6 init_mul_tables::sqr#18 ] - to:init_mul_tables::@4 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@13 init_mul_tables::@7 - [48] (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@13/(word~) init_mul_tables::sqr#17 init_mul_tables::@7/(word~) init_mul_tables::sqr#18 ) [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] - [49] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] - [50] *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] - [51] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] - [52] *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] - [53] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] - [54] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] - [55] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] - [56] (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 [ init_mul_tables::sqr#3 init_mul_tables::i#3 ] - [57] if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@11 [ init_mul_tables::sqr#3 init_mul_tables::i#3 ] +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 ] to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 - [58] return [ ] +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 + [44] return [ ] to:@return -init_mul_tables::@11: scope:[init_mul_tables] from init_mul_tables::@4 - [59] (byte~) init_mul_tables::i#11 ← (byte) init_mul_tables::i#3 [ init_mul_tables::i#11 init_mul_tables::sqr#3 ] - [60] (word~) init_mul_tables::sqr#15 ← (word) init_mul_tables::sqr#3 [ init_mul_tables::i#11 init_mul_tables::sqr#15 ] - to:init_mul_tables::@3 -init_mul_tables::@13: scope:[init_mul_tables] from init_mul_tables::@3 - [61] (word~) init_mul_tables::sqr#17 ← (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#17 ] - to:init_mul_tables::@4 -init_mul_tables::@9: scope:[init_mul_tables] from init_mul_tables::@2 - [62] (byte~) init_mul_tables::i#10 ← (byte) init_mul_tables::i#1 [ init_mul_tables::i#10 init_mul_tables::sqr#1 ] - [63] (word~) init_mul_tables::sqr#12 ← (word) init_mul_tables::sqr#1 [ init_mul_tables::i#10 init_mul_tables::sqr#12 ] +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 ] to:init_mul_tables::@1 -init_mul_tables::@10: scope:[init_mul_tables] from init_mul_tables::@1 - [64] (word~) init_mul_tables::sqr#13 ← (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#13 ] +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 ] to:init_mul_tables::@2 -Created 7 initial phi equivalence classes +Created 6 initial phi equivalence classes Coalesced [24] mul_tables_compare::i#11 ← mul_tables_compare::i#1 -Coalesced [32] init_mul_tables::sqr#14 ← init_mul_tables::sqr#2 -Coalesced [42] init_mul_tables::sqr#16 ← init_mul_tables::sqr#1 -Coalesced [47] init_mul_tables::sqr#18 ← init_mul_tables::sqr#4 -Coalesced [59] init_mul_tables::i#11 ← init_mul_tables::i#3 -Coalesced [60] init_mul_tables::sqr#15 ← init_mul_tables::sqr#3 -Coalesced [61] init_mul_tables::sqr#17 ← init_mul_tables::sqr#10 -Coalesced [62] init_mul_tables::i#10 ← init_mul_tables::i#1 -Coalesced [63] init_mul_tables::sqr#12 ← init_mul_tables::sqr#1 -Coalesced [64] init_mul_tables::sqr#13 ← init_mul_tables::sqr#6 -Coalesced down to 4 phi equivalence classes +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 Culled Empty Block (label) mul_tables_compare::@11 -Culled Empty Block (label) init_mul_tables::@12 -Culled Empty Block (label) init_mul_tables::@11 -Culled Empty Block (label) init_mul_tables::@13 -Culled Empty Block (label) init_mul_tables::@9 -Culled Empty Block (label) init_mul_tables::@10 -Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@6 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@5 mul_tables_compare::@return init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@5 init_mul_tables::@2 init_mul_tables::@3 init_mul_tables::@7 init_mul_tables::@4 init_mul_tables::@return +Culled Empty Block (label) init_mul_tables::@5 +Culled Empty Block (label) init_mul_tables::@6 +Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return mul_tables_compare mul_tables_compare::@1 mul_tables_compare::@6 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@5 mul_tables_compare::@return init_mul_tables_asm init_mul_tables_asm::@return init_mul_tables init_mul_tables::@1 init_mul_tables::@3 init_mul_tables::@2 init_mul_tables::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @end @@ -3164,6 +2702,11 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... +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() [ ] @@ -3234,48 +2777,31 @@ 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] (word) init_mul_tables::sqr#6 ← 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#4 init_mul_tables::sqr#6 ] - [27] (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] - [28] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] - [29] if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] - to:init_mul_tables::@5 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] - to:init_mul_tables::@2 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - [31] (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] - [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] - [33] *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] - [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] - [35] *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] - [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] - [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] - [38] (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] - [39] if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] + [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 ] to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@4 - [40] (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] - [40] (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] - [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] - [42] if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] - to:init_mul_tables::@7 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - [43] (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] - to:init_mul_tables::@4 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - [44] (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] - [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] - [46] *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] - [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] - [48] *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] - [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] - [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] - [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] - [52] (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] - [53] if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@3 [ init_mul_tables::i#3 init_mul_tables::sqr#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 ] + 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 ] to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 - [54] return [ ] +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 + [42] return [ ] to:@return CONTROL FLOW GRAPH - PHI MEM COALESCED @@ -3348,48 +2874,31 @@ 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] (word) init_mul_tables::sqr#6 ← 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#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) - [27] (byte) init_mul_tables::i#4 ← phi( init_mul_tables/(byte/signed byte/word/signed word) 1 init_mul_tables::@2/(byte) init_mul_tables::i#1 ) [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) - [28] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ) - [29] if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) - to:init_mul_tables::@5 -init_mul_tables::@5: scope:[init_mul_tables] from init_mul_tables::@1 - [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ) - to:init_mul_tables::@2 -init_mul_tables::@2: scope:[init_mul_tables] from init_mul_tables::@1 init_mul_tables::@5 - [31] (word) init_mul_tables::sqr#5 ← phi( init_mul_tables::@1/(word) init_mul_tables::sqr#6 init_mul_tables::@5/(word) init_mul_tables::sqr#2 ) [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) - [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ) - [33] *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) - [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ) - [35] *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) - [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ) - [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ) - [38] (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) - [39] if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) + [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 ] ) to:init_mul_tables::@3 -init_mul_tables::@3: scope:[init_mul_tables] from init_mul_tables::@2 init_mul_tables::@4 - [40] (word) init_mul_tables::sqr#10 ← phi( init_mul_tables::@4/(word) init_mul_tables::sqr#3 init_mul_tables::@2/(word) init_mul_tables::sqr#1 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) - [40] (byte) init_mul_tables::i#6 ← phi( init_mul_tables::@4/(byte) init_mul_tables::i#3 init_mul_tables::@2/(byte/signed byte/word/signed word) 0 ) [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) - [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ) - [42] if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) - to:init_mul_tables::@7 -init_mul_tables::@7: scope:[init_mul_tables] from init_mul_tables::@3 - [43] (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ) - to:init_mul_tables::@4 -init_mul_tables::@4: scope:[init_mul_tables] from init_mul_tables::@3 init_mul_tables::@7 - [44] (word) init_mul_tables::sqr#7 ← phi( init_mul_tables::@3/(word) init_mul_tables::sqr#10 init_mul_tables::@7/(word) init_mul_tables::sqr#4 ) [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) - [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ) - [46] *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) - [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ) - [48] *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) - [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 ] ) - [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ) - [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ) - [52] (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) - [53] if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@3 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#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 ] ) + 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 ] ) to:init_mul_tables::@return -init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@4 - [54] return [ ] ( main:2::init_mul_tables:5 [ ] ) +init_mul_tables::@return: scope:[init_mul_tables] from init_mul_tables::@2 + [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) to:@return DOMINATORS @@ -3415,36 +2924,28 @@ init_mul_tables_asm dominated by main init_mul_tables_asm main::@1 @begin @4 init_mul_tables_asm::@return dominated by main init_mul_tables_asm::@return init_mul_tables_asm main::@1 @begin @4 init_mul_tables dominated by main init_mul_tables @begin @4 init_mul_tables::@1 dominated by main init_mul_tables @begin @4 init_mul_tables::@1 -init_mul_tables::@5 dominated by main init_mul_tables @begin init_mul_tables::@5 @4 init_mul_tables::@1 +init_mul_tables::@3 dominated by main init_mul_tables @begin @4 init_mul_tables::@1 init_mul_tables::@3 init_mul_tables::@2 dominated by main init_mul_tables @begin @4 init_mul_tables::@2 init_mul_tables::@1 -init_mul_tables::@3 dominated by main init_mul_tables @begin @4 init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 -init_mul_tables::@7 dominated by main init_mul_tables @begin init_mul_tables::@7 @4 init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 -init_mul_tables::@4 dominated by main init_mul_tables @begin @4 init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@4 init_mul_tables::@3 -init_mul_tables::@return dominated by main init_mul_tables init_mul_tables::@return @begin @4 init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@4 init_mul_tables::@3 +init_mul_tables::@return dominated by main init_mul_tables init_mul_tables::@return @begin @4 init_mul_tables::@2 init_mul_tables::@1 Found back edge: Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@5 blocks: null Found back edge: Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: null -Found back edge: Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: null Populated: Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@5 blocks: mul_tables_compare::@5 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@1 mul_tables_compare::@6 -Populated: Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 -Populated: Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@3 init_mul_tables::@7 +Populated: Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 NATURAL LOOPS Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@5 blocks: mul_tables_compare::@5 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@1 mul_tables_compare::@6 -Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 -Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@3 init_mul_tables::@7 +Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 Found 0 loops in scope [] Found 0 loops in scope [main] -Found 2 loops in scope [init_mul_tables] - Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 - Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@3 init_mul_tables::@7 +Found 1 loops in scope [init_mul_tables] + Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 Found 0 loops in scope [init_mul_tables_asm] Found 1 loops in scope [mul_tables_compare] Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@5 blocks: mul_tables_compare::@5 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@1 mul_tables_compare::@6 NATURAL LOOPS WITH DEPTH Loop head: mul_tables_compare::@1 tails: mul_tables_compare::@5 blocks: mul_tables_compare::@5 mul_tables_compare::@4 mul_tables_compare::@9 mul_tables_compare::@3 mul_tables_compare::@8 mul_tables_compare::@2 mul_tables_compare::@7 mul_tables_compare::@1 mul_tables_compare::@6 depth: 1 -Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@5 depth: 1 -Loop head: init_mul_tables::@3 tails: init_mul_tables::@4 blocks: init_mul_tables::@4 init_mul_tables::@3 init_mul_tables::@7 depth: 1 +Loop head: init_mul_tables::@1 tails: init_mul_tables::@2 blocks: init_mul_tables::@2 init_mul_tables::@1 init_mul_tables::@3 depth: 1 VARIABLE REGISTER WEIGHTS @@ -3452,29 +2953,24 @@ VARIABLE REGISTER WEIGHTS (byte[512]) asm_mul_sqr_hi (byte[512]) asm_mul_sqr_lo (void()) init_mul_tables() -(byte~) init_mul_tables::$0 22.0 -(byte~) init_mul_tables::$12 22.0 -(byte~) init_mul_tables::$14 22.0 -(word~) init_mul_tables::$15 11.0 -(byte~) init_mul_tables::$16 22.0 -(byte~) init_mul_tables::$3 22.0 -(byte~) init_mul_tables::$4 22.0 +(byte~) init_mul_tables::$2 22.0 (byte~) init_mul_tables::$5 22.0 -(byte~) init_mul_tables::$8 22.0 -(byte) init_mul_tables::i -(byte) init_mul_tables::i#1 16.5 -(byte) init_mul_tables::i#3 16.5 -(byte) init_mul_tables::i#4 6.0 -(byte) init_mul_tables::i#6 5.5 +(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::sqr -(word) init_mul_tables::sqr#1 11.0 -(word) init_mul_tables::sqr#10 14.666666666666666 +(word) init_mul_tables::sqr#1 7.333333333333333 (word) init_mul_tables::sqr#2 22.0 -(word) init_mul_tables::sqr#3 7.333333333333333 -(word) init_mul_tables::sqr#4 22.0 -(word) init_mul_tables::sqr#5 9.166666666666666 -(word) init_mul_tables::sqr#6 11.0 -(word) init_mul_tables::sqr#7 11.0 +(word) init_mul_tables::sqr#3 6.875 +(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_lo +(byte*) init_mul_tables::sqr_lo#1 2.75 +(byte*) init_mul_tables::sqr_lo#2 4.714285714285714 (void()) init_mul_tables_asm() (void()) main() (byte[512]) mul_sqr_hi @@ -3486,107 +2982,33 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -[ init_mul_tables::i#4 init_mul_tables::i#1 ] -[ init_mul_tables::i#6 init_mul_tables::i#3 ] -[ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 ] -Added variable init_mul_tables::$0 to zero page equivalence class [ init_mul_tables::$0 ] -Added variable init_mul_tables::$3 to zero page equivalence class [ init_mul_tables::$3 ] -Added variable init_mul_tables::$4 to zero page equivalence class [ init_mul_tables::$4 ] +[ 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::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::$8 to zero page equivalence class [ init_mul_tables::$8 ] -Added variable init_mul_tables::$12 to zero page equivalence class [ init_mul_tables::$12 ] -Added variable init_mul_tables::$14 to zero page equivalence class [ init_mul_tables::$14 ] -Added variable init_mul_tables::$15 to zero page equivalence class [ init_mul_tables::$15 ] -Added variable init_mul_tables::$16 to zero page equivalence class [ init_mul_tables::$16 ] +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#4 init_mul_tables::i#1 ] -[ init_mul_tables::i#6 init_mul_tables::i#3 ] -[ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 ] -[ init_mul_tables::$0 ] -[ init_mul_tables::$3 ] -[ init_mul_tables::$4 ] +[ 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::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::$8 ] -[ init_mul_tables::$12 ] -[ init_mul_tables::$14 ] -[ init_mul_tables::$15 ] -[ init_mul_tables::$16 ] +[ 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_BYTE:3 [ init_mul_tables::i#4 init_mul_tables::i#1 ] -Allocated zp ZP_BYTE:4 [ init_mul_tables::i#6 init_mul_tables::i#3 ] -Allocated zp ZP_WORD:5 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 ] -Allocated zp ZP_BYTE:7 [ init_mul_tables::$0 ] -Allocated zp ZP_BYTE:8 [ init_mul_tables::$3 ] -Allocated zp ZP_BYTE:9 [ init_mul_tables::$4 ] -Allocated zp ZP_BYTE:10 [ init_mul_tables::$5 ] -Allocated zp ZP_BYTE:11 [ init_mul_tables::$8 ] -Allocated zp ZP_BYTE:12 [ init_mul_tables::$12 ] -Allocated zp ZP_BYTE:13 [ init_mul_tables::$14 ] -Allocated zp ZP_WORD:14 [ init_mul_tables::$15 ] -Allocated zp ZP_BYTE:16 [ init_mul_tables::$16 ] -Attempting fragment synthesis _deref_pbuc1=vbuc2 -Succesfully loaded fragment _deref_vwuc1=vbuc2 -Succesfully synthesized fragment _deref_pbuc1=vbuc2 (from _deref_vwuc1=vbuc2) -Attempting fragment synthesis vbuz1=vbuc1 -Succesfully loaded fragment vbuaa=vbuc1 -Succesfully synthesized fragment vbuz1=vbuc1 (from vbuaa=vbuc1) -Attempting fragment synthesis pbuc1_derefidx_vbuz1_eq_pbuc2_derefidx_vbuz1_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuz1_eq_vwuc2_derefidx_vbuz1_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuz1_eq_vwuc2_derefidx_vbuz1_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuxx_eq_vwuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuyy_eq_vwuc2_derefidx_vbuyy_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuxx_eq_vwuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuxx_eq_vwuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis vbuaa_eq_vwuc1_derefidx_vbuxx_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuyy_eq_vwuc2_derefidx_vbuyy_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuyy_eq_vwuc2_derefidx_vbuyy_then_la1 -Attempting fragment synthesis vbuaa_eq_vwuc1_derefidx_vbuyy_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuxx_eq_pbuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuxx_eq_vwuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuxx_eq_vwuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis vbuaa_eq_vwuc1_derefidx_vbuxx_then_la1 -Succesfully loaded fragment vbuaa_eq_pbuc1_derefidx_vbuxx_then_la1 -Succesfully synthesized fragment pbuc1_derefidx_vbuxx_eq_pbuc2_derefidx_vbuxx_then_la1 (from vbuaa_eq_pbuc1_derefidx_vbuxx_then_la1) -Succesfully synthesized fragment pbuc1_derefidx_vbuz1_eq_pbuc2_derefidx_vbuz1_then_la1 (from pbuc1_derefidx_vbuxx_eq_pbuc2_derefidx_vbuxx_then_la1) -Succesfully loaded fragment vbuz1=_inc_vbuz1 -Succesfully loaded fragment vbuz1_neq_0_then_la1 -Attempting fragment synthesis vwuz1=vbuc1 -Succesfully loaded fragment vwuz1=vbuaa -Succesfully synthesized fragment vwuz1=vbuc1 (from vwuz1=vbuaa) -Attempting fragment synthesis vbuz1=vbuz2_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuz1_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuz1_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuz1=vbuz2_band_vbuc1 (from vbuaa=vbuz1_band_vbuc1) -Succesfully loaded fragment vwuz1=_inc_vwuz1 -Attempting fragment synthesis vbuz1=_lo_vwuz2 -Succesfully loaded fragment vbuaa=_lo_vwuz1 -Succesfully synthesized fragment vbuz1=_lo_vwuz2 (from vbuaa=_lo_vwuz1) -Attempting fragment synthesis pbuc1_derefidx_vbuz1=vbuz2 -Attempting fragment synthesis vwuc1_derefidx_vbuz1=vbuz2 -Succesfully loaded fragment vwuc1_derefidx_vbuz1=vbuaa -Succesfully synthesized fragment vwuc1_derefidx_vbuz1=vbuz2 (from vwuc1_derefidx_vbuz1=vbuaa) -Succesfully synthesized fragment pbuc1_derefidx_vbuz1=vbuz2 (from vwuc1_derefidx_vbuz1=vbuz2) -Attempting fragment synthesis vbuz1=_hi_vwuz2 -Succesfully loaded fragment vbuaa=_hi_vwuz1 -Succesfully synthesized fragment vbuz1=_hi_vwuz2 (from vbuaa=_hi_vwuz1) -Attempting fragment synthesis vbuz1=vbuz2_ror_1 -Attempting fragment synthesis vbuaa=vbuz1_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuz1_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuz1=vbuz2_ror_1 (from vbuaa=vbuz1_ror_1) -Attempting fragment synthesis vwuz1=vwuz1_plus_vbuz2 -Attempting fragment synthesis vwuz1=vwuz1_plus_vbuaa -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz1 -Succesfully synthesized fragment vwuz1=vwuz1_plus_vbuaa (from vwuz1=vbuaa_plus_vwuz1) -Succesfully synthesized fragment vwuz1=vwuz1_plus_vbuz2 (from vwuz1=vwuz1_plus_vbuaa) -Succesfully loaded fragment vwuz1=vwuz2_plus_vbuc1 -Attempting fragment synthesis vwuz1=vwuz2_plus_vbuz3 -Attempting fragment synthesis vwuz1=vwuz2_plus_vbuaa -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz2 -Succesfully synthesized fragment vwuz1=vwuz2_plus_vbuaa (from vwuz1=vbuaa_plus_vwuz2) -Succesfully synthesized fragment vwuz1=vwuz2_plus_vbuz3 (from vwuz1=vwuz2_plus_vbuaa) +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 ] INITIAL ASM //SEG0 Basic Upstart .pc = $801 "Basic" @@ -3760,490 +3182,191 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label _0 = 7 - .label _3 = 8 - .label _4 = 9 - .label _5 = $a - .label _8 = $b - .label _12 = $c - .label _14 = $d - .label _15 = $e - .label _16 = $10 - .label sqr = 5 + .label _2 = $b + .label _5 = $c + .label _6 = $d + .label _7 = $e + .label sqr_lo = 5 + .label sqr_hi = 7 + .label sqr = 9 .label i = 3 - .label i_3 = 4 - .label i_6 = 4 //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 (word) init_mul_tables::sqr#6 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vwuz1=vbuc1 + //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 + 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 + 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 sta sqr lda #0 sta sqr+1 - //SEG54 [27] phi (byte) init_mul_tables::i#4 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- vbuz1=vbuc1 + //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 lda #1 sta i + lda #0 + sta i+1 jmp b1 - //SEG55 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] + //SEG57 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] b1_from_b2: - //SEG56 [27] phi (word) init_mul_tables::sqr#6 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#0] -- register_copy - //SEG57 [27] phi (byte) init_mul_tables::i#4 = (byte) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy + //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 jmp b1 - //SEG58 init_mul_tables::@1 + //SEG62 init_mul_tables::@1 b1: - //SEG59 [28] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ) -- vbuz1=vbuz2_band_vbuc1 + //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 lda i and #1 - sta _0 - //SEG60 [29] if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) -- vbuz1_neq_0_then_la1 - lda _0 + 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 + lda _2 bne b2_from_b1 - jmp b5 - //SEG61 init_mul_tables::@5 - b5: - //SEG62 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 - inc sqr - bne !+ - inc sqr+1 - !: - //SEG63 [31] phi from init_mul_tables::@1 init_mul_tables::@5 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2] - b2_from_b1: - b2_from_b5: - //SEG64 [31] phi (word) init_mul_tables::sqr#5 = (word) init_mul_tables::sqr#6 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#0] -- register_copy - jmp b2 - //SEG65 init_mul_tables::@2 - b2: - //SEG66 [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ) -- vbuz1=_lo_vwuz2 - lda sqr - sta _3 - //SEG67 [33] *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 - lda _3 - ldx i - sta mul_sqr_lo,x - //SEG68 [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ) -- vbuz1=_hi_vwuz2 - lda sqr+1 - sta _4 - //SEG69 [35] *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 - lda _4 - ldx i - sta mul_sqr_hi,x - //SEG70 [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ) -- vbuz1=vbuz2_ror_1 - lda i - lsr - sta _5 - //SEG71 [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ) -- vwuz1=vwuz1_plus_vbuz2 - lda _5 - clc - adc sqr - sta sqr - bcc !+ - inc sqr+1 - !: - //SEG72 [38] (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) -- vbuz1=_inc_vbuz1 - inc i - //SEG73 [39] if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) -- vbuz1_neq_0_then_la1 - lda i - bne b1_from_b2 - //SEG74 [40] phi from init_mul_tables::@2 to init_mul_tables::@3 [phi:init_mul_tables::@2->init_mul_tables::@3] - b3_from_b2: - //SEG75 [40] phi (word) init_mul_tables::sqr#10 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@3#0] -- register_copy - //SEG76 [40] phi (byte) init_mul_tables::i#6 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables::@2->init_mul_tables::@3#1] -- vbuz1=vbuc1 - lda #0 - sta i_6 jmp b3 - //SEG77 [40] phi from init_mul_tables::@4 to init_mul_tables::@3 [phi:init_mul_tables::@4->init_mul_tables::@3] - b3_from_b4: - //SEG78 [40] phi (word) init_mul_tables::sqr#10 = (word) init_mul_tables::sqr#3 [phi:init_mul_tables::@4->init_mul_tables::@3#0] -- register_copy - //SEG79 [40] phi (byte) init_mul_tables::i#6 = (byte) init_mul_tables::i#3 [phi:init_mul_tables::@4->init_mul_tables::@3#1] -- register_copy - jmp b3 - //SEG80 init_mul_tables::@3 + //SEG65 init_mul_tables::@3 b3: - //SEG81 [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ) -- vbuz1=vbuz2_band_vbuc1 - lda i_6 - and #1 - sta _8 - //SEG82 [42] if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) -- vbuz1_neq_0_then_la1 - lda _8 - bne b4_from_b3 - jmp b7 - //SEG83 init_mul_tables::@7 - b7: - //SEG84 [43] (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ) -- vwuz1=_inc_vwuz1 + //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 inc sqr bne !+ inc sqr+1 !: - //SEG85 [44] phi from init_mul_tables::@3 init_mul_tables::@7 to init_mul_tables::@4 [phi:init_mul_tables::@3/init_mul_tables::@7->init_mul_tables::@4] - b4_from_b3: - b4_from_b7: - //SEG86 [44] phi (word) init_mul_tables::sqr#7 = (word) init_mul_tables::sqr#10 [phi:init_mul_tables::@3/init_mul_tables::@7->init_mul_tables::@4#0] -- register_copy - jmp b4 - //SEG87 init_mul_tables::@4 - b4: - //SEG88 [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ) -- vbuz1=_lo_vwuz2 + //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] + 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 + jmp b2 + //SEG69 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 lda sqr - sta _12 - //SEG89 [46] *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 - lda _12 - ldx i_6 - sta mul_sqr_lo+$100,x - //SEG90 [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ) -- vbuz1=_hi_vwuz2 + 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 + 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 + 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 lda sqr+1 - sta _14 - //SEG91 [48] *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 - lda _14 - ldx i_6 - sta mul_sqr_hi+$100,x - //SEG92 [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 ] ) -- vwuz1=vwuz2_plus_vbuc1 + 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 + 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 + 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 clc - adc #<$80 - sta _15 - lda sqr+1 - adc #0 - sta _15+1 - //SEG93 [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ) -- vbuz1=vbuz2_ror_1 - lda i_6 - lsr - sta _16 - //SEG94 [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ) -- vwuz1=vwuz2_plus_vbuz3 - lda _16 - clc - adc _15 + adc _7 sta sqr - lda #0 - adc _15+1 + lda sqr+1 + adc _7+1 sta sqr+1 - //SEG95 [52] (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) -- vbuz1=_inc_vbuz1 - inc i_3 - //SEG96 [53] if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@3 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) -- vbuz1_neq_0_then_la1 - lda i_3 - bne b3_from_b4 + //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 + 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 + lda i + cmp #<$200 + bne b1_from_b2 + lda i+1 + cmp #>$200 + bne b1_from_b2 jmp breturn - //SEG97 init_mul_tables::@return + //SEG80 init_mul_tables::@return breturn: - //SEG98 [54] return [ ] ( main:2::init_mul_tables:5 [ ] ) + //SEG81 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) rts } REGISTER UPLIFT POTENTIAL REGISTERS Statement [11] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2::mul_tables_compare:9 [ ] ) always clobbers reg byte a -Attempting fragment synthesis pbuc1_derefidx_vbuaa_eq_pbuc2_derefidx_vbuaa_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuaa_eq_vwuc2_derefidx_vbuaa_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuaa_eq_vwuc2_derefidx_vbuaa_then_la1 -Unknown fragment pbuc1_derefidx_vbuaa_eq_pbuc2_derefidx_vbuaa_then_la1 -Potential register analysis [13] if(*(mul_sqr_lo#0 + mul_tables_compare::i#10)==*(asm_mul_sqr_lo#0 + mul_tables_compare::i#10)) goto mul_tables_compare::@2 missing fragment pbuc1_derefidx_vbuaa_eq_pbuc2_derefidx_vbuaa_then_la1 allocation: reg byte a [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -Attempting fragment synthesis pbuc1_derefidx_vbuxx_eq_pbuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuxx_eq_vwuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuxx_eq_vwuc2_derefidx_vbuxx_then_la1 -Attempting fragment synthesis vbuaa_eq_vwuc1_derefidx_vbuxx_then_la1 -Succesfully loaded fragment vbuaa_eq_pbuc1_derefidx_vbuxx_then_la1 -Succesfully synthesized fragment pbuc1_derefidx_vbuxx_eq_pbuc2_derefidx_vbuxx_then_la1 (from vbuaa_eq_pbuc1_derefidx_vbuxx_then_la1) -Attempting fragment synthesis pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuyy_eq_vwuc2_derefidx_vbuyy_then_la1 -Attempting fragment synthesis vwuc1_derefidx_vbuyy_eq_vwuc2_derefidx_vbuyy_then_la1 -Attempting fragment synthesis vbuaa_eq_vwuc1_derefidx_vbuyy_then_la1 -Attempting fragment synthesis vbuaa_eq_pbuc1_derefidx_vbuyy_then_la1 -Attempting fragment synthesis vbuaa_eq_vwuc1_derefidx_vbuyy_then_la1 -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [13] if(*(mul_sqr_lo#0 + mul_tables_compare::i#10)==*(asm_mul_sqr_lo#0 + mul_tables_compare::i#10)) goto mul_tables_compare::@2 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuaa_eq_pbuc2_derefidx_vbuaa_then_la1 - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 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 Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] 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 -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [15] if(*(mul_sqr_hi#0+256 + mul_tables_compare::i#10)==*(asm_mul_sqr_hi#0+256 + mul_tables_compare::i#10)) goto mul_tables_compare::@3 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 Statement [15] 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::@3 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement [16] *((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 -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [17] if(*(mul_sqr_lo#0 + mul_tables_compare::i#10)==*(asm_mul_sqr_lo#0 + mul_tables_compare::i#10)) goto mul_tables_compare::@4 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 Statement [17] 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::@4 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement [18] *((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 -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [19] if(*(mul_sqr_hi#0+256 + mul_tables_compare::i#10)==*(asm_mul_sqr_hi#0+256 + mul_tables_compare::i#10)) goto mul_tables_compare::@5 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 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 -Succesfully loaded fragment vbuxx_neq_0_then_la1 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 -Attempting fragment synthesis vbuz1=vbuaa_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuz1=vbuaa_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Attempting fragment synthesis vbuz1=vbuxx_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuxx_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuxx_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuz1=vbuxx_band_vbuc1 (from vbuaa=vbuxx_band_vbuc1) -Attempting fragment synthesis vbuz1=vbuyy_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuyy_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuyy_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuz1=vbuyy_band_vbuc1 (from vbuaa=vbuyy_band_vbuc1) -Attempting fragment synthesis vbuaa=vbuz1_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuz1_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuxx_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuxx_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Attempting fragment synthesis vbuaa=vbuyy_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuyy_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Attempting fragment synthesis vbuxx=vbuz1_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuz1_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuz1_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuxx=vbuz1_band_vbuc1 (from vbuaa=vbuz1_band_vbuc1) -Attempting fragment synthesis vbuxx=vbuaa_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuxx=vbuaa_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Attempting fragment synthesis vbuxx=vbuxx_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuxx_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuxx_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuxx=vbuxx_band_vbuc1 (from vbuaa=vbuxx_band_vbuc1) -Attempting fragment synthesis vbuxx=vbuyy_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuyy_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuyy_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuxx=vbuyy_band_vbuc1 (from vbuaa=vbuyy_band_vbuc1) -Attempting fragment synthesis vbuyy=vbuz1_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuz1_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuz1_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuyy=vbuz1_band_vbuc1 (from vbuaa=vbuz1_band_vbuc1) -Attempting fragment synthesis vbuyy=vbuaa_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuyy=vbuaa_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Attempting fragment synthesis vbuyy=vbuxx_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuxx_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuxx_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuyy=vbuxx_band_vbuc1 (from vbuaa=vbuxx_band_vbuc1) -Attempting fragment synthesis vbuyy=vbuyy_band_vbuc1 -Attempting fragment synthesis vbuaa=vbuyy_band_vbuc1 -Succesfully loaded fragment vbuaa=vbuaa_band_vbuc1 -Succesfully synthesized fragment vbuaa=vbuyy_band_vbuc1 (from vbuaa=vbuaa_band_vbuc1) -Succesfully synthesized fragment vbuyy=vbuyy_band_vbuc1 (from vbuaa=vbuyy_band_vbuc1) -Statement [28] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ init_mul_tables::i#4 init_mul_tables::i#1 ] -Succesfully loaded fragment vbuaa_neq_0_then_la1 -Succesfully loaded fragment vbuaa=_lo_vwuz1 -Attempting fragment synthesis vbuxx=_lo_vwuz1 -Succesfully loaded fragment vbuaa=_lo_vwuz1 -Succesfully synthesized fragment vbuxx=_lo_vwuz1 (from vbuaa=_lo_vwuz1) -Attempting fragment synthesis vbuyy=_lo_vwuz1 -Succesfully loaded fragment vbuaa=_lo_vwuz1 -Succesfully synthesized fragment vbuyy=_lo_vwuz1 (from vbuaa=_lo_vwuz1) -Statement [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ) always clobbers reg byte a -Attempting fragment synthesis pbuc1_derefidx_vbuxx=vbuz1 -Succesfully loaded fragment vwuc1_derefidx_vbuxx=vbuz1 -Succesfully synthesized fragment pbuc1_derefidx_vbuxx=vbuz1 (from vwuc1_derefidx_vbuxx=vbuz1) -Attempting fragment synthesis pbuc1_derefidx_vbuyy=vbuz1 -Succesfully loaded fragment vwuc1_derefidx_vbuyy=vbuz1 -Succesfully synthesized fragment pbuc1_derefidx_vbuyy=vbuz1 (from vwuc1_derefidx_vbuyy=vbuz1) -Attempting fragment synthesis pbuc1_derefidx_vbuz1=vbuaa -Succesfully loaded fragment vwuc1_derefidx_vbuz1=vbuaa -Succesfully synthesized fragment pbuc1_derefidx_vbuz1=vbuaa (from vwuc1_derefidx_vbuz1=vbuaa) -Succesfully loaded fragment vbuaa=_hi_vwuz1 -Attempting fragment synthesis vbuxx=_hi_vwuz1 -Succesfully loaded fragment vbuaa=_hi_vwuz1 -Succesfully synthesized fragment vbuxx=_hi_vwuz1 (from vbuaa=_hi_vwuz1) -Attempting fragment synthesis vbuyy=_hi_vwuz1 -Succesfully loaded fragment vbuaa=_hi_vwuz1 -Succesfully synthesized fragment vbuyy=_hi_vwuz1 (from vbuaa=_hi_vwuz1) -Statement [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ) always clobbers reg byte a -Attempting fragment synthesis vbuz1=vbuxx_ror_1 -Attempting fragment synthesis vbuaa=vbuxx_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuxx_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuz1=vbuxx_ror_1 (from vbuaa=vbuxx_ror_1) -Attempting fragment synthesis vbuz1=vbuyy_ror_1 -Attempting fragment synthesis vbuaa=vbuyy_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuyy_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuz1=vbuyy_ror_1 (from vbuaa=vbuyy_ror_1) -Attempting fragment synthesis vbuaa=vbuz1_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuz1_ror_1 (from vbuaa=vbuaa_ror_1) -Attempting fragment synthesis vbuaa=vbuxx_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuxx_ror_1 (from vbuaa=vbuaa_ror_1) -Attempting fragment synthesis vbuaa=vbuyy_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuyy_ror_1 (from vbuaa=vbuaa_ror_1) -Attempting fragment synthesis vbuxx=vbuz1_ror_1 -Attempting fragment synthesis vbuaa=vbuz1_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuz1_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuxx=vbuz1_ror_1 (from vbuaa=vbuz1_ror_1) -Attempting fragment synthesis vbuxx=vbuxx_ror_1 -Attempting fragment synthesis vbuaa=vbuxx_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuxx_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuxx=vbuxx_ror_1 (from vbuaa=vbuxx_ror_1) -Attempting fragment synthesis vbuxx=vbuyy_ror_1 -Attempting fragment synthesis vbuaa=vbuyy_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuyy_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuxx=vbuyy_ror_1 (from vbuaa=vbuyy_ror_1) -Attempting fragment synthesis vbuyy=vbuz1_ror_1 -Attempting fragment synthesis vbuaa=vbuz1_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuz1_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuyy=vbuz1_ror_1 (from vbuaa=vbuz1_ror_1) -Attempting fragment synthesis vbuyy=vbuxx_ror_1 -Attempting fragment synthesis vbuaa=vbuxx_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuxx_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuyy=vbuxx_ror_1 (from vbuaa=vbuxx_ror_1) -Attempting fragment synthesis vbuyy=vbuyy_ror_1 -Attempting fragment synthesis vbuaa=vbuyy_ror_1 -Succesfully loaded fragment vbuaa=vbuaa_ror_1 -Succesfully synthesized fragment vbuaa=vbuyy_ror_1 (from vbuaa=vbuaa_ror_1) -Succesfully synthesized fragment vbuyy=vbuyy_ror_1 (from vbuaa=vbuyy_ror_1) -Statement [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ) always clobbers reg byte a -Attempting fragment synthesis vwuz1=vwuz1_plus_vbuaa -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz1 -Succesfully synthesized fragment vwuz1=vwuz1_plus_vbuaa (from vwuz1=vbuaa_plus_vwuz1) -Attempting fragment synthesis vwuz1=vwuz1_plus_vbuxx -Attempting fragment synthesis vwuz1=vbuxx_plus_vwuz1 -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz1 -Succesfully synthesized fragment vwuz1=vbuxx_plus_vwuz1 (from vwuz1=vbuaa_plus_vwuz1) -Succesfully synthesized fragment vwuz1=vwuz1_plus_vbuxx (from vwuz1=vbuxx_plus_vwuz1) -Attempting fragment synthesis vwuz1=vwuz1_plus_vbuyy -Attempting fragment synthesis vwuz1=vbuyy_plus_vwuz1 -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz1 -Succesfully synthesized fragment vwuz1=vbuyy_plus_vwuz1 (from vwuz1=vbuaa_plus_vwuz1) -Succesfully synthesized fragment vwuz1=vwuz1_plus_vbuyy (from vwuz1=vbuyy_plus_vwuz1) -Statement [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ) always clobbers reg byte a -Statement [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ init_mul_tables::i#6 init_mul_tables::i#3 ] -Statement [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ) always clobbers reg byte a -Statement [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ) always clobbers reg byte a -Attempting fragment synthesis pbuc1_derefidx_vbuz1=vbuxx -Succesfully loaded fragment vwuc1_derefidx_vbuz1=vbuxx -Succesfully synthesized fragment pbuc1_derefidx_vbuz1=vbuxx (from vwuc1_derefidx_vbuz1=vbuxx) -Attempting fragment synthesis pbuc1_derefidx_vbuz1=vbuyy -Succesfully loaded fragment vwuc1_derefidx_vbuz1=vbuyy -Succesfully synthesized fragment pbuc1_derefidx_vbuz1=vbuyy (from vwuc1_derefidx_vbuz1=vbuyy) -Statement [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 ] ) always clobbers reg byte a -Statement [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ) always clobbers reg byte a -Attempting fragment synthesis vwuz1=vwuz2_plus_vbuaa -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz2 -Succesfully synthesized fragment vwuz1=vwuz2_plus_vbuaa (from vwuz1=vbuaa_plus_vwuz2) -Attempting fragment synthesis vwuz1=vwuz2_plus_vbuxx -Attempting fragment synthesis vwuz1=vbuxx_plus_vwuz2 -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz2 -Succesfully synthesized fragment vwuz1=vbuxx_plus_vwuz2 (from vwuz1=vbuaa_plus_vwuz2) -Succesfully synthesized fragment vwuz1=vwuz2_plus_vbuxx (from vwuz1=vbuxx_plus_vwuz2) -Attempting fragment synthesis vwuz1=vwuz2_plus_vbuyy -Attempting fragment synthesis vwuz1=vbuyy_plus_vwuz2 -Succesfully loaded fragment vwuz1=vbuaa_plus_vwuz2 -Succesfully synthesized fragment vwuz1=vbuyy_plus_vwuz2 (from vwuz1=vbuaa_plus_vwuz2) -Succesfully synthesized fragment vwuz1=vwuz2_plus_vbuyy (from vwuz1=vbuyy_plus_vwuz2) -Statement [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ) 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::$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 [11] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2::mul_tables_compare:9 [ ] ) always clobbers reg byte a -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [13] if(*(mul_sqr_lo#0 + mul_tables_compare::i#10)==*(asm_mul_sqr_lo#0 + mul_tables_compare::i#10)) goto mul_tables_compare::@2 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 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 -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [15] if(*(mul_sqr_hi#0+256 + mul_tables_compare::i#10)==*(asm_mul_sqr_hi#0+256 + mul_tables_compare::i#10)) goto mul_tables_compare::@3 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 Statement [15] 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::@3 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement [16] *((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 -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [17] if(*(mul_sqr_lo#0 + mul_tables_compare::i#10)==*(asm_mul_sqr_lo#0 + mul_tables_compare::i#10)) goto mul_tables_compare::@4 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 Statement [17] 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::@4 [ mul_tables_compare::i#10 ] ( main:2::mul_tables_compare:9 [ mul_tables_compare::i#10 ] ) always clobbers reg byte a Statement [18] *((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 -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Potential register analysis [19] if(*(mul_sqr_hi#0+256 + mul_tables_compare::i#10)==*(asm_mul_sqr_hi#0+256 + mul_tables_compare::i#10)) goto mul_tables_compare::@5 missing fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 allocation: reg byte y [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 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::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ) always clobbers reg byte a -Statement [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ) always clobbers reg byte a -Statement [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ) always clobbers reg byte a -Statement [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ) always clobbers reg byte a -Statement [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ) always clobbers reg byte a -Statement [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ) always clobbers reg byte a -Statement [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ) always clobbers reg byte a -Statement [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ) always clobbers reg byte a -Statement [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 ] ) always clobbers reg byte a -Statement [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ) always clobbers reg byte a -Statement [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ) 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::$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 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_BYTE:3 [ init_mul_tables::i#4 init_mul_tables::i#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 [ init_mul_tables::i#6 init_mul_tables::i#3 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:5 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 ] : zp ZP_WORD:5 , -Potential registers zp ZP_BYTE:7 [ init_mul_tables::$0 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 [ init_mul_tables::$3 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ init_mul_tables::$4 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 [ init_mul_tables::$5 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 [ init_mul_tables::$8 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:12 [ init_mul_tables::$12 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 [ init_mul_tables::$14 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:14 [ init_mul_tables::$15 ] : zp ZP_WORD:14 , -Potential registers zp ZP_BYTE:16 [ init_mul_tables::$16 ] : zp ZP_BYTE:16 , reg byte a , 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 , REGISTER UPLIFT SCOPES -Uplift Scope [init_mul_tables] 108.17: zp ZP_WORD:5 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 ] 22.5: zp ZP_BYTE:3 [ init_mul_tables::i#4 init_mul_tables::i#1 ] 22: zp ZP_BYTE:4 [ init_mul_tables::i#6 init_mul_tables::i#3 ] 22: zp ZP_BYTE:7 [ init_mul_tables::$0 ] 22: zp ZP_BYTE:8 [ init_mul_tables::$3 ] 22: zp ZP_BYTE:9 [ init_mul_tables::$4 ] 22: zp ZP_BYTE:10 [ init_mul_tables::$5 ] 22: zp ZP_BYTE:11 [ init_mul_tables::$8 ] 22: zp ZP_BYTE:12 [ init_mul_tables::$12 ] 22: zp ZP_BYTE:13 [ init_mul_tables::$14 ] 22: zp ZP_BYTE:16 [ init_mul_tables::$16 ] 11: zp ZP_WORD:14 [ init_mul_tables::$15 ] +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 [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 [] -Succesfully loaded fragment vbuxx=vbuc1 -Succesfully loaded fragment vbuxx=_inc_vbuxx -Succesfully loaded fragment vbuyy=vbuc1 -Succesfully loaded fragment vbuyy=_inc_vbuyy -Succesfully loaded fragment vbuyy_neq_0_then_la1 -Attempting fragment synthesis pbuc1_derefidx_vbuxx=vbuaa -Succesfully loaded fragment vwuc1_derefidx_vbuxx=vbuaa -Succesfully synthesized fragment pbuc1_derefidx_vbuxx=vbuaa (from vwuc1_derefidx_vbuxx=vbuaa) -Attempting fragment synthesis pbuc1_derefidx_vbuyy=vbuaa -Succesfully loaded fragment vwuc1_derefidx_vbuyy=vbuaa -Succesfully synthesized fragment pbuc1_derefidx_vbuyy=vbuaa (from vwuc1_derefidx_vbuyy=vbuaa) -Attempting fragment synthesis pbuc1_derefidx_vbuyy=vbuxx -Succesfully loaded fragment vwuc1_derefidx_vbuyy=vbuxx -Succesfully synthesized fragment pbuc1_derefidx_vbuyy=vbuxx (from vwuc1_derefidx_vbuyy=vbuxx) -Attempting fragment synthesis pbuc1_derefidx_vbuxx=vbuyy -Succesfully loaded fragment vwuc1_derefidx_vbuxx=vbuyy -Succesfully synthesized fragment pbuc1_derefidx_vbuxx=vbuyy (from vwuc1_derefidx_vbuxx=vbuyy) -Uplift attempts [init_mul_tables] 10000/589824 (limiting to 10000) -Uplifting [init_mul_tables] best 3547 combination zp ZP_WORD:5 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 ] reg byte x [ init_mul_tables::i#4 init_mul_tables::i#1 ] reg byte x [ init_mul_tables::i#6 init_mul_tables::i#3 ] reg byte a [ init_mul_tables::$0 ] reg byte a [ init_mul_tables::$3 ] reg byte a [ init_mul_tables::$4 ] reg byte a [ init_mul_tables::$5 ] zp ZP_BYTE:11 [ init_mul_tables::$8 ] reg byte a [ init_mul_tables::$12 ] zp ZP_BYTE:13 [ init_mul_tables::$14 ] zp ZP_BYTE:16 [ init_mul_tables::$16 ] zp ZP_WORD:14 [ init_mul_tables::$15 ] -Limited combination testing to 10000 combinations of 589824 possible. -Unknown fragment pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Uplifting [mul_tables_compare] best 3357 combination reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -Uplifting [main] best 3357 combination -Uplifting [init_mul_tables_asm] best 3357 combination -Uplifting [] best 3357 combination -MISSING FRAGMENTS - pbuc1_derefidx_vbuyy_eq_pbuc2_derefidx_vbuyy_then_la1 -Attempting to uplift remaining variables inzp ZP_BYTE:11 [ init_mul_tables::$8 ] -Uplifting [init_mul_tables] best 3317 combination reg byte a [ init_mul_tables::$8 ] -Attempting to uplift remaining variables inzp ZP_BYTE:13 [ init_mul_tables::$14 ] -Uplifting [init_mul_tables] best 3257 combination reg byte a [ init_mul_tables::$14 ] -Attempting to uplift remaining variables inzp ZP_BYTE:16 [ init_mul_tables::$16 ] -Uplifting [init_mul_tables] best 3197 combination reg byte a [ init_mul_tables::$16 ] -Coalescing zero page register [ zp ZP_WORD:5 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 ] ] with [ zp ZP_WORD:14 [ init_mul_tables::$15 ] ] -Allocated (was zp ZP_WORD:5) zp ZP_WORD:2 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 init_mul_tables::$15 ] -Succesfully loaded fragment vwuz1=vwuz1_plus_vbuc1 +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 +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 ] ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -4412,138 +3535,115 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label _15 = 2 - .label sqr = 2 + .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 (word) init_mul_tables::sqr#6 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vwuz1=vbuc1 + //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 + 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 + 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 sta sqr lda #0 sta sqr+1 - //SEG54 [27] phi (byte) init_mul_tables::i#4 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- vbuxx=vbuc1 - ldx #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 + lda #1 + sta i + lda #0 + sta i+1 jmp b1 - //SEG55 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] + //SEG57 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] b1_from_b2: - //SEG56 [27] phi (word) init_mul_tables::sqr#6 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#0] -- register_copy - //SEG57 [27] phi (byte) init_mul_tables::i#4 = (byte) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy + //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 jmp b1 - //SEG58 init_mul_tables::@1 + //SEG62 init_mul_tables::@1 b1: - //SEG59 [28] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa + //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 + lda i and #1 - //SEG60 [29] if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) -- vbuaa_neq_0_then_la1 + //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 cmp #0 bne b2_from_b1 - jmp b5 - //SEG61 init_mul_tables::@5 - b5: - //SEG62 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 - inc sqr - bne !+ - inc sqr+1 - !: - //SEG63 [31] phi from init_mul_tables::@1 init_mul_tables::@5 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2] - b2_from_b1: - b2_from_b5: - //SEG64 [31] phi (word) init_mul_tables::sqr#5 = (word) init_mul_tables::sqr#6 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#0] -- register_copy - jmp b2 - //SEG65 init_mul_tables::@2 - b2: - //SEG66 [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ) -- vbuaa=_lo_vwuz1 - lda sqr - //SEG67 [33] *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_lo,x - //SEG68 [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ) -- vbuaa=_hi_vwuz1 - lda sqr+1 - //SEG69 [35] *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_hi,x - //SEG70 [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ) -- vbuaa=vbuxx_ror_1 - txa - lsr - //SEG71 [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ) -- vwuz1=vwuz1_plus_vbuaa - clc - adc sqr - sta sqr - bcc !+ - inc sqr+1 - !: - //SEG72 [38] (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG73 [39] if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) -- vbuxx_neq_0_then_la1 - cpx #0 - bne b1_from_b2 - //SEG74 [40] phi from init_mul_tables::@2 to init_mul_tables::@3 [phi:init_mul_tables::@2->init_mul_tables::@3] - b3_from_b2: - //SEG75 [40] phi (word) init_mul_tables::sqr#10 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@3#0] -- register_copy - //SEG76 [40] phi (byte) init_mul_tables::i#6 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables::@2->init_mul_tables::@3#1] -- vbuxx=vbuc1 - ldx #0 jmp b3 - //SEG77 [40] phi from init_mul_tables::@4 to init_mul_tables::@3 [phi:init_mul_tables::@4->init_mul_tables::@3] - b3_from_b4: - //SEG78 [40] phi (word) init_mul_tables::sqr#10 = (word) init_mul_tables::sqr#3 [phi:init_mul_tables::@4->init_mul_tables::@3#0] -- register_copy - //SEG79 [40] phi (byte) init_mul_tables::i#6 = (byte) init_mul_tables::i#3 [phi:init_mul_tables::@4->init_mul_tables::@3#1] -- register_copy - jmp b3 - //SEG80 init_mul_tables::@3 + //SEG65 init_mul_tables::@3 b3: - //SEG81 [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - //SEG82 [42] if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) -- vbuaa_neq_0_then_la1 - cmp #0 - bne b4_from_b3 - jmp b7 - //SEG83 init_mul_tables::@7 - b7: - //SEG84 [43] (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ) -- vwuz1=_inc_vwuz1 + //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 inc sqr bne !+ inc sqr+1 !: - //SEG85 [44] phi from init_mul_tables::@3 init_mul_tables::@7 to init_mul_tables::@4 [phi:init_mul_tables::@3/init_mul_tables::@7->init_mul_tables::@4] - b4_from_b3: - b4_from_b7: - //SEG86 [44] phi (word) init_mul_tables::sqr#7 = (word) init_mul_tables::sqr#10 [phi:init_mul_tables::@3/init_mul_tables::@7->init_mul_tables::@4#0] -- register_copy - jmp b4 - //SEG87 init_mul_tables::@4 - b4: - //SEG88 [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ) -- vbuaa=_lo_vwuz1 + //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] + 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 + jmp b2 + //SEG69 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 lda sqr - //SEG89 [46] *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_lo+$100,x - //SEG90 [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ) -- vbuaa=_hi_vwuz1 + //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 + 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 + 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 lda sqr+1 - //SEG91 [48] *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_hi+$100,x - //SEG92 [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 ] ) -- vwuz1=vwuz1_plus_vbuc1 - lda _15 - clc - adc #<$80 - sta _15 - bcc !+ - inc _15+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 + 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 + inc sqr_hi + bne !+ + inc sqr_hi+1 !: - //SEG93 [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ) -- vbuaa=vbuxx_ror_1 - txa - lsr - //SEG94 [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ) -- vwuz1=vwuz1_plus_vbuaa + //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 clc - adc sqr + adc _7 sta sqr - bcc !+ - inc sqr+1 + 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 + inc i + bne !+ + inc i+1 !: - //SEG95 [52] (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG96 [53] if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@3 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) -- vbuxx_neq_0_then_la1 - cpx #0 - bne b3_from_b4 + //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 + lda i + cmp #<$200 + bne b1_from_b2 + lda i+1 + cmp #>$200 + bne b1_from_b2 jmp breturn - //SEG97 init_mul_tables::@return + //SEG80 init_mul_tables::@return breturn: - //SEG98 [54] return [ ] ( main:2::init_mul_tables:5 [ ] ) + //SEG81 [42] return [ ] ( main:2::init_mul_tables:5 [ ] ) rts } @@ -4565,11 +3665,8 @@ Removing instruction jmp b5 Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp b1 -Removing instruction jmp b5 -Removing instruction jmp b2 Removing instruction jmp b3 -Removing instruction jmp b7 -Removing instruction jmp b4 +Removing instruction jmp b2 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 @@ -4577,8 +3674,7 @@ Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b5 with b1 Replacing label b2_from_b1 with b2 Replacing label b1_from_b2 with b1 -Replacing label b4_from_b3 with b4 -Replacing label b3_from_b4 with b3 +Replacing label b1_from_b2 with b1 Removing instruction bbegin: Removing instruction b4_from_bbegin: Removing instruction main_from_b4: @@ -4588,10 +3684,7 @@ Removing instruction b2_from_b1: Removing instruction b1_from_b5: Removing instruction b1_from_b2: Removing instruction b2_from_b1: -Removing instruction b2_from_b5: -Removing instruction b3_from_b4: -Removing instruction b4_from_b3: -Removing instruction b4_from_b7: +Removing instruction b2_from_b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction b4: Removing instruction bend: @@ -4607,14 +3700,11 @@ Removing instruction b9: Removing instruction breturn: Removing instruction breturn: Removing instruction b1_from_init_mul_tables: -Removing instruction b5: -Removing instruction b3_from_b2: -Removing instruction b7: +Removing instruction b3: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Removing instruction jmp b1 Removing instruction jmp b1 -Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination FINAL SYMBOL TABLE @@ -4628,36 +3718,28 @@ FINAL SYMBOL TABLE (byte[512]) asm_mul_sqr_lo (const byte[512]) asm_mul_sqr_lo#0 asm_mul_sqr_lo = { fill( 512, 0) } (void()) init_mul_tables() -(byte~) init_mul_tables::$0 reg byte a 22.0 -(byte~) init_mul_tables::$12 reg byte a 22.0 -(byte~) init_mul_tables::$14 reg byte a 22.0 -(word~) init_mul_tables::$15 $15 zp ZP_WORD:2 11.0 -(byte~) init_mul_tables::$16 reg byte a 22.0 -(byte~) init_mul_tables::$3 reg byte a 22.0 -(byte~) init_mul_tables::$4 reg byte a 22.0 +(byte~) init_mul_tables::$2 reg byte a 22.0 (byte~) init_mul_tables::$5 reg byte a 22.0 -(byte~) init_mul_tables::$8 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::@4 -(label) init_mul_tables::@5 -(label) init_mul_tables::@7 (label) init_mul_tables::@return -(byte) init_mul_tables::i -(byte) init_mul_tables::i#1 reg byte x 16.5 -(byte) init_mul_tables::i#3 reg byte x 16.5 -(byte) init_mul_tables::i#4 reg byte x 6.0 -(byte) init_mul_tables::i#6 reg byte x 5.5 +(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::sqr -(word) init_mul_tables::sqr#1 sqr zp ZP_WORD:2 11.0 -(word) init_mul_tables::sqr#10 sqr zp ZP_WORD:2 14.666666666666666 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:2 22.0 -(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:2 7.333333333333333 -(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:2 22.0 -(word) init_mul_tables::sqr#5 sqr zp ZP_WORD:2 9.166666666666666 -(word) init_mul_tables::sqr#6 sqr zp ZP_WORD:2 11.0 -(word) init_mul_tables::sqr#7 sqr zp ZP_WORD:2 11.0 +(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#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_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 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -4684,17 +3766,14 @@ FINAL SYMBOL TABLE (byte) mul_tables_compare::i#10 reg byte x 12.222222222222221 reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -reg byte x [ init_mul_tables::i#4 init_mul_tables::i#1 ] -reg byte x [ init_mul_tables::i#6 init_mul_tables::i#3 ] -zp ZP_WORD:2 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 init_mul_tables::$15 ] -reg byte a [ init_mul_tables::$0 ] -reg byte a [ init_mul_tables::$3 ] -reg byte a [ init_mul_tables::$4 ] +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 ] +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::$8 ] -reg byte a [ init_mul_tables::$12 ] -reg byte a [ init_mul_tables::$14 ] -reg byte a [ init_mul_tables::$16 ] +reg byte a [ init_mul_tables::$6 ] +zp ZP_WORD:10 [ init_mul_tables::$7 ] FINAL CODE //SEG0 Basic Upstart @@ -4826,117 +3905,103 @@ init_mul_tables_asm: { } //SEG51 init_mul_tables init_mul_tables: { - .label _15 = 2 - .label sqr = 2 + .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 (word) init_mul_tables::sqr#6 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables->init_mul_tables::@1#0] -- vwuz1=vbuc1 + //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 + 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 + 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 sta sqr sta sqr+1 - //SEG54 [27] phi (byte) init_mul_tables::i#4 = (byte/signed byte/word/signed word) 1 [phi:init_mul_tables->init_mul_tables::@1#1] -- vbuxx=vbuc1 - ldx #1 - //SEG55 [27] phi from init_mul_tables::@2 to init_mul_tables::@1 [phi:init_mul_tables::@2->init_mul_tables::@1] - //SEG56 [27] phi (word) init_mul_tables::sqr#6 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@1#0] -- register_copy - //SEG57 [27] phi (byte) init_mul_tables::i#4 = (byte) init_mul_tables::i#1 [phi:init_mul_tables::@2->init_mul_tables::@1#1] -- register_copy - //SEG58 init_mul_tables::@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 + lda #1 + sta i + lda #0 + 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 b1: - //SEG59 [28] (byte~) init_mul_tables::$0 ← (byte) init_mul_tables::i#4 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 init_mul_tables::$0 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa + //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 + lda i and #1 - //SEG60 [29] if((byte~) init_mul_tables::$0!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@2 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#6 ] ) -- vbuaa_neq_0_then_la1 + //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 cmp #0 bne b2 - //SEG61 init_mul_tables::@5 - //SEG62 [30] (word) init_mul_tables::sqr#2 ← ++ (word) init_mul_tables::sqr#6 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#2 ] ) -- vwuz1=_inc_vwuz1 + //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 inc sqr bne !+ inc sqr+1 !: - //SEG63 [31] phi from init_mul_tables::@1 init_mul_tables::@5 to init_mul_tables::@2 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2] - //SEG64 [31] phi (word) init_mul_tables::sqr#5 = (word) init_mul_tables::sqr#6 [phi:init_mul_tables::@1/init_mul_tables::@5->init_mul_tables::@2#0] -- register_copy - //SEG65 init_mul_tables::@2 + //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 b2: - //SEG66 [32] (byte~) init_mul_tables::$3 ← < (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$3 ] ) -- vbuaa=_lo_vwuz1 + //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 lda sqr - //SEG67 [33] *((const byte[512]) mul_sqr_lo#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$3 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_lo,x - //SEG68 [34] (byte~) init_mul_tables::$4 ← > (word) init_mul_tables::sqr#5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$4 ] ) -- vbuaa=_hi_vwuz1 - lda sqr+1 - //SEG69 [35] *((const byte[512]) mul_sqr_hi#0 + (byte) init_mul_tables::i#4) ← (byte~) init_mul_tables::$4 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_hi,x - //SEG70 [36] (byte~) init_mul_tables::$5 ← (byte) init_mul_tables::i#4 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#5 init_mul_tables::$5 ] ) -- vbuaa=vbuxx_ror_1 - txa - lsr - //SEG71 [37] (word) init_mul_tables::sqr#1 ← (word) init_mul_tables::sqr#5 + (byte~) init_mul_tables::$5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#4 init_mul_tables::sqr#1 ] ) -- vwuz1=vwuz1_plus_vbuaa - clc - adc sqr - sta sqr - bcc !+ - inc sqr+1 - !: - //SEG72 [38] (byte) init_mul_tables::i#1 ← ++ (byte) init_mul_tables::i#4 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG73 [39] if((byte) init_mul_tables::i#1!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@1 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#1 init_mul_tables::sqr#1 ] ) -- vbuxx_neq_0_then_la1 - cpx #0 - bne b1 - //SEG74 [40] phi from init_mul_tables::@2 to init_mul_tables::@3 [phi:init_mul_tables::@2->init_mul_tables::@3] - //SEG75 [40] phi (word) init_mul_tables::sqr#10 = (word) init_mul_tables::sqr#1 [phi:init_mul_tables::@2->init_mul_tables::@3#0] -- register_copy - //SEG76 [40] phi (byte) init_mul_tables::i#6 = (byte/signed byte/word/signed word) 0 [phi:init_mul_tables::@2->init_mul_tables::@3#1] -- vbuxx=vbuc1 - ldx #0 - //SEG77 [40] phi from init_mul_tables::@4 to init_mul_tables::@3 [phi:init_mul_tables::@4->init_mul_tables::@3] - //SEG78 [40] phi (word) init_mul_tables::sqr#10 = (word) init_mul_tables::sqr#3 [phi:init_mul_tables::@4->init_mul_tables::@3#0] -- register_copy - //SEG79 [40] phi (byte) init_mul_tables::i#6 = (byte) init_mul_tables::i#3 [phi:init_mul_tables::@4->init_mul_tables::@3#1] -- register_copy - //SEG80 init_mul_tables::@3 - b3: - //SEG81 [41] (byte~) init_mul_tables::$8 ← (byte) init_mul_tables::i#6 & (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 init_mul_tables::$8 ] ) -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - //SEG82 [42] if((byte~) init_mul_tables::$8!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@4 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#10 ] ) -- vbuaa_neq_0_then_la1 - cmp #0 - bne b4 - //SEG83 init_mul_tables::@7 - //SEG84 [43] (word) init_mul_tables::sqr#4 ← ++ (word) init_mul_tables::sqr#10 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#4 ] ) -- vwuz1=_inc_vwuz1 - inc 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 + 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 + inc sqr_lo bne !+ - inc sqr+1 + inc sqr_lo+1 !: - //SEG85 [44] phi from init_mul_tables::@3 init_mul_tables::@7 to init_mul_tables::@4 [phi:init_mul_tables::@3/init_mul_tables::@7->init_mul_tables::@4] - //SEG86 [44] phi (word) init_mul_tables::sqr#7 = (word) init_mul_tables::sqr#10 [phi:init_mul_tables::@3/init_mul_tables::@7->init_mul_tables::@4#0] -- register_copy - //SEG87 init_mul_tables::@4 - b4: - //SEG88 [45] (byte~) init_mul_tables::$12 ← < (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$12 ] ) -- vbuaa=_lo_vwuz1 - lda sqr - //SEG89 [46] *((const byte[512]) mul_sqr_lo#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$12 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_lo+$100,x - //SEG90 [47] (byte~) init_mul_tables::$14 ← > (word) init_mul_tables::sqr#7 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 init_mul_tables::$14 ] ) -- vbuaa=_hi_vwuz1 + //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 lda sqr+1 - //SEG91 [48] *((const byte[512]) mul_sqr_hi#0+(word/signed word) 256 + (byte) init_mul_tables::i#6) ← (byte~) init_mul_tables::$14 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#7 ] ) -- pbuc1_derefidx_vbuxx=vbuaa - sta mul_sqr_hi+$100,x - //SEG92 [49] (word~) init_mul_tables::$15 ← (word) init_mul_tables::sqr#7 + (byte/word/signed word) 128 [ init_mul_tables::i#6 init_mul_tables::$15 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 ] ) -- vwuz1=vwuz1_plus_vbuc1 - lda _15 - clc - adc #<$80 - sta _15 - bcc !+ - inc _15+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 + 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 + inc sqr_hi + bne !+ + inc sqr_hi+1 !: - //SEG93 [50] (byte~) init_mul_tables::$16 ← (byte) init_mul_tables::i#6 >> (byte/signed byte/word/signed word) 1 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::$15 init_mul_tables::$16 ] ) -- vbuaa=vbuxx_ror_1 - txa - lsr - //SEG94 [51] (word) init_mul_tables::sqr#3 ← (word~) init_mul_tables::$15 + (byte~) init_mul_tables::$16 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#6 init_mul_tables::sqr#3 ] ) -- vwuz1=vwuz1_plus_vbuaa + //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 clc - adc sqr + adc _7 sta sqr - bcc !+ - inc sqr+1 + 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 + inc i + bne !+ + inc i+1 !: - //SEG95 [52] (byte) init_mul_tables::i#3 ← ++ (byte) init_mul_tables::i#6 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG96 [53] if((byte) init_mul_tables::i#3!=(byte/signed byte/word/signed word) 0) goto init_mul_tables::@3 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ( main:2::init_mul_tables:5 [ init_mul_tables::i#3 init_mul_tables::sqr#3 ] ) -- vbuxx_neq_0_then_la1 - cpx #0 - bne b3 - //SEG97 init_mul_tables::@return - //SEG98 [54] return [ ] ( main:2::init_mul_tables:5 [ ] ) + //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 + 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 [ ] ) 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 24732527f..aa4fc5779 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym +++ b/src/main/java/dk/camelot64/kickc/test/ref/multiply.sym @@ -8,36 +8,28 @@ (byte[512]) asm_mul_sqr_lo (const byte[512]) asm_mul_sqr_lo#0 asm_mul_sqr_lo = { fill( 512, 0) } (void()) init_mul_tables() -(byte~) init_mul_tables::$0 reg byte a 22.0 -(byte~) init_mul_tables::$12 reg byte a 22.0 -(byte~) init_mul_tables::$14 reg byte a 22.0 -(word~) init_mul_tables::$15 $15 zp ZP_WORD:2 11.0 -(byte~) init_mul_tables::$16 reg byte a 22.0 -(byte~) init_mul_tables::$3 reg byte a 22.0 -(byte~) init_mul_tables::$4 reg byte a 22.0 +(byte~) init_mul_tables::$2 reg byte a 22.0 (byte~) init_mul_tables::$5 reg byte a 22.0 -(byte~) init_mul_tables::$8 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::@4 -(label) init_mul_tables::@5 -(label) init_mul_tables::@7 (label) init_mul_tables::@return -(byte) init_mul_tables::i -(byte) init_mul_tables::i#1 reg byte x 16.5 -(byte) init_mul_tables::i#3 reg byte x 16.5 -(byte) init_mul_tables::i#4 reg byte x 6.0 -(byte) init_mul_tables::i#6 reg byte x 5.5 +(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::sqr -(word) init_mul_tables::sqr#1 sqr zp ZP_WORD:2 11.0 -(word) init_mul_tables::sqr#10 sqr zp ZP_WORD:2 14.666666666666666 -(word) init_mul_tables::sqr#2 sqr zp ZP_WORD:2 22.0 -(word) init_mul_tables::sqr#3 sqr zp ZP_WORD:2 7.333333333333333 -(word) init_mul_tables::sqr#4 sqr zp ZP_WORD:2 22.0 -(word) init_mul_tables::sqr#5 sqr zp ZP_WORD:2 9.166666666666666 -(word) init_mul_tables::sqr#6 sqr zp ZP_WORD:2 11.0 -(word) init_mul_tables::sqr#7 sqr zp ZP_WORD:2 11.0 +(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#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_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 (void()) init_mul_tables_asm() (label) init_mul_tables_asm::@return (void()) main() @@ -64,14 +56,11 @@ (byte) mul_tables_compare::i#10 reg byte x 12.222222222222221 reg byte x [ mul_tables_compare::i#10 mul_tables_compare::i#1 ] -reg byte x [ init_mul_tables::i#4 init_mul_tables::i#1 ] -reg byte x [ init_mul_tables::i#6 init_mul_tables::i#3 ] -zp ZP_WORD:2 [ init_mul_tables::sqr#7 init_mul_tables::sqr#10 init_mul_tables::sqr#3 init_mul_tables::sqr#5 init_mul_tables::sqr#6 init_mul_tables::sqr#1 init_mul_tables::sqr#2 init_mul_tables::sqr#4 init_mul_tables::$15 ] -reg byte a [ init_mul_tables::$0 ] -reg byte a [ init_mul_tables::$3 ] -reg byte a [ init_mul_tables::$4 ] +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 ] +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::$8 ] -reg byte a [ init_mul_tables::$12 ] -reg byte a [ init_mul_tables::$14 ] -reg byte a [ init_mul_tables::$16 ] +reg byte a [ init_mul_tables::$6 ] +zp ZP_WORD:10 [ init_mul_tables::$7 ]