diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 592952848..ae6bf7a63 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -275,7 +275,7 @@ public class Compiler { optimizations.add(new PassNVariableReferenceInfos(program)); optimizations.add(new Pass2UnaryNotSimplification(program)); optimizations.add(new Pass2AliasElimination(program)); - optimizations.add(new Pass2SelfPhiElimination(program)); + //optimizations.add(new Pass2SelfPhiElimination(program)); optimizations.add(new Pass2IdenticalPhiElimination(program)); optimizations.add(new Pass2DuplicateRValueIdentification(program)); optimizations.add(new Pass2ConditionalJumpSimplification(program)); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2IdenticalPhiElimination.java b/src/main/java/dk/camelot64/kickc/passes/Pass2IdenticalPhiElimination.java index 184008812..d2b26fc65 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2IdenticalPhiElimination.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2IdenticalPhiElimination.java @@ -11,7 +11,7 @@ import java.util.LinkedHashMap; import java.util.ListIterator; import java.util.Map; -/** Compiler Pass eliminating phi varialbes where all rValues are the same */ +/** Compiler Pass eliminating phi variables where all rValues are the same */ public class Pass2IdenticalPhiElimination extends Pass2SsaOptimization { public Pass2IdenticalPhiElimination(Program program) { @@ -23,7 +23,7 @@ public class Pass2IdenticalPhiElimination extends Pass2SsaOptimization { */ @Override public boolean step() { - Map phiIdentical = new LinkedHashMap<>(); + Map phiIdentical = new LinkedHashMap<>(); for(ControlFlowBlock block : getGraph().getAllBlocks()) { for(Statement statement : block.getStatements()) { if(statement instanceof StatementPhiBlock) { @@ -34,6 +34,10 @@ public class Pass2IdenticalPhiElimination extends Pass2SsaOptimization { RValue rValue = null; boolean identical = true; for(StatementPhiBlock.PhiRValue phiRValue : phiVariable.getValues()) { + if(phiRValue.getrValue().equals(phiVariable.getVariable())) { + // Self PHI - skip that + continue; + } if(rValue == null) { rValue = phiRValue.getrValue(); } else { @@ -58,7 +62,7 @@ public class Pass2IdenticalPhiElimination extends Pass2SsaOptimization { getLog().append("Identical Phi Values " + var.toString(getProgram()) + " " + alias.toString(getProgram())); } deleteSymbols(getScope(), phiIdentical.keySet()); - return phiIdentical.size()>0; + return phiIdentical.size() > 0; } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2SelfPhiElimination.java b/src/main/java/dk/camelot64/kickc/passes/Pass2SelfPhiElimination.java deleted file mode 100644 index c99de0abb..000000000 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2SelfPhiElimination.java +++ /dev/null @@ -1,42 +0,0 @@ -package dk.camelot64.kickc.passes; - -import dk.camelot64.kickc.model.ControlFlowGraphBaseVisitor; -import dk.camelot64.kickc.model.Program; -import dk.camelot64.kickc.model.statements.StatementPhiBlock; - -import java.util.Iterator; - -/** Compiler Pass eliminating phi self assignments */ -public class Pass2SelfPhiElimination extends Pass2SsaOptimization { - - public Pass2SelfPhiElimination(Program program) { - super(program); - } - - /** - * Eliminate phi variables pointing to themselves - */ - @Override - public boolean step() { - final Boolean[] optimized = {Boolean.FALSE}; - ControlFlowGraphBaseVisitor visitor = new ControlFlowGraphBaseVisitor() { - @Override - public Void visitPhiBlock(StatementPhiBlock phi) { - for(StatementPhiBlock.PhiVariable phiVariable : phi.getPhiVariables()) { - Iterator iterator = phiVariable.getValues().iterator(); - while(iterator.hasNext()) { - StatementPhiBlock.PhiRValue phiRValue = iterator.next(); - if(phiRValue.getrValue().equals(phiVariable.getVariable())) { - iterator.remove(); - optimized[0] = Boolean.TRUE; - getLog().append("Self Phi Eliminated " + phiVariable.getVariable().toString(getProgram())); - } - } - } - return null; - } - }; - visitor.visitGraph(getGraph()); - return optimized[0]; - } -} diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 25e29af0b..6e3945ea8 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -35,6 +35,21 @@ public class TestPrograms { public TestPrograms() { } + @Test + public void testEuclidProblem2() throws IOException, URISyntaxException { + compileAndCompare("euclid-problem-2"); + } + + @Test + public void testEuclidProblem() throws IOException, URISyntaxException { + compileAndCompare("euclid-problem"); + } + + @Test + public void testFastMultiply127() throws IOException, URISyntaxException { + compileAndCompare("fastmultiply-127"); + } + @Test public void testSieve() throws IOException, URISyntaxException { compileAndCompare("sieve"); diff --git a/src/test/kc/euclid-problem-2.kc b/src/test/kc/euclid-problem-2.kc new file mode 100644 index 000000000..79ad9ee2f --- /dev/null +++ b/src/test/kc/euclid-problem-2.kc @@ -0,0 +1,25 @@ +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + +const char* SCREEN = 0x0400; +char idx = 0; + +void main() { + SCREEN[idx++] = euclid(128,2); + SCREEN[idx++] = euclid(169,69); + SCREEN[idx++] = euclid(255,155); + SCREEN[idx++] = euclid(99,3); +} + +// Calculate least common denominator using euclids subtraction method +unsigned char euclid(unsigned char a, unsigned char b) { + while (a!=b) { + if(a>b) { + a = a-b; + } else { + b = b-a; + } + } + return a; +} + diff --git a/src/test/kc/euclid-problem.kc b/src/test/kc/euclid-problem.kc new file mode 100644 index 000000000..a1cbbfea4 --- /dev/null +++ b/src/test/kc/euclid-problem.kc @@ -0,0 +1,18 @@ +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + +char* SCREEN = 0x0400; + +void main() { + char a = 128; + char b = 2; + while (a!=b) { + if(a>b) { + a = a-b; + } else { + b = b-a; + } + } + *SCREEN = a; + +} diff --git a/src/test/kc/fastmultiply-127.kc b/src/test/kc/fastmultiply-127.kc new file mode 100644 index 000000000..fa1ceb83d --- /dev/null +++ b/src/test/kc/fastmultiply-127.kc @@ -0,0 +1,114 @@ +// An implementation of seriously fast multiply for integer values in the interval [-1;1] with the best possible precision +// NOTE: So far unsuccessful - since the handling of sign and values where a+b>sqrt2) makes the code slower than regular fast multiply +// In this model 255 binary represents 1.0 - meaning that 255*255 = 255 +// Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 +// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 + +import "print" + +void main() { + print_cls(); + print_str("unsigned"); + print_ln(); + print_mulf8u127(0,0); + print_mulf8u127(127,127); + print_mulf8u127(64,64); + print_mulf8u127(64,127); + print_mulf8u127(64,192); + print_mulf8u127(255,127); + print_mulf8u127(192,192); + print_mulf8u127(255,255); + print_str("signed"); + print_ln(); + print_mulf8s127(0,0); + print_mulf8s127(64,64); + print_mulf8s127(64,127); + print_mulf8s127(-64,64); + print_mulf8s127(64,-64); + print_mulf8s127(-64,-64); + print_mulf8s127(127,127); + print_mulf8s127(-127,127); + print_mulf8s127(127,-127); + print_mulf8s127(-127,-127); +} + +void print_mulf8u127(unsigned char a, unsigned char b) { + unsigned word c = mulf8u127(a,b); + print_byte(a); + print_char('*'); + print_byte(b); + print_char('='); + print_word(c); + print_ln(); +} + +void print_mulf8s127(signed char a, signed char b) { + signed word c = mulf8s127(a,b); + print_sbyte(a); + print_char('*'); + print_sbyte(b); + print_char('='); + print_sword(c); + print_ln(); +} + + +// mulf_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255). +// f(x) = ( x * x )/4 +unsigned char[512] align($100) mulf127_sqr1_lo = kickasm{{ .fill 512, round((i/127*i/127)*127/4) }}; +// g(x) = <((( x - 255) * ( x - 255 ))/4) +unsigned char[512] align($100) mulf127_sqr2_lo = kickasm{{ .fill 512, round(((i-255)/127*(i-255)/127)*127/4) }}; + +unsigned word mulf8u127(unsigned char a, unsigned char b) { + const byte* memA = $fc; + const byte* memB = $fd; + const word* res = $fe; + const byte* resL = $fe; + const byte* resH = $ff; + *memA = a; + *memB = b; + asm { + lda memA + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + ldx memB + sec + sm1: + lda mulf127_sqr1_lo,x + sm2: + sbc mulf127_sqr2_lo,x + sta resL + sm3: + lda mulf127_sqr1_hi,x + sm4: + sbc mulf127_sqr2_hi,x + sta resH + } + return *res; +} + +signed word mulf8s127(signed char a, signed char b) { + signed word c = (signed word)mulf8u127((unsigned char)a, (unsigned char)b); + if(a<0) { + c -= (signed word)b*2; + } + if(b<0) { + c -= (signed word)a*2; + } + if(a<0 && b<0) { + c -= 0x200; + } + return c; +} + + + + + + + diff --git a/src/test/ref/array-length-symbolic-min.log b/src/test/ref/array-length-symbolic-min.log index c8b36f94b..015193fea 100644 --- a/src/test/ref/array-length-symbolic-min.log +++ b/src/test/ref/array-length-symbolic-min.log @@ -57,8 +57,6 @@ Simplifying constant integer cast $f Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $f Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) main::cur_item#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) main::cur_item#1 (byte*) main::cur_item#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$0 [8] if((byte) main::sub#1!=rangelast(0,SZ#0)) goto main::@1 diff --git a/src/test/ref/array-length-symbolic.log b/src/test/ref/array-length-symbolic.log index b79ab4e19..39a37923f 100644 --- a/src/test/ref/array-length-symbolic.log +++ b/src/test/ref/array-length-symbolic.log @@ -138,9 +138,6 @@ Inferred type updated to byte in (unumber~) main::$3 ← (byte~) main::$2 | (byt Alias (byte*) main::cur_item#2 = (byte*) main::cur_item#3 Alias (byte) main::item#2 = (byte) main::item#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::item#2 -Self Phi Eliminated (byte*) main::cur_item#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::item#2 (byte) main::item#4 Identical Phi Values (byte*) main::cur_item#2 (byte*) main::cur_item#4 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index b9895efbe..639ec47c5 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1101,18 +1101,6 @@ Alias (byte*) bitmap_gfx#14 = (byte*) bitmap_gfx#23 (byte*) bitmap_gfx#19 Alias (byte*) bitmap_screen#13 = (byte*) bitmap_screen#22 (byte*) bitmap_screen#18 Alias (word) main::vx#6 = (word) main::vx#7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (byte*) bitmap_init::gfx#2 -Self Phi Eliminated (byte*) bitmap_gfx#21 -Self Phi Eliminated (byte*) bitmap_screen#20 -Self Phi Eliminated (byte*) bitmap_gfx#11 -Self Phi Eliminated (byte*) bitmap_screen#11 -Self Phi Eliminated (byte*) bitmap_gfx#14 -Self Phi Eliminated (byte*) bitmap_screen#13 -Self Phi Eliminated (byte) frame_cnt#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) memset::c#2 (byte) memset::c#3 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index 767cd57a4..7cd046147 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -2418,25 +2418,6 @@ Alias (byte*) bitmap_gfx#14 = (byte*) bitmap_gfx#24 (byte*) bitmap_gfx#20 Alias (byte*) bitmap_screen#13 = (byte*) bitmap_screen#23 (byte*) bitmap_screen#19 Alias (word) main::idx_x#10 = (word) main::idx_x#7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (signed word) sin16s_gen2::ampl#1 -Self Phi Eliminated (signed word) sin16s_gen2::offs#1 -Self Phi Eliminated (dword) sin16s_gen2::step#1 -Self Phi Eliminated (word) sin16s_gen2::wavelength#2 -Self Phi Eliminated (word) rem16u#16 -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (byte*) bitmap_init::gfx#2 -Self Phi Eliminated (byte*) bitmap_gfx#22 -Self Phi Eliminated (byte*) bitmap_screen#21 -Self Phi Eliminated (byte*) bitmap_gfx#11 -Self Phi Eliminated (byte*) bitmap_screen#11 -Self Phi Eliminated (word) rem16u#18 -Self Phi Eliminated (byte*) bitmap_gfx#14 -Self Phi Eliminated (byte*) bitmap_screen#13 -Self Phi Eliminated (byte) frame_cnt#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index 5254f89de..f9af9f2b3 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -2585,28 +2585,6 @@ Alias (word) main::idx_x#10 = (word) main::idx_x#12 (word) main::idx_x#8 Alias (signed word) main::r#1 = (signed word) main::r#5 Alias (word) main::idx_y#10 = (word) main::idx_y#11 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (signed word) sin16s_gen2::ampl#1 -Self Phi Eliminated (signed word) sin16s_gen2::offs#1 -Self Phi Eliminated (dword) sin16s_gen2::step#1 -Self Phi Eliminated (word) sin16s_gen2::wavelength#2 -Self Phi Eliminated (word) rem16u#16 -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (byte*) bitmap_init::gfx#2 -Self Phi Eliminated (byte*) bitmap_gfx#23 -Self Phi Eliminated (byte*) bitmap_screen#22 -Self Phi Eliminated (byte*) bitmap_gfx#11 -Self Phi Eliminated (byte*) bitmap_screen#11 -Self Phi Eliminated (word) rem16u#27 -Self Phi Eliminated (byte*) bitmap_gfx#19 -Self Phi Eliminated (byte*) bitmap_screen#18 -Self Phi Eliminated (byte) frame_cnt#10 -Self Phi Eliminated (word) rem16u#18 -Self Phi Eliminated (byte*) bitmap_gfx#14 -Self Phi Eliminated (byte*) bitmap_screen#13 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index f96720a3a..82b107908 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -1538,30 +1538,6 @@ Alias (word) bitmap_line::dy#12 = (word) bitmap_line::dy#13 Alias (word) bitmap_line::dx#12 = (word) bitmap_line::dx#5 Alias (word) bitmap_line::sy#2 = (word) bitmap_line::sy#9 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (byte*) bitmap_init::gfx#2 -Self Phi Eliminated (byte*) bitmap_gfx#21 -Self Phi Eliminated (byte*) bitmap_screen#20 -Self Phi Eliminated (byte*) bitmap_gfx#11 -Self Phi Eliminated (byte*) bitmap_screen#11 -Self Phi Eliminated (word) bitmap_line::sy#1 -Self Phi Eliminated (word) bitmap_line::dx#11 -Self Phi Eliminated (word) bitmap_line::dy#11 -Self Phi Eliminated (word) bitmap_line::y2#3 -Self Phi Eliminated (word) bitmap_line::sx#1 -Self Phi Eliminated (word) bitmap_line::sx#11 -Self Phi Eliminated (word) bitmap_line::dy#12 -Self Phi Eliminated (word) bitmap_line::dx#12 -Self Phi Eliminated (word) bitmap_line::x2#3 -Self Phi Eliminated (word) bitmap_line::sy#2 -Self Phi Eliminated (byte*) COSTAB#1 -Self Phi Eliminated (byte*) bitmap_gfx#18 -Self Phi Eliminated (byte*) bitmap_screen#17 -Self Phi Eliminated (byte*) bitmap_gfx#14 -Self Phi Eliminated (byte*) bitmap_screen#13 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) memset::c#2 (byte) memset::c#3 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 diff --git a/src/test/ref/bool-nullpointer-exception.log b/src/test/ref/bool-nullpointer-exception.log index 38a1ba82f..93bbef88d 100644 --- a/src/test/ref/bool-nullpointer-exception.log +++ b/src/test/ref/bool-nullpointer-exception.log @@ -69,8 +69,6 @@ Alias (bool) framedone#2 = (bool) framedone#5 (bool) framedone#7 Alias (bool) framedone#0 = (bool) framedone#8 Alias (bool) framedone#3 = (bool) framedone#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (bool) framedone#4 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (bool) framedone#9 (bool) framedone#0 Identical Phi Values (bool) framedone#4 (bool) framedone#2 Identical Phi Values (bool) framedone#3 (bool) framedone#2 diff --git a/src/test/ref/bresenham.log b/src/test/ref/bresenham.log index 739c179d9..7c4866c3e 100644 --- a/src/test/ref/bresenham.log +++ b/src/test/ref/bresenham.log @@ -235,9 +235,6 @@ Alias (byte) main::x#1 = (byte) main::x#3 Alias (byte) main::yd#1 = (byte) main::yd#2 Alias (byte) main::xd#1 = (byte) main::xd#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::yd#1 -Self Phi Eliminated (byte) main::xd#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::yd#1 (byte) main::yd#0 Identical Phi Values (byte) main::xd#1 (byte) main::xd#0 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/bresenhamarr.log b/src/test/ref/bresenhamarr.log index bb7aaab63..6c054efca 100644 --- a/src/test/ref/bresenhamarr.log +++ b/src/test/ref/bresenhamarr.log @@ -239,9 +239,6 @@ Alias (byte) main::x#1 = (byte) main::x#3 Alias (byte) main::yd#1 = (byte) main::yd#2 Alias (byte) main::xd#1 = (byte) main::xd#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::yd#1 -Self Phi Eliminated (byte) main::xd#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::yd#1 (byte) main::yd#0 Identical Phi Values (byte) main::xd#1 (byte) main::xd#0 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index 86bb721e3..93acb503e 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -1405,11 +1405,6 @@ Alias (byte*) print_char_cursor#133 = (byte*) print_char_cursor#66 (byte*) print Alias (byte*) print_line_cursor#19 = (byte*) print_line_cursor#38 Alias (byte*) print_char_cursor#135 = (byte*) print_char_cursor#68 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#71 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 3357e78de..88c01a1f6 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -910,18 +910,14 @@ Alias (byte) gfx_init_plane_charset8::cr#2 = (byte) gfx_init_plane_charset8::cr# Alias (byte*) gfx_init_plane_charset8::chargen#4 = (byte*) gfx_init_plane_charset8::chargen#7 Alias (byte) gfx_init_plane_charset8::ch#2 = (byte) gfx_init_plane_charset8::ch#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::rst#2 -Self Phi Eliminated (byte) gfx_init_screen0::cy#2 -Self Phi Eliminated (byte) gfx_init_plane_charset8::cr#2 -Self Phi Eliminated (byte*) gfx_init_plane_charset8::chargen#4 -Self Phi Eliminated (byte) gfx_init_plane_charset8::ch#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::rst#2 (byte) main::rst#0 Identical Phi Values (byte) gfx_init_screen0::cy#2 (byte) gfx_init_screen0::cy#4 Identical Phi Values (byte) gfx_init_plane_charset8::cr#2 (byte) gfx_init_plane_charset8::cr#6 Identical Phi Values (byte*) gfx_init_plane_charset8::chargen#4 (byte*) gfx_init_plane_charset8::chargen#1 Identical Phi Values (byte) gfx_init_plane_charset8::ch#2 (byte) gfx_init_plane_charset8::ch#7 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$25 [97] if((byte) main::j#1!=rangelast(0,$f)) goto main::@1 Simple Condition (bool~) main::$29 [108] if(*((byte*) RASTER#0)!=(byte) main::rst#0) goto main::@6 Simple Condition (bool~) main::$35 [120] if((byte) main::rst#1!=(byte) $f2) goto main::@12 @@ -1005,7 +1001,7 @@ Resolved ranged next value [178] gfx_init_plane_charset8::cp#1 ← ++ gfx_init_p Resolved ranged comparison value [180] if(gfx_init_plane_charset8::cp#1!=rangelast(0,7)) goto gfx_init_plane_charset8::@3 to (number) 8 Resolved ranged next value [184] gfx_init_plane_charset8::cr#1 ← ++ gfx_init_plane_charset8::cr#6 to ++ Resolved ranged comparison value [186] if(gfx_init_plane_charset8::cr#1!=rangelast(0,7)) goto gfx_init_plane_charset8::@2 to (number) 8 -Resolved ranged next value [188] gfx_init_plane_charset8::ch#1 ← ++ gfx_init_plane_charset8::ch#7 to ++ +Resolved ranged next value [188] gfx_init_plane_charset8::ch#1 ← ++ gfx_init_plane_charset8::ch#8 to ++ Resolved ranged comparison value [190] if(gfx_init_plane_charset8::ch#1!=rangelast(0,$ff)) goto gfx_init_plane_charset8::@1 to (number) 0 Eliminating unused variable (byte) gfx_init_plane_charset8::gfxbCpuBank#1 and assignment [94] (byte) gfx_init_plane_charset8::gfxbCpuBank#1 ← ++ (byte) gfx_init_plane_charset8::gfxbCpuBank#0 Successful SSA optimization PassNEliminateUnusedVars @@ -1032,10 +1028,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) gfx_init_plane_charset8::ch#7 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [9] (byte~) main::$1 ← (const byte) DTV_HIGHCOLOR#0 | (const byte) DTV_LINEAR#0 Constant right-side identified [13] (byte~) main::$4 ← (const byte) VIC_DEN#0 | (const byte) VIC_ECM#0 Constant right-side identified [17] (byte~) main::$7 ← (const byte) VIC_MCM#0 | (const byte) VIC_CSEL#0 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 67c97557c..05f771a40 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -638,9 +638,6 @@ Successful SSA optimization Pass2AliasElimination Alias (word) gfx_init_chunky::x#2 = (word) gfx_init_chunky::x#3 Alias (byte) gfx_init_chunky::y#2 = (byte) gfx_init_chunky::y#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::rst#2 -Self Phi Eliminated (byte) gfx_init_chunky::y#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::rst#2 (byte) main::rst#0 Identical Phi Values (byte) gfx_init_chunky::y#2 (byte) gfx_init_chunky::y#6 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/c64dtv-blittermin.cfg b/src/test/ref/c64dtv-blittermin.cfg index 1d4d9548b..0e31b38c3 100644 --- a/src/test/ref/c64dtv-blittermin.cfg +++ b/src/test/ref/c64dtv-blittermin.cfg @@ -42,7 +42,7 @@ main: scope:[main] from @1 [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0 to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [36] (byte) main::r#2 ← phi( main/(byte) 0 main::@2/(byte) main::r#1 ) + [36] (byte) main::r#2 ← phi( main/(byte) 0 main::@1/(byte) main::r#2 main::@2/(byte) main::r#1 ) [37] (byte~) main::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 [38] if((byte~) main::$9!=(byte) 0) goto main::@1 to:main::@2 diff --git a/src/test/ref/c64dtv-blittermin.log b/src/test/ref/c64dtv-blittermin.log index cddef6430..f79ed40df 100644 --- a/src/test/ref/c64dtv-blittermin.log +++ b/src/test/ref/c64dtv-blittermin.log @@ -423,8 +423,6 @@ Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::r#2 = (byte) main::r#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::r#2 -Successful SSA optimization Pass2SelfPhiElimination Simple Condition (bool~) main::$10 [90] if((byte~) main::$9!=(byte) 0) goto main::@2 Simple Condition (bool~) main::$14 [98] if((byte) main::r#1!=rangelast(0,7)) goto main::@2 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -537,7 +535,8 @@ Constant inlined main::$4 = (byte) 0 Constant inlined main::$7 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0 Constant inlined main::$8 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@5(between main::@3 and main::@2) +Added new block during phi lifting main::@5(between main::@2 and main::@2) +Added new block during phi lifting main::@6(between main::@3 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @5 @@ -548,11 +547,13 @@ CALL GRAPH Calls in [] to main:4 Created 1 initial phi equivalence classes -Coalesced [46] main::r#4 ← main::r#1 +Coalesced [46] main::r#5 ← main::r#1 +Coalesced (already) [47] main::r#4 ← main::r#2 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @5 Culled Empty Block (label) @7 +Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@5 Renumbering block @6 to @1 Renumbering block main::@2 to main::@1 @@ -606,7 +607,7 @@ main: scope:[main] from @1 [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0 to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [36] (byte) main::r#2 ← phi( main/(byte) 0 main::@2/(byte) main::r#1 ) + [36] (byte) main::r#2 ← phi( main/(byte) 0 main::@1/(byte) main::r#2 main::@2/(byte) main::r#1 ) [37] (byte~) main::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 [38] if((byte~) main::$9!=(byte) 0) goto main::@1 to:main::@2 @@ -670,7 +671,7 @@ VARIABLE REGISTER WEIGHTS (byte~) main::$9 202.0 (byte) main::r (byte) main::r#1 16.5 -(byte) main::r#2 5.5 +(byte) main::r#2 56.0 Initial phi equivalence classes [ main::r#2 main::r#1 ] @@ -885,12 +886,10 @@ main: { sta r jmp b1 // wait til blitter is ready - // [36] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [36] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] b1_from_b1: - jmp b1 - // [36] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: - // [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@2->main::@1#0] -- register_copy + // [36] phi (byte) main::r#2 = (byte) main::r#2 [phi:main::@1/main::@2->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -999,11 +998,11 @@ Potential registers zp ZP_BYTE:2 [ main::r#2 main::r#1 ] : zp ZP_BYTE:2 , reg by Potential registers zp ZP_BYTE:3 [ main::$9 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 202: zp ZP_BYTE:3 [ main::$9 ] 22: zp ZP_BYTE:2 [ main::r#2 main::r#1 ] +Uplift Scope [main] 202: zp ZP_BYTE:3 [ main::$9 ] 72.5: zp ZP_BYTE:2 [ main::r#2 main::r#1 ] Uplift Scope [] -Uplifting [main] best 2815 combination reg byte a [ main::$9 ] reg byte x [ main::r#2 main::r#1 ] -Uplifting [] best 2815 combination +Uplifting [main] best 2515 combination reg byte a [ main::$9 ] reg byte x [ main::r#2 main::r#1 ] +Uplifting [] best 2515 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1206,12 +1205,10 @@ main: { ldx #0 jmp b1 // wait til blitter is ready - // [36] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [36] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] b1_from_b1: - jmp b1 - // [36] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: - // [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@2->main::@1#0] -- register_copy + // [36] phi (byte) main::r#2 = (byte) main::r#2 [phi:main::@1/main::@2->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -1261,10 +1258,12 @@ Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b1_from_b1 with b1 Replacing label b1_from_b2 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction bend_from_b1: +Removing instruction b1_from_b1: Removing instruction b1_from_b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: @@ -1275,18 +1274,10 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Skipping double jump to b1 in bne b1_from_b1 -Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b1 to b2 -Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b2: -Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination FINAL SYMBOL TABLE (label) @1 @@ -1389,7 +1380,7 @@ FINAL SYMBOL TABLE (label) main::@return (byte) main::r (byte) main::r#1 reg byte x 16.5 -(byte) main::r#2 reg byte x 5.5 +(byte) main::r#2 reg byte x 56.0 reg byte x [ main::r#2 main::r#1 ] reg byte a [ main::$9 ] @@ -1610,9 +1601,8 @@ main: { // [36] phi (byte) main::r#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 // wait til blitter is ready - // [36] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [36] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@2->main::@1#0] -- register_copy + // [36] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] + // [36] phi (byte) main::r#2 = (byte) main::r#2 [phi:main::@1/main::@2->main::@1#0] -- register_copy // main::@1 b1: // *DTV_BLITTER_CONTROL2 & DTV_BLIT_STATUS_BUSY diff --git a/src/test/ref/c64dtv-blittermin.sym b/src/test/ref/c64dtv-blittermin.sym index 44d114c7c..4eb75aacf 100644 --- a/src/test/ref/c64dtv-blittermin.sym +++ b/src/test/ref/c64dtv-blittermin.sym @@ -98,7 +98,7 @@ (label) main::@return (byte) main::r (byte) main::r#1 reg byte x 16.5 -(byte) main::r#2 reg byte x 5.5 +(byte) main::r#2 reg byte x 56.0 reg byte x [ main::r#2 main::r#1 ] reg byte a [ main::$9 ] diff --git a/src/test/ref/c64dtv-gfxexplorer.asm b/src/test/ref/c64dtv-gfxexplorer.asm index 4672fba35..548b0d512 100644 --- a/src/test/ref/c64dtv-gfxexplorer.asm +++ b/src/test/ref/c64dtv-gfxexplorer.asm @@ -970,6 +970,7 @@ form_mode: { sta BORDERCOL lda form_fields_val sta preset_current + b2: // Let the user change values in the form b4: lda #$ff @@ -983,14 +984,14 @@ form_mode: { b6: lda form_fields_val cmp preset_current - beq b4 + beq b2 jsr apply_preset lda form_fields_val sta preset_current jsr form_render_values lda form_fields_val jsr render_preset_name - jmp b4 + jmp b2 } // Render form preset name in the form // idx is the ID of the preset diff --git a/src/test/ref/c64dtv-gfxexplorer.cfg b/src/test/ref/c64dtv-gfxexplorer.cfg index 6f537f2c8..4a4ca2567 100644 --- a/src/test/ref/c64dtv-gfxexplorer.cfg +++ b/src/test/ref/c64dtv-gfxexplorer.cfg @@ -527,7 +527,7 @@ form_mode::@2: scope:[form_mode] from form_mode::@1 [288] (byte) form_mode::preset_current#0 ← *((const byte[]) form_fields_val#0) to:form_mode::@3 form_mode::@3: scope:[form_mode] from form_mode::@19 form_mode::@2 form_mode::@6 - [289] (byte) form_mode::preset_current#6 ← phi( form_mode::@2/(byte) form_mode::preset_current#0 form_mode::@19/(byte) form_mode::preset_current#1 ) + [289] (byte) form_mode::preset_current#6 ← phi( form_mode::@6/(byte) form_mode::preset_current#6 form_mode::@2/(byte) form_mode::preset_current#0 form_mode::@19/(byte) form_mode::preset_current#1 ) [289] (byte) form_field_idx#28 ← phi( form_mode::@6/(byte) form_field_idx#18 form_mode::@2/(byte) form_field_idx#1 form_mode::@19/(byte) form_field_idx#18 ) [289] (byte) keyboard_events_size#47 ← phi( form_mode::@6/(byte) keyboard_events_size#24 form_mode::@2/(byte) keyboard_events_size#27 form_mode::@19/(byte) keyboard_events_size#24 ) [289] (signed byte) form_cursor_count#21 ← phi( form_mode::@6/(signed byte) form_cursor_count#16 form_mode::@2/(signed byte) form_cursor_count#1 form_mode::@19/(signed byte) form_cursor_count#16 ) diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index e47cf90bf..d9cb809cf 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -9203,68 +9203,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) keyboard_events_size#15 = (byte) keyboard_events_size#16 Alias (byte) keyboard_modifiers#14 = (byte) keyboard_modifiers#15 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_line_cursor#36 -Self Phi Eliminated (byte*) print_char_cursor#23 -Self Phi Eliminated (byte) keyboard_event_scan::row_scan#1 -Self Phi Eliminated (byte) keyboard_event_scan::row#10 -Self Phi Eliminated (byte*) bitmap_init::bitmap#1 -Self Phi Eliminated (byte) bitmap_clear::y#2 -Self Phi Eliminated (byte) bitmap_line_xdyi::yd#3 -Self Phi Eliminated (byte) bitmap_line_xdyi::xd#2 -Self Phi Eliminated (byte) bitmap_line_xdyi::x1#2 -Self Phi Eliminated (byte) bitmap_line_xdyd::yd#3 -Self Phi Eliminated (byte) bitmap_line_xdyd::xd#2 -Self Phi Eliminated (byte) bitmap_line_xdyd::x1#2 -Self Phi Eliminated (byte) bitmap_line_ydxi::xd#3 -Self Phi Eliminated (byte) bitmap_line_ydxi::yd#2 -Self Phi Eliminated (byte) bitmap_line_ydxi::y1#2 -Self Phi Eliminated (byte) bitmap_line_ydxd::xd#3 -Self Phi Eliminated (byte) bitmap_line_ydxd::yd#2 -Self Phi Eliminated (byte) bitmap_line_ydxd::y1#2 -Self Phi Eliminated (byte*) apply_preset::preset#13 -Self Phi Eliminated (byte) gfx_mode::cy#2 -Self Phi Eliminated (byte) keyboard_events_size#104 -Self Phi Eliminated (byte) keyboard_modifiers#77 -Self Phi Eliminated (byte) keyboard_events_size#58 -Self Phi Eliminated (byte) keyboard_modifiers#57 -Self Phi Eliminated (byte) keyboard_events_size#59 -Self Phi Eliminated (byte) keyboard_modifiers#58 -Self Phi Eliminated (byte) keyboard_events_size#44 -Self Phi Eliminated (byte) keyboard_modifiers#40 -Self Phi Eliminated (byte) gfx_init_charset::c#2 -Self Phi Eliminated (byte) gfx_init_screen0::cy#2 -Self Phi Eliminated (byte) gfx_init_screen1::cy#2 -Self Phi Eliminated (byte) gfx_init_screen2::cy#2 -Self Phi Eliminated (byte) gfx_init_screen3::cy#2 -Self Phi Eliminated (byte) gfx_init_screen4::cy#2 -Self Phi Eliminated (byte) gfx_init_plane_8bppchunky::y#2 -Self Phi Eliminated (byte) gfx_init_plane_horisontal::ay#2 -Self Phi Eliminated (byte) gfx_init_plane_horisontal2::ay#2 -Self Phi Eliminated (byte) gfx_init_plane_vertical::by#2 -Self Phi Eliminated (byte) gfx_init_plane_charset8::cr#2 -Self Phi Eliminated (byte*) gfx_init_plane_charset8::chargen#4 -Self Phi Eliminated (byte) gfx_init_plane_charset8::ch#2 -Self Phi Eliminated (byte) gfx_init_plane_fill::fill#3 -Self Phi Eliminated (byte) gfx_init_plane_fill::by#2 -Self Phi Eliminated (byte*) print_screen#29 -Self Phi Eliminated (byte*) print_line_cursor#50 -Self Phi Eliminated (byte*) print_char_cursor#52 -Self Phi Eliminated (signed byte) form_cursor_count#30 -Self Phi Eliminated (byte) keyboard_events_size#62 -Self Phi Eliminated (byte) keyboard_modifiers#61 -Self Phi Eliminated (byte) form_field_idx#38 -Self Phi Eliminated (signed byte) form_cursor_count#20 -Self Phi Eliminated (byte) keyboard_events_size#46 -Self Phi Eliminated (byte) keyboard_modifiers#43 -Self Phi Eliminated (byte) form_field_idx#27 -Self Phi Eliminated (byte) form_mode::preset_current#2 -Self Phi Eliminated (byte*) print_screen#23 -Self Phi Eliminated (byte*) print_line_cursor#43 -Self Phi Eliminated (byte*) print_char_cursor#45 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -9411,6 +9349,13 @@ Identical Phi Values (byte*) print_line_cursor#45 (byte*) print_line_cursor#24 Identical Phi Values (byte*) print_line_cursor#24 (byte*) print_screen#1 Identical Phi Values (byte) keyboard_event_scan::row#4 (byte) keyboard_event_scan::row#2 Identical Phi Values (byte) keyboard_events_size#22 (byte) keyboard_events_size#100 +Identical Phi Values (byte) keyboard_events_size#116 (byte) keyboard_events_size#13 +Identical Phi Values (byte) keyboard_modifiers#98 (byte) keyboard_modifiers#13 +Identical Phi Values (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8 +Identical Phi Values (byte) gfx_init_plane_fill::fill#4 (byte) gfx_init_plane_fill::fill#6 +Identical Phi Values (byte*) print_screen#22 (byte*) print_screen#1 +Identical Phi Values (byte*) print_line_cursor#42 (byte*) print_line_cursor#2 +Identical Phi Values (byte*) print_char_cursor#44 (byte*) print_char_cursor#22 Identical Phi Values (byte*) print_screen#16 (byte*) print_screen#22 Identical Phi Values (byte*) print_line_cursor#17 (byte*) print_line_cursor#42 Identical Phi Values (byte*) print_char_cursor#18 (byte*) print_char_cursor#44 @@ -9956,7 +9901,7 @@ Resolved ranged next value [1467] gfx_init_plane_charset8::cp#1 ← ++ gfx_init_ Resolved ranged comparison value [1469] if(gfx_init_plane_charset8::cp#1!=rangelast(0,7)) goto gfx_init_plane_charset8::@3 to (number) 8 Resolved ranged next value [1473] gfx_init_plane_charset8::cr#1 ← ++ gfx_init_plane_charset8::cr#6 to ++ Resolved ranged comparison value [1475] if(gfx_init_plane_charset8::cr#1!=rangelast(0,7)) goto gfx_init_plane_charset8::@2 to (number) 8 -Resolved ranged next value [1477] gfx_init_plane_charset8::ch#1 ← ++ gfx_init_plane_charset8::ch#7 to ++ +Resolved ranged next value [1477] gfx_init_plane_charset8::ch#1 ← ++ gfx_init_plane_charset8::ch#8 to ++ Resolved ranged comparison value [1479] if(gfx_init_plane_charset8::ch#1!=rangelast(0,$ff)) goto gfx_init_plane_charset8::@1 to (number) 0 Resolved ranged next value [1516] gfx_init_plane_fill::bx#1 ← ++ gfx_init_plane_fill::bx#2 to ++ Resolved ranged comparison value [1518] if(gfx_init_plane_fill::bx#1!=rangelast(0,$27)) goto gfx_init_plane_fill::@2 to (number) $28 @@ -10070,16 +10015,12 @@ Eliminating unused constant (const byte*) apply_preset::preset#0 Eliminating unused constant (const byte*) render_preset_name::name#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#24 -Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#98 -Eliminating unused variable - keeping the phi block (byte*) print_screen#22 -Eliminating unused variable - keeping the phi block (byte*) print_line_cursor#42 -Eliminating unused variable - keeping the phi block (byte*) print_char_cursor#44 +Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#13 Eliminating unused variable (byte*) form_field_ptr::return#2 and assignment [831] (byte*) form_field_ptr::return#2 ← (byte*) form_field_ptr::return#0 Eliminating unused variable (byte*) form_field_ptr::return#3 and assignment [838] (byte*) form_field_ptr::return#3 ← (byte*) form_field_ptr::return#0 Eliminating unused constant (const byte*) print_screen#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#11 -Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#13 Eliminating unused variable (byte*) form_field_ptr::return#0 and assignment [826] (byte*) form_field_ptr::return#0 ← (byte*) form_field_ptr::line#0 + (byte) form_field_ptr::x#0 Eliminating unused constant (const byte) keyboard_modifiers#0 Successful SSA optimization PassNEliminateUnusedVars @@ -10207,15 +10148,7 @@ Alias (word~) gfx_mode::$26 = (word~) gfx_mode::$24 Alias (word~) gfx_mode::$40 = (word~) gfx_mode::$38 Alias (dword~) form_mode::$15 = (dword~) form_mode::$12 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) keyboard_events_size#116 -Self Phi Eliminated (byte) gfx_init_plane_charset8::ch#7 -Self Phi Eliminated (byte) gfx_init_plane_fill::fill#4 -Self Phi Eliminated (byte) form_mode::preset_current#6 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) keyboard_events_size#116 (byte) keyboard_events_size#13 Identical Phi Values (byte) keyboard_events_size#11 (byte) keyboard_events_size#24 -Identical Phi Values (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8 -Identical Phi Values (byte) gfx_init_plane_fill::fill#4 (byte) gfx_init_plane_fill::fill#6 Identical Phi Values (signed byte) form_cursor_count#13 (signed byte) form_cursor_count#16 Identical Phi Values (byte) keyboard_events_size#13 (byte) keyboard_events_size#24 Identical Phi Values (byte) form_field_idx#14 (byte) form_field_idx#18 @@ -11106,27 +11039,27 @@ Calls in [main] to keyboard_init:19 gfx_init:21 form_mode:25 gfx_mode:27 Calls in [gfx_mode] to get_plane:71 get_plane:94 get_vic_screen:117 get_vic_charset:124 get_vic_screen:134 keyboard_event_scan:171 keyboard_event_get:173 Calls in [keyboard_event_scan] to keyboard_matrix_read:209 keyboard_event_pressed:220 keyboard_event_pressed:226 keyboard_event_pressed:233 keyboard_event_pressed:240 Calls in [form_mode] to print_set_screen:345 print_cls:347 print_str_lines:349 print_set_screen:351 print_cls:353 print_str_lines:355 form_set_screen:357 form_render_values:359 render_preset_name:362 form_control:389 apply_preset:396 form_render_values:398 render_preset_name:401 -Calls in [render_preset_name] to print_str_at:425 -Calls in [form_render_values] to form_field_ptr:452 -Calls in [form_control] to form_field_ptr:495 keyboard_event_scan:504 keyboard_event_get:506 -Calls in [print_str_lines] to print_ln:577 -Calls in [print_cls] to memset:592 -Calls in [gfx_init] to gfx_init_screen0:609 gfx_init_screen1:611 gfx_init_screen2:613 gfx_init_screen3:615 gfx_init_screen4:617 gfx_init_charset:619 gfx_init_vic_bitmap:621 gfx_init_plane_8bppchunky:623 gfx_init_plane_charset8:625 gfx_init_plane_horisontal:627 gfx_init_plane_vertical:629 gfx_init_plane_horisontal2:631 gfx_init_plane_vertical2:633 gfx_init_plane_blank:635 gfx_init_plane_full:637 -Calls in [gfx_init_plane_full] to gfx_init_plane_fill:641 -Calls in [gfx_init_plane_fill] to dtvSetCpuBankSegment1:650 dtvSetCpuBankSegment1:665 -Calls in [gfx_init_plane_blank] to gfx_init_plane_fill:677 -Calls in [gfx_init_plane_vertical2] to gfx_init_plane_fill:681 -Calls in [gfx_init_plane_horisontal2] to dtvSetCpuBankSegment1:685 dtvSetCpuBankSegment1:699 -Calls in [gfx_init_plane_vertical] to dtvSetCpuBankSegment1:707 dtvSetCpuBankSegment1:719 -Calls in [gfx_init_plane_horisontal] to dtvSetCpuBankSegment1:727 dtvSetCpuBankSegment1:743 -Calls in [gfx_init_plane_charset8] to dtvSetCpuBankSegment1:754 dtvSetCpuBankSegment1:782 -Calls in [gfx_init_plane_8bppchunky] to dtvSetCpuBankSegment1:798 dtvSetCpuBankSegment1:807 dtvSetCpuBankSegment1:820 -Calls in [gfx_init_vic_bitmap] to bitmap_init:832 bitmap_clear:834 bitmap_line:841 -Calls in [bitmap_line] to bitmap_line_ydxi:861 bitmap_line_xdyi:874 bitmap_line_ydxd:888 bitmap_line_xdyd:900 bitmap_line_ydxd:916 bitmap_line_xdyd:928 bitmap_line_ydxi:942 bitmap_line_xdyi:954 -Calls in [bitmap_line_xdyi] to bitmap_plot:966 -Calls in [bitmap_line_ydxi] to bitmap_plot:1000 -Calls in [bitmap_line_xdyd] to bitmap_plot:1027 -Calls in [bitmap_line_ydxd] to bitmap_plot:1054 +Calls in [render_preset_name] to print_str_at:426 +Calls in [form_render_values] to form_field_ptr:453 +Calls in [form_control] to form_field_ptr:496 keyboard_event_scan:505 keyboard_event_get:507 +Calls in [print_str_lines] to print_ln:578 +Calls in [print_cls] to memset:593 +Calls in [gfx_init] to gfx_init_screen0:610 gfx_init_screen1:612 gfx_init_screen2:614 gfx_init_screen3:616 gfx_init_screen4:618 gfx_init_charset:620 gfx_init_vic_bitmap:622 gfx_init_plane_8bppchunky:624 gfx_init_plane_charset8:626 gfx_init_plane_horisontal:628 gfx_init_plane_vertical:630 gfx_init_plane_horisontal2:632 gfx_init_plane_vertical2:634 gfx_init_plane_blank:636 gfx_init_plane_full:638 +Calls in [gfx_init_plane_full] to gfx_init_plane_fill:642 +Calls in [gfx_init_plane_fill] to dtvSetCpuBankSegment1:651 dtvSetCpuBankSegment1:666 +Calls in [gfx_init_plane_blank] to gfx_init_plane_fill:678 +Calls in [gfx_init_plane_vertical2] to gfx_init_plane_fill:682 +Calls in [gfx_init_plane_horisontal2] to dtvSetCpuBankSegment1:686 dtvSetCpuBankSegment1:700 +Calls in [gfx_init_plane_vertical] to dtvSetCpuBankSegment1:708 dtvSetCpuBankSegment1:720 +Calls in [gfx_init_plane_horisontal] to dtvSetCpuBankSegment1:728 dtvSetCpuBankSegment1:744 +Calls in [gfx_init_plane_charset8] to dtvSetCpuBankSegment1:755 dtvSetCpuBankSegment1:783 +Calls in [gfx_init_plane_8bppchunky] to dtvSetCpuBankSegment1:799 dtvSetCpuBankSegment1:808 dtvSetCpuBankSegment1:821 +Calls in [gfx_init_vic_bitmap] to bitmap_init:833 bitmap_clear:835 bitmap_line:842 +Calls in [bitmap_line] to bitmap_line_ydxi:862 bitmap_line_xdyi:875 bitmap_line_ydxd:889 bitmap_line_xdyd:901 bitmap_line_ydxd:917 bitmap_line_xdyd:929 bitmap_line_ydxi:943 bitmap_line_xdyi:955 +Calls in [bitmap_line_xdyi] to bitmap_plot:967 +Calls in [bitmap_line_ydxi] to bitmap_plot:1001 +Calls in [bitmap_line_xdyd] to bitmap_plot:1028 +Calls in [bitmap_line_ydxd] to bitmap_plot:1055 Created 192 initial phi equivalence classes Coalesced [28] form_cursor_count#61 ← form_cursor_count#16 @@ -11190,240 +11123,241 @@ Coalesced [361] render_preset_name::idx#13 ← render_preset_name::idx#0 Coalesced [382] form_cursor_count#63 ← form_cursor_count#1 Coalesced [383] keyboard_events_size#165 ← keyboard_events_size#27 Coalesced [384] form_field_idx#69 ← form_field_idx#1 -Coalesced [385] form_mode::preset_current#9 ← form_mode::preset_current#0 +Coalesced [385] form_mode::preset_current#10 ← form_mode::preset_current#0 Coalesced [400] render_preset_name::idx#14 ← render_preset_name::idx#1 Coalesced (already) [402] form_cursor_count#64 ← form_cursor_count#16 Coalesced (already) [403] keyboard_events_size#166 ← keyboard_events_size#24 Coalesced (already) [404] form_field_idx#70 ← form_field_idx#18 -Coalesced [405] form_mode::preset_current#10 ← form_mode::preset_current#1 +Coalesced [405] form_mode::preset_current#11 ← form_mode::preset_current#1 Coalesced (already) [406] form_cursor_count#62 ← form_cursor_count#16 Coalesced (already) [407] keyboard_events_size#164 ← keyboard_events_size#24 Coalesced (already) [408] form_field_idx#68 ← form_field_idx#18 -Coalesced [409] form_mode::i#3 ← form_mode::i#1 -Coalesced [439] print_str_at::str#5 ← print_str_at::str#1 -Coalesced [446] print_str_at::str#6 ← print_str_at::str#0 -Coalesced [447] print_str_at::at#5 ← print_str_at::at#0 -Coalesced [451] form_field_ptr::field_idx#4 ← form_field_ptr::field_idx#0 -Coalesced [457] form_render_values::idx#4 ← form_render_values::idx#1 -Coalesced [481] apply_preset::i#3 ← apply_preset::i#1 -Coalesced [494] form_field_ptr::field_idx#3 ← form_field_ptr::field_idx#1 -Coalesced (already) [503] keyboard_events_size#149 ← keyboard_events_size#47 -Coalesced [518] form_field_idx#74 ← form_field_idx#31 -Coalesced [521] form_field_idx#71 ← form_field_idx#6 -Coalesced [525] form_field_idx#72 ← form_field_idx#5 -Coalesced [533] form_cursor_count#67 ← form_cursor_count#15 -Coalesced (already) [534] form_field_idx#75 ← form_field_idx#28 -Coalesced (already) [539] form_cursor_count#66 ← form_cursor_count#15 -Coalesced (already) [540] form_field_idx#73 ← form_field_idx#28 -Coalesced (already) [541] form_cursor_count#68 ← form_cursor_count#15 -Coalesced (already) [542] form_field_idx#76 ← form_field_idx#28 -Coalesced [545] form_cursor_count#65 ← form_cursor_count#5 -Coalesced [556] form_set_screen::line#3 ← form_set_screen::line#1 -Coalesced [557] form_set_screen::y#3 ← form_set_screen::y#1 -Coalesced [559] print_str_lines::str#10 ← print_str_lines::str#5 -Not coalescing [560] print_char_cursor#73 ← print_screen#1 -Coalesced [561] print_line_cursor#73 ← print_screen#1 -Coalesced [565] print_str_lines::str#12 ← print_str_lines::str#3 -Coalesced [566] print_char_cursor#75 ← print_char_cursor#22 -Coalesced [573] print_char_cursor#78 ← print_char_cursor#1 -Coalesced [578] print_str_lines::str#11 ← print_str_lines::str#0 -Not coalescing [579] print_char_cursor#74 ← print_line_cursor#22 -Coalesced [580] print_line_cursor#74 ← print_line_cursor#22 -Coalesced (already) [581] print_str_lines::str#13 ← print_str_lines::str#0 -Coalesced [582] print_char_cursor#76 ← print_char_cursor#38 -Coalesced (already) [583] print_char_cursor#77 ← print_char_cursor#20 -Coalesced [584] print_line_cursor#75 ← print_line_cursor#2 -Coalesced (already) [590] print_line_cursor#76 ← print_line_cursor#22 -Coalesced [604] memset::dst#4 ← memset::dst#1 -Coalesced [606] print_screen#1 ← print_set_screen::screen#2 -Coalesced [649] dtvSetCpuBankSegment1::cpuBankIdx#15 ← dtvSetCpuBankSegment1::cpuBankIdx#11 -Coalesced [656] gfx_init_plane_fill::gfxb#7 ← gfx_init_plane_fill::gfxb#3 -Coalesced [668] gfx_init_plane_fill::gfxb#5 ← gfx_init_plane_fill::gfxb#1 -Coalesced [669] gfx_init_plane_fill::by#5 ← gfx_init_plane_fill::by#1 -Coalesced (already) [670] gfx_init_plane_fill::gfxb#8 ← gfx_init_plane_fill::gfxb#1 -Coalesced [671] gfx_init_plane_fill::bx#3 ← gfx_init_plane_fill::bx#1 -Coalesced [688] gfx_init_plane_horisontal2::gfxa#6 ← gfx_init_plane_horisontal2::gfxa#3 -Coalesced [702] gfx_init_plane_horisontal2::ay#5 ← gfx_init_plane_horisontal2::ay#1 -Coalesced [703] gfx_init_plane_horisontal2::gfxa#5 ← gfx_init_plane_horisontal2::gfxa#1 -Coalesced (already) [704] gfx_init_plane_horisontal2::gfxa#7 ← gfx_init_plane_horisontal2::gfxa#1 -Coalesced [705] gfx_init_plane_horisontal2::ax#3 ← gfx_init_plane_horisontal2::ax#1 -Coalesced [710] gfx_init_plane_vertical::gfxb#6 ← gfx_init_plane_vertical::gfxb#3 -Coalesced [722] gfx_init_plane_vertical::gfxb#5 ← gfx_init_plane_vertical::gfxb#1 -Coalesced [723] gfx_init_plane_vertical::by#5 ← gfx_init_plane_vertical::by#1 -Coalesced (already) [724] gfx_init_plane_vertical::gfxb#7 ← gfx_init_plane_vertical::gfxb#1 -Coalesced [725] gfx_init_plane_vertical::bx#3 ← gfx_init_plane_vertical::bx#1 -Coalesced [730] gfx_init_plane_horisontal::gfxa#10 ← gfx_init_plane_horisontal::gfxa#6 -Coalesced [736] gfx_init_plane_horisontal::gfxa#13 ← gfx_init_plane_horisontal::gfxa#2 -Coalesced [746] gfx_init_plane_horisontal::ay#8 ← gfx_init_plane_horisontal::ay#1 -Coalesced [747] gfx_init_plane_horisontal::gfxa#9 ← gfx_init_plane_horisontal::gfxa#7 -Coalesced (already) [748] gfx_init_plane_horisontal::gfxa#11 ← gfx_init_plane_horisontal::gfxa#7 -Coalesced [749] gfx_init_plane_horisontal::ax#6 ← gfx_init_plane_horisontal::ax#1 -Coalesced [752] gfx_init_plane_horisontal::gfxa#12 ← gfx_init_plane_horisontal::gfxa#1 -Coalesced [757] gfx_init_plane_charset8::chargen#10 ← gfx_init_plane_charset8::chargen#3 -Coalesced [758] gfx_init_plane_charset8::gfxa#10 ← gfx_init_plane_charset8::gfxa#6 -Coalesced [759] gfx_init_plane_charset8::col#10 ← gfx_init_plane_charset8::col#6 -Coalesced [763] gfx_init_plane_charset8::bits#5 ← gfx_init_plane_charset8::bits#0 -Coalesced [764] gfx_init_plane_charset8::gfxa#12 ← gfx_init_plane_charset8::gfxa#5 -Coalesced [765] gfx_init_plane_charset8::col#12 ← gfx_init_plane_charset8::col#5 -Not coalescing [769] gfx_init_plane_charset8::c#3 ← gfx_init_plane_charset8::col#2 -Coalesced [785] gfx_init_plane_charset8::chargen#9 ← gfx_init_plane_charset8::chargen#1 -Coalesced [786] gfx_init_plane_charset8::gfxa#9 ← gfx_init_plane_charset8::gfxa#1 -Coalesced [787] gfx_init_plane_charset8::col#9 ← gfx_init_plane_charset8::col#1 -Coalesced [788] gfx_init_plane_charset8::ch#9 ← gfx_init_plane_charset8::ch#1 -Coalesced (already) [789] gfx_init_plane_charset8::chargen#11 ← gfx_init_plane_charset8::chargen#1 -Coalesced (already) [790] gfx_init_plane_charset8::gfxa#11 ← gfx_init_plane_charset8::gfxa#1 -Coalesced (already) [791] gfx_init_plane_charset8::col#11 ← gfx_init_plane_charset8::col#1 -Coalesced [792] gfx_init_plane_charset8::cr#7 ← gfx_init_plane_charset8::cr#1 -Coalesced [793] gfx_init_plane_charset8::bits#6 ← gfx_init_plane_charset8::bits#1 -Coalesced (already) [794] gfx_init_plane_charset8::gfxa#13 ← gfx_init_plane_charset8::gfxa#1 -Coalesced (already) [795] gfx_init_plane_charset8::col#13 ← gfx_init_plane_charset8::col#1 -Coalesced [796] gfx_init_plane_charset8::cp#5 ← gfx_init_plane_charset8::cp#1 -Coalesced [801] gfx_init_plane_8bppchunky::gfxb#8 ← gfx_init_plane_8bppchunky::gfxb#5 -Coalesced [802] gfx_init_plane_8bppchunky::gfxbCpuBank#11 ← gfx_init_plane_8bppchunky::gfxbCpuBank#7 -Coalesced [806] dtvSetCpuBankSegment1::cpuBankIdx#14 ← dtvSetCpuBankSegment1::cpuBankIdx#1 -Coalesced [809] gfx_init_plane_8bppchunky::gfxbCpuBank#14 ← gfx_init_plane_8bppchunky::gfxbCpuBank#2 -Coalesced [823] gfx_init_plane_8bppchunky::gfxb#7 ← gfx_init_plane_8bppchunky::gfxb#1 -Coalesced [824] gfx_init_plane_8bppchunky::y#8 ← gfx_init_plane_8bppchunky::y#1 -Coalesced [825] gfx_init_plane_8bppchunky::gfxbCpuBank#10 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 -Coalesced (already) [826] gfx_init_plane_8bppchunky::gfxb#9 ← gfx_init_plane_8bppchunky::gfxb#1 -Coalesced [827] gfx_init_plane_8bppchunky::x#6 ← gfx_init_plane_8bppchunky::x#1 -Coalesced (already) [828] gfx_init_plane_8bppchunky::gfxbCpuBank#12 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 -Coalesced [829] gfx_init_plane_8bppchunky::gfxb#10 ← gfx_init_plane_8bppchunky::gfxb#3 -Coalesced (already) [830] gfx_init_plane_8bppchunky::gfxbCpuBank#13 ← gfx_init_plane_8bppchunky::gfxbCpuBank#4 -Coalesced [845] gfx_init_vic_bitmap::l#4 ← gfx_init_vic_bitmap::l#1 -Coalesced [856] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 -Coalesced [857] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 -Coalesced [858] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 -Coalesced [859] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 -Coalesced [860] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 -Coalesced [869] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 -Coalesced [870] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 -Coalesced [871] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 -Coalesced [872] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 -Coalesced [873] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 -Coalesced [883] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 -Coalesced [884] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 -Coalesced [885] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 -Coalesced [886] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 -Coalesced [887] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 -Coalesced [895] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 -Coalesced [896] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 -Coalesced [897] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 -Coalesced [898] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 -Coalesced [899] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 -Coalesced [911] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 -Coalesced [912] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 -Coalesced [913] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 -Coalesced [914] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 -Coalesced [915] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 -Coalesced [923] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 -Coalesced [924] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 -Coalesced [925] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 -Coalesced [926] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 -Coalesced [927] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 -Coalesced [937] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 -Coalesced [938] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 -Coalesced [939] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 -Coalesced [940] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 -Coalesced [941] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 -Coalesced [949] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 -Coalesced [950] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 -Coalesced [951] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 -Coalesced [952] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 -Coalesced [953] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 -Coalesced [958] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 -Coalesced [959] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 -Coalesced [960] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 -Coalesced [964] bitmap_plot::x#6 ← bitmap_plot::x#0 -Coalesced [965] bitmap_plot::y#6 ← bitmap_plot::y#0 -Coalesced [972] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 -Coalesced [973] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 -Coalesced [978] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 -Coalesced [979] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 -Coalesced [980] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 -Coalesced (already) [981] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 -Coalesced [982] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 -Coalesced [992] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 -Coalesced [993] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 -Coalesced [994] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 -Coalesced [998] bitmap_plot::x#8 ← bitmap_plot::x#2 -Coalesced [999] bitmap_plot::y#8 ← bitmap_plot::y#2 -Coalesced [1006] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 -Coalesced [1007] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 -Coalesced [1012] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 -Coalesced [1013] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 -Coalesced [1014] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 -Coalesced (already) [1015] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 -Coalesced [1016] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 -Coalesced [1019] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 -Coalesced [1020] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 -Coalesced [1021] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 -Coalesced [1025] bitmap_plot::x#5 ← bitmap_plot::x#1 -Coalesced [1026] bitmap_plot::y#5 ← bitmap_plot::y#1 -Coalesced [1033] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 -Coalesced [1034] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 -Coalesced [1039] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 -Coalesced [1040] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 -Coalesced [1041] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 -Coalesced (already) [1042] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 -Coalesced [1043] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 -Coalesced [1046] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 -Coalesced [1047] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 -Coalesced [1048] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 -Coalesced [1052] bitmap_plot::x#7 ← bitmap_plot::x#3 -Coalesced [1053] bitmap_plot::y#7 ← bitmap_plot::y#3 -Coalesced [1060] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 -Coalesced [1061] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 -Coalesced [1066] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 -Coalesced [1067] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 -Coalesced [1068] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 -Coalesced (already) [1069] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 -Coalesced [1070] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 -Coalesced [1074] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 -Coalesced [1083] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 -Coalesced [1084] bitmap_clear::y#5 ← bitmap_clear::y#1 -Coalesced (already) [1085] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 -Coalesced [1086] bitmap_clear::x#3 ← bitmap_clear::x#1 -Coalesced [1109] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [1114] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [1115] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [1116] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [1117] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [1118] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [1119] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [1122] gfx_init_charset::chargen#6 ← gfx_init_charset::chargen#3 -Coalesced [1123] gfx_init_charset::charset#6 ← gfx_init_charset::charset#3 -Coalesced [1134] gfx_init_charset::chargen#5 ← gfx_init_charset::chargen#1 -Coalesced [1135] gfx_init_charset::charset#5 ← gfx_init_charset::charset#1 -Coalesced [1136] gfx_init_charset::c#5 ← gfx_init_charset::c#1 -Coalesced (already) [1137] gfx_init_charset::chargen#7 ← gfx_init_charset::chargen#1 -Coalesced (already) [1138] gfx_init_charset::charset#7 ← gfx_init_charset::charset#1 -Coalesced [1139] gfx_init_charset::l#3 ← gfx_init_charset::l#1 -Coalesced [1142] gfx_init_screen4::ch#6 ← gfx_init_screen4::ch#3 -Coalesced [1151] gfx_init_screen4::ch#5 ← gfx_init_screen4::ch#1 -Coalesced [1152] gfx_init_screen4::cy#5 ← gfx_init_screen4::cy#1 -Coalesced (already) [1153] gfx_init_screen4::ch#7 ← gfx_init_screen4::ch#1 -Coalesced [1154] gfx_init_screen4::cx#3 ← gfx_init_screen4::cx#1 -Coalesced [1157] gfx_init_screen3::ch#6 ← gfx_init_screen3::ch#3 -Coalesced [1170] gfx_init_screen3::cy#5 ← gfx_init_screen3::cy#1 -Coalesced [1171] gfx_init_screen3::ch#5 ← gfx_init_screen3::ch#1 -Coalesced [1172] gfx_init_screen3::cx#3 ← gfx_init_screen3::cx#1 -Coalesced (already) [1173] gfx_init_screen3::ch#7 ← gfx_init_screen3::ch#1 -Coalesced [1176] gfx_init_screen2::ch#6 ← gfx_init_screen2::ch#3 -Coalesced [1190] gfx_init_screen2::cy#5 ← gfx_init_screen2::cy#1 -Coalesced [1191] gfx_init_screen2::ch#5 ← gfx_init_screen2::ch#1 -Coalesced [1192] gfx_init_screen2::cx#3 ← gfx_init_screen2::cx#1 -Coalesced (already) [1193] gfx_init_screen2::ch#7 ← gfx_init_screen2::ch#1 -Coalesced [1196] gfx_init_screen1::ch#6 ← gfx_init_screen1::ch#3 -Coalesced [1207] gfx_init_screen1::cy#5 ← gfx_init_screen1::cy#1 -Coalesced [1208] gfx_init_screen1::ch#5 ← gfx_init_screen1::ch#1 -Coalesced [1209] gfx_init_screen1::cx#3 ← gfx_init_screen1::cx#1 -Coalesced (already) [1210] gfx_init_screen1::ch#7 ← gfx_init_screen1::ch#1 -Coalesced [1213] gfx_init_screen0::ch#6 ← gfx_init_screen0::ch#3 -Coalesced [1226] gfx_init_screen0::cy#5 ← gfx_init_screen0::cy#1 -Coalesced [1227] gfx_init_screen0::ch#5 ← gfx_init_screen0::ch#1 -Coalesced [1228] gfx_init_screen0::cx#3 ← gfx_init_screen0::cx#1 -Coalesced (already) [1229] gfx_init_screen0::ch#7 ← gfx_init_screen0::ch#1 +Coalesced (already) [409] form_mode::preset_current#9 ← form_mode::preset_current#6 +Coalesced [410] form_mode::i#3 ← form_mode::i#1 +Coalesced [440] print_str_at::str#5 ← print_str_at::str#1 +Coalesced [447] print_str_at::str#6 ← print_str_at::str#0 +Coalesced [448] print_str_at::at#5 ← print_str_at::at#0 +Coalesced [452] form_field_ptr::field_idx#4 ← form_field_ptr::field_idx#0 +Coalesced [458] form_render_values::idx#4 ← form_render_values::idx#1 +Coalesced [482] apply_preset::i#3 ← apply_preset::i#1 +Coalesced [495] form_field_ptr::field_idx#3 ← form_field_ptr::field_idx#1 +Coalesced (already) [504] keyboard_events_size#149 ← keyboard_events_size#47 +Coalesced [519] form_field_idx#74 ← form_field_idx#31 +Coalesced [522] form_field_idx#71 ← form_field_idx#6 +Coalesced [526] form_field_idx#72 ← form_field_idx#5 +Coalesced [534] form_cursor_count#67 ← form_cursor_count#15 +Coalesced (already) [535] form_field_idx#75 ← form_field_idx#28 +Coalesced (already) [540] form_cursor_count#66 ← form_cursor_count#15 +Coalesced (already) [541] form_field_idx#73 ← form_field_idx#28 +Coalesced (already) [542] form_cursor_count#68 ← form_cursor_count#15 +Coalesced (already) [543] form_field_idx#76 ← form_field_idx#28 +Coalesced [546] form_cursor_count#65 ← form_cursor_count#5 +Coalesced [557] form_set_screen::line#3 ← form_set_screen::line#1 +Coalesced [558] form_set_screen::y#3 ← form_set_screen::y#1 +Coalesced [560] print_str_lines::str#10 ← print_str_lines::str#5 +Not coalescing [561] print_char_cursor#73 ← print_screen#1 +Coalesced [562] print_line_cursor#73 ← print_screen#1 +Coalesced [566] print_str_lines::str#12 ← print_str_lines::str#3 +Coalesced [567] print_char_cursor#75 ← print_char_cursor#22 +Coalesced [574] print_char_cursor#78 ← print_char_cursor#1 +Coalesced [579] print_str_lines::str#11 ← print_str_lines::str#0 +Not coalescing [580] print_char_cursor#74 ← print_line_cursor#22 +Coalesced [581] print_line_cursor#74 ← print_line_cursor#22 +Coalesced (already) [582] print_str_lines::str#13 ← print_str_lines::str#0 +Coalesced [583] print_char_cursor#76 ← print_char_cursor#38 +Coalesced (already) [584] print_char_cursor#77 ← print_char_cursor#20 +Coalesced [585] print_line_cursor#75 ← print_line_cursor#2 +Coalesced (already) [591] print_line_cursor#76 ← print_line_cursor#22 +Coalesced [605] memset::dst#4 ← memset::dst#1 +Coalesced [607] print_screen#1 ← print_set_screen::screen#2 +Coalesced [650] dtvSetCpuBankSegment1::cpuBankIdx#15 ← dtvSetCpuBankSegment1::cpuBankIdx#11 +Coalesced [657] gfx_init_plane_fill::gfxb#7 ← gfx_init_plane_fill::gfxb#3 +Coalesced [669] gfx_init_plane_fill::gfxb#5 ← gfx_init_plane_fill::gfxb#1 +Coalesced [670] gfx_init_plane_fill::by#5 ← gfx_init_plane_fill::by#1 +Coalesced (already) [671] gfx_init_plane_fill::gfxb#8 ← gfx_init_plane_fill::gfxb#1 +Coalesced [672] gfx_init_plane_fill::bx#3 ← gfx_init_plane_fill::bx#1 +Coalesced [689] gfx_init_plane_horisontal2::gfxa#6 ← gfx_init_plane_horisontal2::gfxa#3 +Coalesced [703] gfx_init_plane_horisontal2::ay#5 ← gfx_init_plane_horisontal2::ay#1 +Coalesced [704] gfx_init_plane_horisontal2::gfxa#5 ← gfx_init_plane_horisontal2::gfxa#1 +Coalesced (already) [705] gfx_init_plane_horisontal2::gfxa#7 ← gfx_init_plane_horisontal2::gfxa#1 +Coalesced [706] gfx_init_plane_horisontal2::ax#3 ← gfx_init_plane_horisontal2::ax#1 +Coalesced [711] gfx_init_plane_vertical::gfxb#6 ← gfx_init_plane_vertical::gfxb#3 +Coalesced [723] gfx_init_plane_vertical::gfxb#5 ← gfx_init_plane_vertical::gfxb#1 +Coalesced [724] gfx_init_plane_vertical::by#5 ← gfx_init_plane_vertical::by#1 +Coalesced (already) [725] gfx_init_plane_vertical::gfxb#7 ← gfx_init_plane_vertical::gfxb#1 +Coalesced [726] gfx_init_plane_vertical::bx#3 ← gfx_init_plane_vertical::bx#1 +Coalesced [731] gfx_init_plane_horisontal::gfxa#10 ← gfx_init_plane_horisontal::gfxa#6 +Coalesced [737] gfx_init_plane_horisontal::gfxa#13 ← gfx_init_plane_horisontal::gfxa#2 +Coalesced [747] gfx_init_plane_horisontal::ay#8 ← gfx_init_plane_horisontal::ay#1 +Coalesced [748] gfx_init_plane_horisontal::gfxa#9 ← gfx_init_plane_horisontal::gfxa#7 +Coalesced (already) [749] gfx_init_plane_horisontal::gfxa#11 ← gfx_init_plane_horisontal::gfxa#7 +Coalesced [750] gfx_init_plane_horisontal::ax#6 ← gfx_init_plane_horisontal::ax#1 +Coalesced [753] gfx_init_plane_horisontal::gfxa#12 ← gfx_init_plane_horisontal::gfxa#1 +Coalesced [758] gfx_init_plane_charset8::chargen#10 ← gfx_init_plane_charset8::chargen#3 +Coalesced [759] gfx_init_plane_charset8::gfxa#10 ← gfx_init_plane_charset8::gfxa#6 +Coalesced [760] gfx_init_plane_charset8::col#10 ← gfx_init_plane_charset8::col#6 +Coalesced [764] gfx_init_plane_charset8::bits#5 ← gfx_init_plane_charset8::bits#0 +Coalesced [765] gfx_init_plane_charset8::gfxa#12 ← gfx_init_plane_charset8::gfxa#5 +Coalesced [766] gfx_init_plane_charset8::col#12 ← gfx_init_plane_charset8::col#5 +Not coalescing [770] gfx_init_plane_charset8::c#3 ← gfx_init_plane_charset8::col#2 +Coalesced [786] gfx_init_plane_charset8::chargen#9 ← gfx_init_plane_charset8::chargen#1 +Coalesced [787] gfx_init_plane_charset8::gfxa#9 ← gfx_init_plane_charset8::gfxa#1 +Coalesced [788] gfx_init_plane_charset8::col#9 ← gfx_init_plane_charset8::col#1 +Coalesced [789] gfx_init_plane_charset8::ch#9 ← gfx_init_plane_charset8::ch#1 +Coalesced (already) [790] gfx_init_plane_charset8::chargen#11 ← gfx_init_plane_charset8::chargen#1 +Coalesced (already) [791] gfx_init_plane_charset8::gfxa#11 ← gfx_init_plane_charset8::gfxa#1 +Coalesced (already) [792] gfx_init_plane_charset8::col#11 ← gfx_init_plane_charset8::col#1 +Coalesced [793] gfx_init_plane_charset8::cr#7 ← gfx_init_plane_charset8::cr#1 +Coalesced [794] gfx_init_plane_charset8::bits#6 ← gfx_init_plane_charset8::bits#1 +Coalesced (already) [795] gfx_init_plane_charset8::gfxa#13 ← gfx_init_plane_charset8::gfxa#1 +Coalesced (already) [796] gfx_init_plane_charset8::col#13 ← gfx_init_plane_charset8::col#1 +Coalesced [797] gfx_init_plane_charset8::cp#5 ← gfx_init_plane_charset8::cp#1 +Coalesced [802] gfx_init_plane_8bppchunky::gfxb#8 ← gfx_init_plane_8bppchunky::gfxb#5 +Coalesced [803] gfx_init_plane_8bppchunky::gfxbCpuBank#11 ← gfx_init_plane_8bppchunky::gfxbCpuBank#7 +Coalesced [807] dtvSetCpuBankSegment1::cpuBankIdx#14 ← dtvSetCpuBankSegment1::cpuBankIdx#1 +Coalesced [810] gfx_init_plane_8bppchunky::gfxbCpuBank#14 ← gfx_init_plane_8bppchunky::gfxbCpuBank#2 +Coalesced [824] gfx_init_plane_8bppchunky::gfxb#7 ← gfx_init_plane_8bppchunky::gfxb#1 +Coalesced [825] gfx_init_plane_8bppchunky::y#8 ← gfx_init_plane_8bppchunky::y#1 +Coalesced [826] gfx_init_plane_8bppchunky::gfxbCpuBank#10 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 +Coalesced (already) [827] gfx_init_plane_8bppchunky::gfxb#9 ← gfx_init_plane_8bppchunky::gfxb#1 +Coalesced [828] gfx_init_plane_8bppchunky::x#6 ← gfx_init_plane_8bppchunky::x#1 +Coalesced (already) [829] gfx_init_plane_8bppchunky::gfxbCpuBank#12 ← gfx_init_plane_8bppchunky::gfxbCpuBank#8 +Coalesced [830] gfx_init_plane_8bppchunky::gfxb#10 ← gfx_init_plane_8bppchunky::gfxb#3 +Coalesced (already) [831] gfx_init_plane_8bppchunky::gfxbCpuBank#13 ← gfx_init_plane_8bppchunky::gfxbCpuBank#4 +Coalesced [846] gfx_init_vic_bitmap::l#4 ← gfx_init_vic_bitmap::l#1 +Coalesced [857] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 +Coalesced [858] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 +Coalesced [859] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 +Coalesced [860] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 +Coalesced [861] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 +Coalesced [870] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 +Coalesced [871] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 +Coalesced [872] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 +Coalesced [873] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 +Coalesced [874] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 +Coalesced [884] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 +Coalesced [885] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 +Coalesced [886] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 +Coalesced [887] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 +Coalesced [888] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 +Coalesced [896] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 +Coalesced [897] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 +Coalesced [898] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 +Coalesced [899] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 +Coalesced [900] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 +Coalesced [912] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 +Coalesced [913] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 +Coalesced [914] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 +Coalesced [915] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 +Coalesced [916] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 +Coalesced [924] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 +Coalesced [925] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 +Coalesced [926] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 +Coalesced [927] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 +Coalesced [928] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 +Coalesced [938] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 +Coalesced [939] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 +Coalesced [940] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 +Coalesced [941] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 +Coalesced [942] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 +Coalesced [950] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 +Coalesced [951] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 +Coalesced [952] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 +Coalesced [953] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 +Coalesced [954] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 +Coalesced [959] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 +Coalesced [960] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 +Coalesced [961] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 +Coalesced [965] bitmap_plot::x#6 ← bitmap_plot::x#0 +Coalesced [966] bitmap_plot::y#6 ← bitmap_plot::y#0 +Coalesced [973] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 +Coalesced [974] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 +Coalesced [979] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 +Coalesced [980] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 +Coalesced [981] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 +Coalesced (already) [982] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 +Coalesced [983] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 +Coalesced [993] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 +Coalesced [994] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 +Coalesced [995] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 +Coalesced [999] bitmap_plot::x#8 ← bitmap_plot::x#2 +Coalesced [1000] bitmap_plot::y#8 ← bitmap_plot::y#2 +Coalesced [1007] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 +Coalesced [1008] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 +Coalesced [1013] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 +Coalesced [1014] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 +Coalesced [1015] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 +Coalesced (already) [1016] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 +Coalesced [1017] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 +Coalesced [1020] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 +Coalesced [1021] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 +Coalesced [1022] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 +Coalesced [1026] bitmap_plot::x#5 ← bitmap_plot::x#1 +Coalesced [1027] bitmap_plot::y#5 ← bitmap_plot::y#1 +Coalesced [1034] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 +Coalesced [1035] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 +Coalesced [1040] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 +Coalesced [1041] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 +Coalesced [1042] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 +Coalesced (already) [1043] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 +Coalesced [1044] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 +Coalesced [1047] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 +Coalesced [1048] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 +Coalesced [1049] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 +Coalesced [1053] bitmap_plot::x#7 ← bitmap_plot::x#3 +Coalesced [1054] bitmap_plot::y#7 ← bitmap_plot::y#3 +Coalesced [1061] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 +Coalesced [1062] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 +Coalesced [1067] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 +Coalesced [1068] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 +Coalesced [1069] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 +Coalesced (already) [1070] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 +Coalesced [1071] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 +Coalesced [1075] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 +Coalesced [1084] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 +Coalesced [1085] bitmap_clear::y#5 ← bitmap_clear::y#1 +Coalesced (already) [1086] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 +Coalesced [1087] bitmap_clear::x#3 ← bitmap_clear::x#1 +Coalesced [1110] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [1115] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [1116] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [1117] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [1118] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [1119] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [1120] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [1123] gfx_init_charset::chargen#6 ← gfx_init_charset::chargen#3 +Coalesced [1124] gfx_init_charset::charset#6 ← gfx_init_charset::charset#3 +Coalesced [1135] gfx_init_charset::chargen#5 ← gfx_init_charset::chargen#1 +Coalesced [1136] gfx_init_charset::charset#5 ← gfx_init_charset::charset#1 +Coalesced [1137] gfx_init_charset::c#5 ← gfx_init_charset::c#1 +Coalesced (already) [1138] gfx_init_charset::chargen#7 ← gfx_init_charset::chargen#1 +Coalesced (already) [1139] gfx_init_charset::charset#7 ← gfx_init_charset::charset#1 +Coalesced [1140] gfx_init_charset::l#3 ← gfx_init_charset::l#1 +Coalesced [1143] gfx_init_screen4::ch#6 ← gfx_init_screen4::ch#3 +Coalesced [1152] gfx_init_screen4::ch#5 ← gfx_init_screen4::ch#1 +Coalesced [1153] gfx_init_screen4::cy#5 ← gfx_init_screen4::cy#1 +Coalesced (already) [1154] gfx_init_screen4::ch#7 ← gfx_init_screen4::ch#1 +Coalesced [1155] gfx_init_screen4::cx#3 ← gfx_init_screen4::cx#1 +Coalesced [1158] gfx_init_screen3::ch#6 ← gfx_init_screen3::ch#3 +Coalesced [1171] gfx_init_screen3::cy#5 ← gfx_init_screen3::cy#1 +Coalesced [1172] gfx_init_screen3::ch#5 ← gfx_init_screen3::ch#1 +Coalesced [1173] gfx_init_screen3::cx#3 ← gfx_init_screen3::cx#1 +Coalesced (already) [1174] gfx_init_screen3::ch#7 ← gfx_init_screen3::ch#1 +Coalesced [1177] gfx_init_screen2::ch#6 ← gfx_init_screen2::ch#3 +Coalesced [1191] gfx_init_screen2::cy#5 ← gfx_init_screen2::cy#1 +Coalesced [1192] gfx_init_screen2::ch#5 ← gfx_init_screen2::ch#1 +Coalesced [1193] gfx_init_screen2::cx#3 ← gfx_init_screen2::cx#1 +Coalesced (already) [1194] gfx_init_screen2::ch#7 ← gfx_init_screen2::ch#1 +Coalesced [1197] gfx_init_screen1::ch#6 ← gfx_init_screen1::ch#3 +Coalesced [1208] gfx_init_screen1::cy#5 ← gfx_init_screen1::cy#1 +Coalesced [1209] gfx_init_screen1::ch#5 ← gfx_init_screen1::ch#1 +Coalesced [1210] gfx_init_screen1::cx#3 ← gfx_init_screen1::cx#1 +Coalesced (already) [1211] gfx_init_screen1::ch#7 ← gfx_init_screen1::ch#1 +Coalesced [1214] gfx_init_screen0::ch#6 ← gfx_init_screen0::ch#3 +Coalesced [1227] gfx_init_screen0::cy#5 ← gfx_init_screen0::cy#1 +Coalesced [1228] gfx_init_screen0::ch#5 ← gfx_init_screen0::ch#1 +Coalesced [1229] gfx_init_screen0::cx#3 ← gfx_init_screen0::cx#1 +Coalesced (already) [1230] gfx_init_screen0::ch#7 ← gfx_init_screen0::ch#1 Coalesced down to 120 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @17 @@ -12355,7 +12289,7 @@ form_mode::@2: scope:[form_mode] from form_mode::@1 [288] (byte) form_mode::preset_current#0 ← *((const byte[]) form_fields_val#0) to:form_mode::@3 form_mode::@3: scope:[form_mode] from form_mode::@19 form_mode::@2 form_mode::@6 - [289] (byte) form_mode::preset_current#6 ← phi( form_mode::@2/(byte) form_mode::preset_current#0 form_mode::@19/(byte) form_mode::preset_current#1 ) + [289] (byte) form_mode::preset_current#6 ← phi( form_mode::@6/(byte) form_mode::preset_current#6 form_mode::@2/(byte) form_mode::preset_current#0 form_mode::@19/(byte) form_mode::preset_current#1 ) [289] (byte) form_field_idx#28 ← phi( form_mode::@6/(byte) form_field_idx#18 form_mode::@2/(byte) form_field_idx#1 form_mode::@19/(byte) form_field_idx#18 ) [289] (byte) keyboard_events_size#47 ← phi( form_mode::@6/(byte) keyboard_events_size#24 form_mode::@2/(byte) keyboard_events_size#27 form_mode::@19/(byte) keyboard_events_size#24 ) [289] (signed byte) form_cursor_count#21 ← phi( form_mode::@6/(signed byte) form_cursor_count#16 form_mode::@2/(signed byte) form_cursor_count#1 form_mode::@19/(signed byte) form_cursor_count#16 ) @@ -13915,7 +13849,7 @@ VARIABLE REGISTER WEIGHTS (byte) form_mode::preset_current (byte) form_mode::preset_current#0 4.0 (byte) form_mode::preset_current#1 50.5 -(byte) form_mode::preset_current#6 157.71428571428572 +(byte) form_mode::preset_current#6 388.25 (byte*) form_preset (void()) form_render_values() (byte*) form_render_values::field @@ -17268,21 +17202,16 @@ form_mode: { // [288] (byte) form_mode::preset_current#0 ← *((const byte[]) form_fields_val#0) -- vbuz1=_deref_pbuc1 lda form_fields_val sta preset_current - // [289] phi from form_mode::@19 form_mode::@2 to form_mode::@3 [phi:form_mode::@19/form_mode::@2->form_mode::@3] + // [289] phi from form_mode::@19 form_mode::@2 form_mode::@6 to form_mode::@3 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3] b3_from_b19: b3_from_b2: - // [289] phi (byte) form_mode::preset_current#6 = (byte) form_mode::preset_current#1 [phi:form_mode::@19/form_mode::@2->form_mode::@3#0] -- register_copy - // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@19/form_mode::@2->form_mode::@3#1] -- register_copy - // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@19/form_mode::@2->form_mode::@3#2] -- register_copy - // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@19/form_mode::@2->form_mode::@3#3] -- register_copy + b3_from_b6: + // [289] phi (byte) form_mode::preset_current#6 = (byte) form_mode::preset_current#1 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#0] -- register_copy + // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#1] -- register_copy + // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#2] -- register_copy + // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#3] -- register_copy jmp b3 // Let the user change values in the form - // [289] phi from form_mode::@6 to form_mode::@3 [phi:form_mode::@6->form_mode::@3] - b3_from_b6: - // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@6->form_mode::@3#0] -- register_copy - // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@6->form_mode::@3#1] -- register_copy - // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@6->form_mode::@3#2] -- register_copy - jmp b3 // form_mode::@3 b3: jmp b4 @@ -22089,8 +22018,8 @@ Uplift Scope [gfx_init_plane_charset8] 4,004: zp ZP_BYTE:89 [ gfx_init_plane_cha Uplift Scope [gfx_mode] 2,104.5: zp ZP_WORD:8 [ gfx_mode::col#2 gfx_mode::col#3 gfx_mode::col#1 ] 2,002: zp ZP_BYTE:10 [ gfx_mode::cx#2 gfx_mode::cx#1 ] 1,663.27: zp ZP_WORD:6 [ gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 ] 353.5: zp ZP_BYTE:11 [ gfx_mode::j#2 gfx_mode::j#1 ] 353.5: zp ZP_BYTE:12 [ gfx_mode::i#2 gfx_mode::i#1 ] 202: zp ZP_BYTE:238 [ gfx_mode::keyboard_event#0 ] 180.36: zp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] 44: zp ZP_BYTE:2 [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] 12: zp ZP_BYTE:3 [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] 4: zp ZP_BYTE:158 [ gfx_mode::$20 ] 4: zp ZP_DWORD:164 [ gfx_mode::$22 ] 4: zp ZP_BYTE:174 [ gfx_mode::$25 ] 4: zp ZP_BYTE:175 [ gfx_mode::$27 ] 4: zp ZP_WORD:176 [ gfx_mode::$28 ] 4: zp ZP_BYTE:178 [ gfx_mode::$29 ] 4: zp ZP_BYTE:179 [ gfx_mode::$30 ] 4: zp ZP_BYTE:180 [ gfx_mode::$31 ] 4: zp ZP_BYTE:181 [ gfx_mode::$32 ] 4: zp ZP_BYTE:182 [ gfx_mode::$33 ] 4: zp ZP_BYTE:183 [ gfx_mode::$34 ] 4: zp ZP_DWORD:189 [ gfx_mode::$36 ] 4: zp ZP_BYTE:199 [ gfx_mode::$39 ] 4: zp ZP_BYTE:200 [ gfx_mode::$41 ] 4: zp ZP_WORD:201 [ gfx_mode::$42 ] 4: zp ZP_BYTE:203 [ gfx_mode::$43 ] 4: zp ZP_BYTE:204 [ gfx_mode::$44 ] 4: zp ZP_BYTE:205 [ gfx_mode::$45 ] 4: zp ZP_BYTE:206 [ gfx_mode::$46 ] 4: zp ZP_BYTE:207 [ gfx_mode::$47 ] 4: zp ZP_WORD:212 [ gfx_mode::$54 ] 4: zp ZP_WORD:222 [ gfx_mode::$59 ] 4: zp ZP_BYTE:224 [ gfx_mode::$60 ] 4: zp ZP_BYTE:225 [ gfx_mode::$61 ] 4: zp ZP_BYTE:226 [ gfx_mode::$62 ] 4: zp ZP_BYTE:229 [ gfx_mode::$64 ] 4: zp ZP_BYTE:230 [ gfx_mode::$65 ] 4: zp ZP_BYTE:231 [ gfx_mode::$66 ] 4: zp ZP_BYTE:232 [ gfx_mode::$67 ] 4: zp ZP_BYTE:233 [ gfx_mode::$68 ] 4: zp ZP_BYTE:234 [ gfx_mode::$69 ] 4: zp ZP_BYTE:235 [ gfx_mode::$70 ] 4: zp ZP_BYTE:236 [ gfx_mode::$71 ] 2: zp ZP_BYTE:4 [ gfx_mode::vic_control2#2 ] 2: zp ZP_WORD:172 [ gfx_mode::$26 ] 2: zp ZP_WORD:197 [ gfx_mode::$40 ] 2: zp ZP_WORD:210 [ gfx_mode::$53 ] 2: zp ZP_WORD:214 [ gfx_mode::$55 ] 2: zp ZP_WORD:220 [ gfx_mode::$58 ] 1: zp ZP_DWORD:168 [ gfx_mode::plane_a#0 ] 1: zp ZP_DWORD:193 [ gfx_mode::plane_b#0 ] 0.8: zp ZP_BYTE:159 [ gfx_mode::plane_a_offs#0 ] 0.8: zp ZP_BYTE:184 [ gfx_mode::plane_b_offs#0 ] 0.5: zp ZP_BYTE:216 [ gfx_mode::$56 ] Uplift Scope [print_str_at] 3,005.5: zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] 2,002: zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] Uplift Scope [apply_preset] 3,503.5: zp ZP_BYTE:45 [ apply_preset::i#2 apply_preset::i#1 ] 200.2: zp ZP_WORD:43 [ apply_preset::preset#14 ] 11.18: zp ZP_BYTE:261 [ apply_preset::idx#0 ] +Uplift Scope [form_mode] 2,002: zp ZP_BYTE:260 [ form_mode::$36 ] 442.75: zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] 353.5: zp ZP_BYTE:30 [ form_mode::i#2 form_mode::i#1 ] Uplift Scope [print_str_lines] 1,939.17: zp ZP_WORD:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] 667.33: zp ZP_BYTE:275 [ print_str_lines::ch#0 ] -Uplift Scope [form_mode] 2,002: zp ZP_BYTE:260 [ form_mode::$36 ] 353.5: zp ZP_BYTE:30 [ form_mode::i#2 form_mode::i#1 ] 212.21: zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] Uplift Scope [form_render_values] 2,502.5: zp ZP_BYTE:41 [ form_render_values::idx#2 form_render_values::idx#1 ] Uplift Scope [form_field_ptr] 2,341.67: zp ZP_BYTE:42 [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] 33.9: zp ZP_BYTE:265 [ form_field_ptr::x#0 ] 6: zp ZP_BYTE:262 [ form_field_ptr::y#0 ] 0.06: zp ZP_WORD:263 [ form_field_ptr::line#0 ] Uplift Scope [form_control] 2,002: zp ZP_BYTE:259 [ form_control::return#0 ] 333.67: zp ZP_BYTE:46 [ form_control::return#2 ] 4: zp ZP_BYTE:266 [ form_control::$13 ] 4: zp ZP_BYTE:269 [ form_control::$15 ] 4: zp ZP_BYTE:270 [ form_control::$16 ] 4: zp ZP_BYTE:271 [ form_control::$24 ] 4: zp ZP_BYTE:272 [ form_control::$14 ] 2.67: zp ZP_BYTE:268 [ form_control::key_event#0 ] @@ -22134,358 +22063,358 @@ Uplift Scope [gfx_init_plane_vertical2] Uplift Scope [gfx_init_plane_blank] Uplift Scope [gfx_init_plane_full] -Uplifting [keyboard_event_scan] best 15483710 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] zp ZP_BYTE:252 [ keyboard_event_scan::event_type#0 ] zp ZP_BYTE:253 [ keyboard_event_scan::$23 ] zp ZP_BYTE:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:243 [ keyboard_event_scan::$0 ] zp ZP_BYTE:245 [ keyboard_event_scan::$3 ] zp ZP_BYTE:247 [ keyboard_event_scan::$6 ] zp ZP_BYTE:249 [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 15480710 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] zp ZP_BYTE:252 [ keyboard_event_scan::event_type#0 ] zp ZP_BYTE:253 [ keyboard_event_scan::$23 ] zp ZP_BYTE:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:243 [ keyboard_event_scan::$0 ] zp ZP_BYTE:245 [ keyboard_event_scan::$3 ] zp ZP_BYTE:247 [ keyboard_event_scan::$6 ] zp ZP_BYTE:249 [ keyboard_event_scan::$9 ] Limited combination testing to 10 combinations of 5308416 possible. -Uplifting [] best 15483692 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_WORD:52 [ print_char_cursor#20 print_char_cursor#22 print_char_cursor#73 print_char_cursor#74 print_char_cursor#38 print_char_cursor#1 ] zp ZP_WORD:54 [ print_line_cursor#21 print_line_cursor#2 print_set_screen::screen#2 print_line_cursor#22 ] zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] reg byte x [ keyboard_modifiers#21 keyboard_modifiers#20 keyboard_modifiers#19 keyboard_modifiers#18 keyboard_modifiers#3 keyboard_modifiers#4 keyboard_modifiers#5 ] +Uplifting [] best 15480692 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_WORD:52 [ print_char_cursor#20 print_char_cursor#22 print_char_cursor#73 print_char_cursor#74 print_char_cursor#38 print_char_cursor#1 ] zp ZP_WORD:54 [ print_line_cursor#21 print_line_cursor#2 print_set_screen::screen#2 print_line_cursor#22 ] zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] reg byte x [ keyboard_modifiers#21 keyboard_modifiers#20 keyboard_modifiers#19 keyboard_modifiers#18 keyboard_modifiers#3 keyboard_modifiers#4 keyboard_modifiers#5 ] Limited combination testing to 10 combinations of 16 possible. -Uplifting [keyboard_matrix_read] best 15393689 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] zp ZP_BYTE:258 [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 15390689 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] zp ZP_BYTE:258 [ keyboard_matrix_read::return#0 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [gfx_init_plane_charset8] best 15378689 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$7 ] zp ZP_BYTE:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp ZP_WORD:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp ZP_WORD:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] +Uplifting [gfx_init_plane_charset8] best 15375689 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$7 ] zp ZP_BYTE:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp ZP_WORD:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp ZP_WORD:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] Limited combination testing to 10 combinations of 1152 possible. -Uplifting [print_str_at] best 15378689 combination zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] -Uplifting [apply_preset] best 15366356 combination reg byte y [ apply_preset::i#2 apply_preset::i#1 ] zp ZP_WORD:43 [ apply_preset::preset#14 ] reg byte a [ apply_preset::idx#0 ] +Uplifting [print_str_at] best 15375689 combination zp ZP_WORD:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] zp ZP_WORD:39 [ print_str_at::at#2 print_str_at::at#0 ] +Uplifting [apply_preset] best 15363356 combination reg byte y [ apply_preset::i#2 apply_preset::i#1 ] zp ZP_WORD:43 [ apply_preset::preset#14 ] reg byte a [ apply_preset::idx#0 ] Limited combination testing to 10 combinations of 12 possible. -Uplifting [print_str_lines] best 15354356 combination zp ZP_WORD:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] -Uplifting [form_mode] best 15347156 combination reg byte a [ form_mode::$36 ] reg byte x [ form_mode::i#2 form_mode::i#1 ] zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] +Uplifting [form_mode] best 15356156 combination reg byte a [ form_mode::$36 ] zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] reg byte x [ form_mode::i#2 form_mode::i#1 ] Limited combination testing to 10 combinations of 24 possible. -Uplifting [form_render_values] best 15332156 combination reg byte x [ form_render_values::idx#2 form_render_values::idx#1 ] -Uplifting [form_field_ptr] best 15329143 combination reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] zp ZP_BYTE:265 [ form_field_ptr::x#0 ] reg byte a [ form_field_ptr::y#0 ] zp ZP_WORD:263 [ form_field_ptr::line#0 ] +Uplifting [print_str_lines] best 15344156 combination zp ZP_WORD:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] +Uplifting [form_render_values] best 15329156 combination reg byte x [ form_render_values::idx#2 form_render_values::idx#1 ] +Uplifting [form_field_ptr] best 15326143 combination reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] zp ZP_BYTE:265 [ form_field_ptr::x#0 ] reg byte a [ form_field_ptr::y#0 ] zp ZP_WORD:263 [ form_field_ptr::line#0 ] Limited combination testing to 10 combinations of 24 possible. -Uplifting [form_control] best 15322134 combination reg byte a [ form_control::return#0 ] reg byte x [ form_control::return#2 ] zp ZP_BYTE:266 [ form_control::$13 ] zp ZP_BYTE:269 [ form_control::$15 ] zp ZP_BYTE:270 [ form_control::$16 ] zp ZP_BYTE:271 [ form_control::$24 ] zp ZP_BYTE:272 [ form_control::$14 ] zp ZP_BYTE:268 [ form_control::key_event#0 ] +Uplifting [form_control] best 15319134 combination reg byte a [ form_control::return#0 ] reg byte x [ form_control::return#2 ] zp ZP_BYTE:266 [ form_control::$13 ] zp ZP_BYTE:269 [ form_control::$15 ] zp ZP_BYTE:270 [ form_control::$16 ] zp ZP_BYTE:271 [ form_control::$24 ] zp ZP_BYTE:272 [ form_control::$14 ] zp ZP_BYTE:268 [ form_control::key_event#0 ] Limited combination testing to 10 combinations of 65536 possible. -Uplifting [bitmap_plot] best 15319725 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:313 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:317 [ bitmap_plot::$1 ] zp ZP_WORD:311 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:315 [ bitmap_plot::plotter#0 ] +Uplifting [bitmap_plot] best 15316725 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:313 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:317 [ bitmap_plot::$1 ] zp ZP_WORD:311 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:315 [ bitmap_plot::plotter#0 ] Limited combination testing to 10 combinations of 36 possible. -Uplifting [gfx_init_screen2] best 15318525 combination reg byte a [ gfx_init_screen2::$0 ] reg byte a [ gfx_init_screen2::$3 ] zp ZP_BYTE:336 [ gfx_init_screen2::$4 ] zp ZP_BYTE:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] zp ZP_BYTE:333 [ gfx_init_screen2::col#0 ] zp ZP_WORD:148 [ gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 ] zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] +Uplifting [gfx_init_screen2] best 15315525 combination reg byte a [ gfx_init_screen2::$0 ] reg byte a [ gfx_init_screen2::$3 ] zp ZP_BYTE:336 [ gfx_init_screen2::$4 ] zp ZP_BYTE:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] zp ZP_BYTE:333 [ gfx_init_screen2::col#0 ] zp ZP_WORD:148 [ gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 ] zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [gfx_init_plane_8bppchunky] best 15317295 combination reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] zp ZP_WORD:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] reg byte a [ gfx_init_plane_8bppchunky::c#0 ] zp ZP_WORD:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] zp ZP_WORD:297 [ gfx_init_plane_8bppchunky::$8 ] zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] +Uplifting [gfx_init_plane_8bppchunky] best 15314295 combination reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] zp ZP_WORD:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] reg byte a [ gfx_init_plane_8bppchunky::c#0 ] zp ZP_WORD:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] zp ZP_WORD:297 [ gfx_init_plane_8bppchunky::$8 ] zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] Limited combination testing to 10 combinations of 16 possible. -Uplifting [bitmap_line_xdyi] best 15316695 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 15313695 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_xdyd] best 15316095 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 15313095 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxi] best 15315089 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 15312089 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxd] best 15314083 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 15311083 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [gfx_init_screen0] best 15312883 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] zp ZP_BYTE:342 [ gfx_init_screen0::$3 ] zp ZP_BYTE:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp ZP_WORD:156 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] +Uplifting [gfx_init_screen0] best 15309883 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] zp ZP_BYTE:342 [ gfx_init_screen0::$3 ] zp ZP_BYTE:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp ZP_WORD:156 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] Limited combination testing to 10 combinations of 768 possible. -Uplifting [gfx_init_screen3] best 15311683 combination reg byte a [ gfx_init_screen3::$0 ] reg byte a [ gfx_init_screen3::$2 ] zp ZP_BYTE:331 [ gfx_init_screen3::$3 ] zp ZP_BYTE:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] zp ZP_WORD:144 [ gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 ] zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] +Uplifting [gfx_init_screen3] best 15308683 combination reg byte a [ gfx_init_screen3::$0 ] reg byte a [ gfx_init_screen3::$2 ] zp ZP_BYTE:331 [ gfx_init_screen3::$3 ] zp ZP_BYTE:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] zp ZP_WORD:144 [ gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 ] zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] Limited combination testing to 10 combinations of 768 possible. -Uplifting [gfx_init_plane_horisontal] best 15310183 combination zp ZP_WORD:77 [ gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 ] reg byte a [ gfx_init_plane_horisontal::$7 ] reg byte x [ gfx_init_plane_horisontal::ax#2 gfx_init_plane_horisontal::ax#1 ] zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] +Uplifting [gfx_init_plane_horisontal] best 15307183 combination zp ZP_WORD:77 [ gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 ] reg byte a [ gfx_init_plane_horisontal::$7 ] reg byte x [ gfx_init_plane_horisontal::ax#2 gfx_init_plane_horisontal::ax#1 ] zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] Limited combination testing to 10 combinations of 16 possible. -Uplifting [gfx_init_screen1] best 15308583 combination reg byte x [ gfx_init_screen1::cx#2 gfx_init_screen1::cx#1 ] reg byte a [ gfx_init_screen1::$0 ] zp ZP_BYTE:338 [ gfx_init_screen1::$1 ] zp ZP_WORD:152 [ gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 ] zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] +Uplifting [gfx_init_screen1] best 15305583 combination reg byte x [ gfx_init_screen1::cx#2 gfx_init_screen1::cx#1 ] reg byte a [ gfx_init_screen1::$0 ] zp ZP_BYTE:338 [ gfx_init_screen1::$1 ] zp ZP_WORD:152 [ gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 ] zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [form_set_screen] best 15306483 combination reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] reg byte a [ form_set_screen::$0 ] zp ZP_BYTE:274 [ form_set_screen::$1 ] zp ZP_WORD:47 [ form_set_screen::line#2 form_set_screen::line#1 ] +Uplifting [form_set_screen] best 15303483 combination reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] reg byte a [ form_set_screen::$0 ] zp ZP_BYTE:274 [ form_set_screen::$1 ] zp ZP_WORD:47 [ form_set_screen::line#2 form_set_screen::line#1 ] Limited combination testing to 10 combinations of 48 possible. -Uplifting [gfx_init_plane_horisontal2] best 15305483 combination reg byte a [ gfx_init_plane_horisontal2::$7 ] reg byte a [ gfx_init_plane_horisontal2::row#0 ] zp ZP_BYTE:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] zp ZP_WORD:69 [ gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 ] zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] +Uplifting [gfx_init_plane_horisontal2] best 15302483 combination reg byte a [ gfx_init_plane_horisontal2::$7 ] reg byte a [ gfx_init_plane_horisontal2::row#0 ] zp ZP_BYTE:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] zp ZP_WORD:69 [ gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 ] zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [gfx_init_charset] best 15304583 combination zp ZP_WORD:135 [ gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 ] reg byte x [ gfx_init_charset::l#2 gfx_init_charset::l#1 ] zp ZP_WORD:133 [ gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 ] zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] -Uplifting [gfx_init_plane_fill] best 15303677 combination zp ZP_WORD:64 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 ] reg byte x [ gfx_init_plane_fill::bx#2 gfx_init_plane_fill::bx#1 ] zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] zp ZP_DWORD:280 [ gfx_init_plane_fill::$0 ] zp ZP_WORD:284 [ gfx_init_plane_fill::$1 ] reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ] zp ZP_WORD:287 [ gfx_init_plane_fill::$4 ] zp ZP_WORD:289 [ gfx_init_plane_fill::$5 ] zp ZP_WORD:291 [ gfx_init_plane_fill::gfxb#0 ] zp ZP_DWORD:58 [ gfx_init_plane_fill::plane_addr#3 ] +Uplifting [gfx_init_charset] best 15301583 combination zp ZP_WORD:135 [ gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 ] reg byte x [ gfx_init_charset::l#2 gfx_init_charset::l#1 ] zp ZP_WORD:133 [ gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 ] zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] +Uplifting [gfx_init_plane_fill] best 15300677 combination zp ZP_WORD:64 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 ] reg byte x [ gfx_init_plane_fill::bx#2 gfx_init_plane_fill::bx#1 ] zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] zp ZP_DWORD:280 [ gfx_init_plane_fill::$0 ] zp ZP_WORD:284 [ gfx_init_plane_fill::$1 ] reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ] zp ZP_WORD:287 [ gfx_init_plane_fill::$4 ] zp ZP_WORD:289 [ gfx_init_plane_fill::$5 ] zp ZP_WORD:291 [ gfx_init_plane_fill::gfxb#0 ] zp ZP_DWORD:58 [ gfx_init_plane_fill::plane_addr#3 ] Limited combination testing to 10 combinations of 32 possible. -Uplifting [bitmap_clear] best 15302777 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:321 [ bitmap_clear::bitmap#0 ] -Uplifting [gfx_init_screen4] best 15301877 combination zp ZP_WORD:139 [ gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 ] reg byte x [ gfx_init_screen4::cx#2 gfx_init_screen4::cx#1 ] zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] -Uplifting [gfx_init_plane_vertical] best 15300977 combination zp ZP_WORD:73 [ gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 ] reg byte x [ gfx_init_plane_vertical::bx#2 gfx_init_plane_vertical::bx#1 ] zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] -Uplifting [memset] best 15300977 combination zp ZP_WORD:56 [ memset::dst#2 memset::dst#3 memset::dst#1 ] zp ZP_WORD:278 [ memset::end#0 ] zp ZP_WORD:276 [ memset::str#0 ] -Uplifting [dtvSetCpuBankSegment1] best 15300838 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#13 dtvSetCpuBankSegment1::cpuBankIdx#1 dtvSetCpuBankSegment1::cpuBankIdx#11 ] -Uplifting [keyboard_event_get] best 15299929 combination reg byte a [ keyboard_event_get::return#3 ] reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] zp ZP_BYTE:267 [ keyboard_event_get::return#4 ] +Uplifting [bitmap_clear] best 15299777 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:321 [ bitmap_clear::bitmap#0 ] +Uplifting [gfx_init_screen4] best 15298877 combination zp ZP_WORD:139 [ gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 ] reg byte x [ gfx_init_screen4::cx#2 gfx_init_screen4::cx#1 ] zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] +Uplifting [gfx_init_plane_vertical] best 15297977 combination zp ZP_WORD:73 [ gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 ] reg byte x [ gfx_init_plane_vertical::bx#2 gfx_init_plane_vertical::bx#1 ] zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] +Uplifting [memset] best 15297977 combination zp ZP_WORD:56 [ memset::dst#2 memset::dst#3 memset::dst#1 ] zp ZP_WORD:278 [ memset::end#0 ] zp ZP_WORD:276 [ memset::str#0 ] +Uplifting [dtvSetCpuBankSegment1] best 15297838 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#13 dtvSetCpuBankSegment1::cpuBankIdx#1 dtvSetCpuBankSegment1::cpuBankIdx#11 ] +Uplifting [keyboard_event_get] best 15296929 combination reg byte a [ keyboard_event_get::return#3 ] reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] zp ZP_BYTE:267 [ keyboard_event_get::return#4 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [render_preset_name] best 15299593 combination reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] zp ZP_WORD:35 [ render_preset_name::name#13 ] -Uplifting [bitmap_init] best 15299293 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:323 [ bitmap_init::$0 ] zp ZP_BYTE:325 [ bitmap_init::$7 ] zp ZP_BYTE:326 [ bitmap_init::$8 ] zp ZP_BYTE:327 [ bitmap_init::$9 ] zp ZP_BYTE:324 [ bitmap_init::$10 ] +Uplifting [render_preset_name] best 15296593 combination reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] zp ZP_WORD:35 [ render_preset_name::name#13 ] +Uplifting [bitmap_init] best 15296293 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:323 [ bitmap_init::$0 ] zp ZP_BYTE:325 [ bitmap_init::$7 ] zp ZP_BYTE:326 [ bitmap_init::$8 ] zp ZP_BYTE:327 [ bitmap_init::$9 ] zp ZP_BYTE:324 [ bitmap_init::$10 ] Limited combination testing to 10 combinations of 34560 possible. -Uplifting [keyboard_event_pressed] best 15299281 combination reg byte a [ keyboard_event_pressed::return#0 ] reg byte a [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:246 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:248 [ keyboard_event_pressed::return#3 ] zp ZP_BYTE:254 [ keyboard_event_pressed::$0 ] zp ZP_BYTE:256 [ keyboard_event_pressed::$1 ] zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:257 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] +Uplifting [keyboard_event_pressed] best 15296281 combination reg byte a [ keyboard_event_pressed::return#0 ] reg byte a [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:246 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:248 [ keyboard_event_pressed::return#3 ] zp ZP_BYTE:254 [ keyboard_event_pressed::$0 ] zp ZP_BYTE:256 [ keyboard_event_pressed::$1 ] zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:257 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] Limited combination testing to 10 combinations of 147456 possible. -Uplifting [gfx_init_vic_bitmap] best 15299281 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] -Uplifting [get_vic_screen] best 15299260 combination reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] zp ZP_WORD:208 [ get_vic_screen::return#10 ] zp ZP_WORD:227 [ get_vic_screen::return#11 ] zp ZP_WORD:21 [ get_vic_screen::return#5 ] -Uplifting [get_plane] best 15299212 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp ZP_DWORD:160 [ get_plane::return#16 ] zp ZP_DWORD:185 [ get_plane::return#17 ] zp ZP_DWORD:26 [ get_plane::return#14 ] -Uplifting [bitmap_line] best 15299166 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] zp ZP_BYTE:302 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:300 [ bitmap_line::x0#0 ] zp ZP_BYTE:305 [ bitmap_line::yd#2 ] zp ZP_BYTE:306 [ bitmap_line::yd#1 ] zp ZP_BYTE:308 [ bitmap_line::yd#10 ] zp ZP_BYTE:309 [ bitmap_line::yd#11 ] zp ZP_BYTE:304 [ bitmap_line::xd#2 ] zp ZP_BYTE:307 [ bitmap_line::xd#1 ] +Uplifting [gfx_init_vic_bitmap] best 15296281 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +Uplifting [get_vic_screen] best 15296260 combination reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] zp ZP_WORD:208 [ get_vic_screen::return#10 ] zp ZP_WORD:227 [ get_vic_screen::return#11 ] zp ZP_WORD:21 [ get_vic_screen::return#5 ] +Uplifting [get_plane] best 15296212 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp ZP_DWORD:160 [ get_plane::return#16 ] zp ZP_DWORD:185 [ get_plane::return#17 ] zp ZP_DWORD:26 [ get_plane::return#14 ] +Uplifting [bitmap_line] best 15296166 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] zp ZP_BYTE:302 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:300 [ bitmap_line::x0#0 ] zp ZP_BYTE:305 [ bitmap_line::yd#2 ] zp ZP_BYTE:306 [ bitmap_line::yd#1 ] zp ZP_BYTE:308 [ bitmap_line::yd#10 ] zp ZP_BYTE:309 [ bitmap_line::yd#11 ] zp ZP_BYTE:304 [ bitmap_line::xd#2 ] zp ZP_BYTE:307 [ bitmap_line::xd#1 ] Limited combination testing to 10 combinations of 186624 possible. -Uplifting [get_vic_charset] best 15299157 combination zp ZP_WORD:218 [ get_vic_charset::return#4 ] reg byte a [ get_vic_charset::idx#0 ] zp ZP_WORD:23 [ get_vic_charset::return#2 ] -Uplifting [RADIX] best 15299157 combination -Uplifting [print_ln] best 15299157 combination -Uplifting [print_cls] best 15299157 combination -Uplifting [print_set_screen] best 15299157 combination -Uplifting [keyboard_init] best 15299157 combination -Uplifting [main] best 15299157 combination -Uplifting [gfx_init] best 15299157 combination -Uplifting [gfx_init_plane_vertical2] best 15299157 combination -Uplifting [gfx_init_plane_blank] best 15299157 combination -Uplifting [gfx_init_plane_full] best 15299157 combination +Uplifting [get_vic_charset] best 15296157 combination zp ZP_WORD:218 [ get_vic_charset::return#4 ] reg byte a [ get_vic_charset::idx#0 ] zp ZP_WORD:23 [ get_vic_charset::return#2 ] +Uplifting [RADIX] best 15296157 combination +Uplifting [print_ln] best 15296157 combination +Uplifting [print_cls] best 15296157 combination +Uplifting [print_set_screen] best 15296157 combination +Uplifting [keyboard_init] best 15296157 combination +Uplifting [main] best 15296157 combination +Uplifting [gfx_init] best 15296157 combination +Uplifting [gfx_init_plane_vertical2] best 15296157 combination +Uplifting [gfx_init_plane_blank] best 15296157 combination +Uplifting [gfx_init_plane_full] best 15296157 combination Attempting to uplift remaining variables inzp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] -Uplifting [] best 15299157 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] +Uplifting [] best 15296157 combination zp ZP_BYTE:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:252 [ keyboard_event_scan::event_type#0 ] -Uplifting [keyboard_event_scan] best 14699157 combination reg byte a [ keyboard_event_scan::event_type#0 ] +Uplifting [keyboard_event_scan] best 14696157 combination reg byte a [ keyboard_event_scan::event_type#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:253 [ keyboard_event_scan::$23 ] -Uplifting [keyboard_event_scan] best 14099157 combination reg byte a [ keyboard_event_scan::$23 ] +Uplifting [keyboard_event_scan] best 14096157 combination reg byte a [ keyboard_event_scan::$23 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] -Uplifting [keyboard_event_scan] best 12599157 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] +Uplifting [keyboard_event_scan] best 12596157 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Uplifting [keyboard_event_scan] best 12599157 combination zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] +Uplifting [keyboard_event_scan] best 12596157 combination zp ZP_BYTE:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Uplifting [keyboard_event_scan] best 12599157 combination zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] +Uplifting [keyboard_event_scan] best 12596157 combination zp ZP_BYTE:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] -Uplifting [keyboard_event_scan] best 12599157 combination zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] +Uplifting [keyboard_event_scan] best 12596157 combination zp ZP_BYTE:241 [ keyboard_event_scan::row_scan#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:258 [ keyboard_matrix_read::return#0 ] -Uplifting [keyboard_matrix_read] best 12569154 combination reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 12566154 combination reg byte a [ keyboard_matrix_read::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ gfx_mode::cx#2 gfx_mode::cx#1 ] -Uplifting [gfx_mode] best 12560154 combination reg byte x [ gfx_mode::cx#2 gfx_mode::cx#1 ] +Uplifting [gfx_mode] best 12557154 combination reg byte x [ gfx_mode::cx#2 gfx_mode::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] -Uplifting [gfx_init_plane_charset8] best 12551154 combination reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] +Uplifting [gfx_init_plane_charset8] best 12548154 combination reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] -Uplifting [gfx_init_plane_charset8] best 12551154 combination zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] +Uplifting [gfx_init_plane_charset8] best 12548154 combination zp ZP_BYTE:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] -Uplifting [gfx_init_plane_charset8] best 12551154 combination zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] +Uplifting [gfx_init_plane_charset8] best 12548154 combination zp ZP_BYTE:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] -Uplifting [bitmap_line_xdyi] best 12551154 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] +Uplifting [bitmap_line_xdyi] best 12548154 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] -Uplifting [bitmap_line_ydxi] best 12551154 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] +Uplifting [bitmap_line_ydxi] best 12548154 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] -Uplifting [bitmap_line_xdyd] best 12551154 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] +Uplifting [bitmap_line_xdyd] best 12548154 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] -Uplifting [bitmap_line_ydxd] best 12551154 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:11 [ gfx_mode::j#2 gfx_mode::j#1 ] -Uplifting [gfx_mode] best 12549954 combination reg byte x [ gfx_mode::j#2 gfx_mode::j#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:12 [ gfx_mode::i#2 gfx_mode::i#1 ] -Uplifting [gfx_mode] best 12548754 combination reg byte x [ gfx_mode::i#2 gfx_mode::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] -Uplifting [] best 12548754 combination zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] -Uplifting [bitmap_line_xdyi] best 12548754 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] -Uplifting [bitmap_line_xdyd] best 12548754 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] +Uplifting [bitmap_line_ydxd] best 12548154 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] -Uplifting [form_mode] best 12548754 combination zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] +Uplifting [form_mode] best 12548154 combination zp ZP_BYTE:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:11 [ gfx_mode::j#2 gfx_mode::j#1 ] +Uplifting [gfx_mode] best 12546954 combination reg byte x [ gfx_mode::j#2 gfx_mode::j#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:12 [ gfx_mode::i#2 gfx_mode::i#1 ] +Uplifting [gfx_mode] best 12545754 combination reg byte x [ gfx_mode::i#2 gfx_mode::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] +Uplifting [] best 12545754 combination zp ZP_BYTE:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] +Uplifting [bitmap_line_xdyi] best 12545754 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] +Uplifting [bitmap_line_xdyd] best 12545754 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:238 [ gfx_mode::keyboard_event#0 ] -Uplifting [gfx_mode] best 12548154 combination reg byte a [ gfx_mode::keyboard_event#0 ] +Uplifting [gfx_mode] best 12545154 combination reg byte a [ gfx_mode::keyboard_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:274 [ form_set_screen::$1 ] -Uplifting [form_set_screen] best 12547554 combination reg byte a [ form_set_screen::$1 ] +Uplifting [form_set_screen] best 12544554 combination reg byte a [ form_set_screen::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:331 [ gfx_init_screen3::$3 ] -Uplifting [gfx_init_screen3] best 12546954 combination reg byte a [ gfx_init_screen3::$3 ] +Uplifting [gfx_init_screen3] best 12543954 combination reg byte a [ gfx_init_screen3::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:336 [ gfx_init_screen2::$4 ] -Uplifting [gfx_init_screen2] best 12546354 combination reg byte a [ gfx_init_screen2::$4 ] +Uplifting [gfx_init_screen2] best 12543354 combination reg byte a [ gfx_init_screen2::$4 ] Attempting to uplift remaining variables inzp ZP_BYTE:338 [ gfx_init_screen1::$1 ] -Uplifting [gfx_init_screen1] best 12545754 combination reg byte a [ gfx_init_screen1::$1 ] +Uplifting [gfx_init_screen1] best 12542754 combination reg byte a [ gfx_init_screen1::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:342 [ gfx_init_screen0::$3 ] -Uplifting [gfx_init_screen0] best 12545154 combination reg byte a [ gfx_init_screen0::$3 ] +Uplifting [gfx_init_screen0] best 12542154 combination reg byte a [ gfx_init_screen0::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] -Uplifting [gfx_init_screen3] best 12544154 combination reg byte x [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] +Uplifting [gfx_init_screen3] best 12541154 combination reg byte x [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] -Uplifting [gfx_init_screen0] best 12543154 combination reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] +Uplifting [gfx_init_screen0] best 12540154 combination reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] -Uplifting [gfx_init_plane_horisontal2] best 12542254 combination reg byte x [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] +Uplifting [gfx_init_plane_horisontal2] best 12539254 combination reg byte x [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] -Uplifting [gfx_init_screen2] best 12541254 combination reg byte x [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] +Uplifting [gfx_init_screen2] best 12538254 combination reg byte x [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] -Uplifting [gfx_mode] best 12541254 combination zp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] +Uplifting [gfx_mode] best 12538254 combination zp ZP_BYTE:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] -Uplifting [gfx_init_plane_charset8] best 12541254 combination zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] +Uplifting [gfx_init_plane_charset8] best 12538254 combination zp ZP_BYTE:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:333 [ gfx_init_screen2::col#0 ] -Uplifting [gfx_init_screen2] best 12541154 combination reg byte y [ gfx_init_screen2::col#0 ] +Uplifting [gfx_init_screen2] best 12538154 combination reg byte y [ gfx_init_screen2::col#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] -Uplifting [bitmap_line_xdyi] best 12541154 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] +Uplifting [bitmap_line_xdyi] best 12538154 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] -Uplifting [bitmap_line_ydxi] best 12541154 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] +Uplifting [bitmap_line_ydxi] best 12538154 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] -Uplifting [bitmap_line_xdyd] best 12541154 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] +Uplifting [bitmap_line_xdyd] best 12538154 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -Uplifting [bitmap_line_ydxd] best 12541154 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] +Uplifting [bitmap_line_ydxd] best 12538154 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] -Uplifting [] best 12541154 combination zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] +Uplifting [] best 12538154 combination zp ZP_BYTE:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:329 [ gfx_init_screen3::$1 ] -Uplifting [gfx_init_screen3] best 12541154 combination zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] +Uplifting [gfx_init_screen3] best 12538154 combination zp ZP_BYTE:329 [ gfx_init_screen3::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] -Uplifting [gfx_init_screen2] best 12541154 combination zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] +Uplifting [gfx_init_screen2] best 12538154 combination zp ZP_BYTE:334 [ gfx_init_screen2::col2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:340 [ gfx_init_screen0::$1 ] -Uplifting [gfx_init_screen0] best 12541154 combination zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] +Uplifting [gfx_init_screen0] best 12538154 combination zp ZP_BYTE:340 [ gfx_init_screen0::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] -Uplifting [gfx_mode] best 12541135 combination reg byte x [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] +Uplifting [gfx_mode] best 12538135 combination reg byte x [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:265 [ form_field_ptr::x#0 ] -Uplifting [form_field_ptr] best 12541135 combination zp ZP_BYTE:265 [ form_field_ptr::x#0 ] +Uplifting [form_field_ptr] best 12538135 combination zp ZP_BYTE:265 [ form_field_ptr::x#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] -Uplifting [gfx_init_plane_horisontal2] best 12541135 combination zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] +Uplifting [gfx_init_plane_horisontal2] best 12538135 combination zp ZP_BYTE:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] -Uplifting [gfx_init_screen1] best 12541135 combination zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] +Uplifting [gfx_init_screen1] best 12538135 combination zp ZP_BYTE:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] -Uplifting [gfx_init_screen3] best 12541135 combination zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] +Uplifting [gfx_init_screen3] best 12538135 combination zp ZP_BYTE:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] -Uplifting [gfx_init_screen0] best 12541135 combination zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] +Uplifting [gfx_init_screen0] best 12538135 combination zp ZP_BYTE:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] -Uplifting [gfx_init_plane_horisontal] best 12541135 combination zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] +Uplifting [gfx_init_plane_horisontal] best 12538135 combination zp ZP_BYTE:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] -Uplifting [gfx_init_screen2] best 12541135 combination zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] +Uplifting [gfx_init_screen2] best 12538135 combination zp ZP_BYTE:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] -Uplifting [gfx_init_vic_bitmap] best 12541135 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] +Uplifting [gfx_init_vic_bitmap] best 12538135 combination zp ZP_BYTE:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] -Uplifting [gfx_init_plane_8bppchunky] best 12541135 combination zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] +Uplifting [gfx_init_plane_8bppchunky] best 12538135 combination zp ZP_BYTE:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] -Uplifting [bitmap_init] best 12540955 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] +Uplifting [bitmap_init] best 12537955 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:323 [ bitmap_init::$0 ] -Uplifting [bitmap_init] best 12540915 combination reg byte a [ bitmap_init::$0 ] +Uplifting [bitmap_init] best 12537915 combination reg byte a [ bitmap_init::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:325 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 12540855 combination reg byte a [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 12537855 combination reg byte a [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:326 [ bitmap_init::$8 ] -Uplifting [bitmap_init] best 12540795 combination reg byte a [ bitmap_init::$8 ] +Uplifting [bitmap_init] best 12537795 combination reg byte a [ bitmap_init::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:327 [ bitmap_init::$9 ] -Uplifting [bitmap_init] best 12540735 combination reg byte a [ bitmap_init::$9 ] +Uplifting [bitmap_init] best 12537735 combination reg byte a [ bitmap_init::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] -Uplifting [gfx_init_plane_fill] best 12540735 combination zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] +Uplifting [gfx_init_plane_fill] best 12537735 combination zp ZP_BYTE:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] -Uplifting [gfx_init_plane_vertical] best 12540735 combination zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] +Uplifting [gfx_init_plane_vertical] best 12537735 combination zp ZP_BYTE:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Uplifting [bitmap_clear] best 12540735 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Uplifting [bitmap_clear] best 12537735 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] -Uplifting [gfx_init_screen4] best 12540735 combination zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] +Uplifting [gfx_init_screen4] best 12537735 combination zp ZP_BYTE:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] -Uplifting [gfx_init_charset] best 12540735 combination zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] +Uplifting [gfx_init_charset] best 12537735 combination zp ZP_BYTE:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] -Uplifting [bitmap_line_xdyi] best 12540735 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] +Uplifting [bitmap_line_xdyi] best 12537735 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] -Uplifting [bitmap_line_ydxi] best 12540735 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] +Uplifting [bitmap_line_ydxi] best 12537735 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] -Uplifting [bitmap_line_xdyd] best 12540735 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] +Uplifting [bitmap_line_xdyd] best 12537735 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] -Uplifting [bitmap_line_ydxd] best 12540735 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] +Uplifting [bitmap_line_ydxd] best 12537735 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] -Uplifting [gfx_init_plane_charset8] best 12540735 combination zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] +Uplifting [gfx_init_plane_charset8] best 12537735 combination zp ZP_BYTE:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] -Uplifting [bitmap_line_xdyi] best 12540735 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] +Uplifting [bitmap_line_xdyi] best 12537735 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] -Uplifting [bitmap_line_ydxi] best 12540735 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] +Uplifting [bitmap_line_ydxi] best 12537735 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] -Uplifting [bitmap_line_xdyd] best 12540735 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] +Uplifting [bitmap_line_xdyd] best 12537735 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] -Uplifting [bitmap_line_ydxd] best 12540735 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] +Uplifting [bitmap_line_ydxd] best 12537735 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] -Uplifting [gfx_mode] best 12540724 combination reg byte x [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] +Uplifting [gfx_mode] best 12537724 combination reg byte x [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Uplifting [bitmap_line_xdyi] best 12540724 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 12537724 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] -Uplifting [bitmap_line_ydxi] best 12540724 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 12537724 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] -Uplifting [bitmap_line_xdyd] best 12540724 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 12537724 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] -Uplifting [bitmap_line_ydxd] best 12540724 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 12537724 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] -Uplifting [gfx_init_plane_fill] best 12540724 combination zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] +Uplifting [gfx_init_plane_fill] best 12537724 combination zp ZP_BYTE:62 [ gfx_init_plane_fill::fill#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:324 [ bitmap_init::$10 ] -Uplifting [bitmap_init] best 12540724 combination zp ZP_BYTE:324 [ bitmap_init::$10 ] +Uplifting [bitmap_init] best 12537724 combination zp ZP_BYTE:324 [ bitmap_init::$10 ] Attempting to uplift remaining variables inzp ZP_BYTE:158 [ gfx_mode::$20 ] -Uplifting [gfx_mode] best 12540718 combination reg byte a [ gfx_mode::$20 ] +Uplifting [gfx_mode] best 12537718 combination reg byte a [ gfx_mode::$20 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ gfx_mode::$25 ] -Uplifting [gfx_mode] best 12540712 combination reg byte a [ gfx_mode::$25 ] +Uplifting [gfx_mode] best 12537712 combination reg byte a [ gfx_mode::$25 ] Attempting to uplift remaining variables inzp ZP_BYTE:175 [ gfx_mode::$27 ] -Uplifting [gfx_mode] best 12540706 combination reg byte a [ gfx_mode::$27 ] +Uplifting [gfx_mode] best 12537706 combination reg byte a [ gfx_mode::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ gfx_mode::$29 ] -Uplifting [gfx_mode] best 12540700 combination reg byte a [ gfx_mode::$29 ] +Uplifting [gfx_mode] best 12537700 combination reg byte a [ gfx_mode::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:179 [ gfx_mode::$30 ] -Uplifting [gfx_mode] best 12540694 combination reg byte a [ gfx_mode::$30 ] +Uplifting [gfx_mode] best 12537694 combination reg byte a [ gfx_mode::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:180 [ gfx_mode::$31 ] -Uplifting [gfx_mode] best 12540688 combination reg byte a [ gfx_mode::$31 ] +Uplifting [gfx_mode] best 12537688 combination reg byte a [ gfx_mode::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:181 [ gfx_mode::$32 ] -Uplifting [gfx_mode] best 12540682 combination reg byte a [ gfx_mode::$32 ] +Uplifting [gfx_mode] best 12537682 combination reg byte a [ gfx_mode::$32 ] Attempting to uplift remaining variables inzp ZP_BYTE:182 [ gfx_mode::$33 ] -Uplifting [gfx_mode] best 12540676 combination reg byte a [ gfx_mode::$33 ] +Uplifting [gfx_mode] best 12537676 combination reg byte a [ gfx_mode::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:183 [ gfx_mode::$34 ] -Uplifting [gfx_mode] best 12540670 combination reg byte a [ gfx_mode::$34 ] +Uplifting [gfx_mode] best 12537670 combination reg byte a [ gfx_mode::$34 ] Attempting to uplift remaining variables inzp ZP_BYTE:199 [ gfx_mode::$39 ] -Uplifting [gfx_mode] best 12540664 combination reg byte a [ gfx_mode::$39 ] +Uplifting [gfx_mode] best 12537664 combination reg byte a [ gfx_mode::$39 ] Attempting to uplift remaining variables inzp ZP_BYTE:200 [ gfx_mode::$41 ] -Uplifting [gfx_mode] best 12540658 combination reg byte a [ gfx_mode::$41 ] +Uplifting [gfx_mode] best 12537658 combination reg byte a [ gfx_mode::$41 ] Attempting to uplift remaining variables inzp ZP_BYTE:203 [ gfx_mode::$43 ] -Uplifting [gfx_mode] best 12540652 combination reg byte a [ gfx_mode::$43 ] +Uplifting [gfx_mode] best 12537652 combination reg byte a [ gfx_mode::$43 ] Attempting to uplift remaining variables inzp ZP_BYTE:204 [ gfx_mode::$44 ] -Uplifting [gfx_mode] best 12540646 combination reg byte a [ gfx_mode::$44 ] +Uplifting [gfx_mode] best 12537646 combination reg byte a [ gfx_mode::$44 ] Attempting to uplift remaining variables inzp ZP_BYTE:205 [ gfx_mode::$45 ] -Uplifting [gfx_mode] best 12540640 combination reg byte a [ gfx_mode::$45 ] +Uplifting [gfx_mode] best 12537640 combination reg byte a [ gfx_mode::$45 ] Attempting to uplift remaining variables inzp ZP_BYTE:206 [ gfx_mode::$46 ] -Uplifting [gfx_mode] best 12540634 combination reg byte a [ gfx_mode::$46 ] +Uplifting [gfx_mode] best 12537634 combination reg byte a [ gfx_mode::$46 ] Attempting to uplift remaining variables inzp ZP_BYTE:207 [ gfx_mode::$47 ] -Uplifting [gfx_mode] best 12540628 combination reg byte a [ gfx_mode::$47 ] +Uplifting [gfx_mode] best 12537628 combination reg byte a [ gfx_mode::$47 ] Attempting to uplift remaining variables inzp ZP_BYTE:224 [ gfx_mode::$60 ] -Uplifting [gfx_mode] best 12540622 combination reg byte a [ gfx_mode::$60 ] +Uplifting [gfx_mode] best 12537622 combination reg byte a [ gfx_mode::$60 ] Attempting to uplift remaining variables inzp ZP_BYTE:225 [ gfx_mode::$61 ] -Uplifting [gfx_mode] best 12540616 combination reg byte a [ gfx_mode::$61 ] +Uplifting [gfx_mode] best 12537616 combination reg byte a [ gfx_mode::$61 ] Attempting to uplift remaining variables inzp ZP_BYTE:226 [ gfx_mode::$62 ] -Uplifting [gfx_mode] best 12540610 combination reg byte a [ gfx_mode::$62 ] +Uplifting [gfx_mode] best 12537610 combination reg byte a [ gfx_mode::$62 ] Attempting to uplift remaining variables inzp ZP_BYTE:229 [ gfx_mode::$64 ] -Uplifting [gfx_mode] best 12540604 combination reg byte a [ gfx_mode::$64 ] +Uplifting [gfx_mode] best 12537604 combination reg byte a [ gfx_mode::$64 ] Attempting to uplift remaining variables inzp ZP_BYTE:230 [ gfx_mode::$65 ] -Uplifting [gfx_mode] best 12540598 combination reg byte a [ gfx_mode::$65 ] +Uplifting [gfx_mode] best 12537598 combination reg byte a [ gfx_mode::$65 ] Attempting to uplift remaining variables inzp ZP_BYTE:231 [ gfx_mode::$66 ] -Uplifting [gfx_mode] best 12540592 combination reg byte a [ gfx_mode::$66 ] +Uplifting [gfx_mode] best 12537592 combination reg byte a [ gfx_mode::$66 ] Attempting to uplift remaining variables inzp ZP_BYTE:232 [ gfx_mode::$67 ] -Uplifting [gfx_mode] best 12540586 combination reg byte a [ gfx_mode::$67 ] +Uplifting [gfx_mode] best 12537586 combination reg byte a [ gfx_mode::$67 ] Attempting to uplift remaining variables inzp ZP_BYTE:233 [ gfx_mode::$68 ] -Uplifting [gfx_mode] best 12540580 combination reg byte a [ gfx_mode::$68 ] +Uplifting [gfx_mode] best 12537580 combination reg byte a [ gfx_mode::$68 ] Attempting to uplift remaining variables inzp ZP_BYTE:234 [ gfx_mode::$69 ] -Uplifting [gfx_mode] best 12540574 combination reg byte a [ gfx_mode::$69 ] +Uplifting [gfx_mode] best 12537574 combination reg byte a [ gfx_mode::$69 ] Attempting to uplift remaining variables inzp ZP_BYTE:235 [ gfx_mode::$70 ] -Uplifting [gfx_mode] best 12540568 combination reg byte a [ gfx_mode::$70 ] +Uplifting [gfx_mode] best 12537568 combination reg byte a [ gfx_mode::$70 ] Attempting to uplift remaining variables inzp ZP_BYTE:236 [ gfx_mode::$71 ] -Uplifting [gfx_mode] best 12540562 combination reg byte a [ gfx_mode::$71 ] +Uplifting [gfx_mode] best 12537562 combination reg byte a [ gfx_mode::$71 ] Attempting to uplift remaining variables inzp ZP_BYTE:243 [ keyboard_event_scan::$0 ] -Uplifting [keyboard_event_scan] best 12540556 combination reg byte a [ keyboard_event_scan::$0 ] +Uplifting [keyboard_event_scan] best 12537556 combination reg byte a [ keyboard_event_scan::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:245 [ keyboard_event_scan::$3 ] -Uplifting [keyboard_event_scan] best 12540550 combination reg byte a [ keyboard_event_scan::$3 ] +Uplifting [keyboard_event_scan] best 12537550 combination reg byte a [ keyboard_event_scan::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:246 [ keyboard_event_pressed::return#2 ] -Uplifting [keyboard_event_pressed] best 12540544 combination reg byte a [ keyboard_event_pressed::return#2 ] +Uplifting [keyboard_event_pressed] best 12537544 combination reg byte a [ keyboard_event_pressed::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:247 [ keyboard_event_scan::$6 ] -Uplifting [keyboard_event_scan] best 12540538 combination reg byte a [ keyboard_event_scan::$6 ] +Uplifting [keyboard_event_scan] best 12537538 combination reg byte a [ keyboard_event_scan::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:248 [ keyboard_event_pressed::return#3 ] -Uplifting [keyboard_event_pressed] best 12540532 combination reg byte a [ keyboard_event_pressed::return#3 ] +Uplifting [keyboard_event_pressed] best 12537532 combination reg byte a [ keyboard_event_pressed::return#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:249 [ keyboard_event_scan::$9 ] -Uplifting [keyboard_event_scan] best 12540526 combination reg byte a [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 12537526 combination reg byte a [ keyboard_event_scan::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:254 [ keyboard_event_pressed::$0 ] -Uplifting [keyboard_event_pressed] best 12540522 combination reg byte a [ keyboard_event_pressed::$0 ] +Uplifting [keyboard_event_pressed] best 12537522 combination reg byte a [ keyboard_event_pressed::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:256 [ keyboard_event_pressed::$1 ] -Uplifting [keyboard_event_pressed] best 12540518 combination reg byte a [ keyboard_event_pressed::$1 ] +Uplifting [keyboard_event_pressed] best 12537518 combination reg byte a [ keyboard_event_pressed::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:266 [ form_control::$13 ] -Uplifting [form_control] best 12540512 combination reg byte a [ form_control::$13 ] +Uplifting [form_control] best 12537512 combination reg byte a [ form_control::$13 ] Attempting to uplift remaining variables inzp ZP_BYTE:267 [ keyboard_event_get::return#4 ] -Uplifting [keyboard_event_get] best 12540506 combination reg byte a [ keyboard_event_get::return#4 ] +Uplifting [keyboard_event_get] best 12537506 combination reg byte a [ keyboard_event_get::return#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:269 [ form_control::$15 ] -Uplifting [form_control] best 12540500 combination reg byte a [ form_control::$15 ] +Uplifting [form_control] best 12537500 combination reg byte a [ form_control::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:270 [ form_control::$16 ] -Uplifting [form_control] best 12540496 combination reg byte a [ form_control::$16 ] +Uplifting [form_control] best 12537496 combination reg byte a [ form_control::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:271 [ form_control::$24 ] -Uplifting [form_control] best 12540492 combination reg byte a [ form_control::$24 ] +Uplifting [form_control] best 12537492 combination reg byte a [ form_control::$24 ] Attempting to uplift remaining variables inzp ZP_BYTE:272 [ form_control::$14 ] -Uplifting [form_control] best 12540486 combination reg byte a [ form_control::$14 ] +Uplifting [form_control] best 12537486 combination reg byte a [ form_control::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:317 [ bitmap_plot::$1 ] -Uplifting [bitmap_plot] best 12540480 combination reg byte a [ bitmap_plot::$1 ] +Uplifting [bitmap_plot] best 12537480 combination reg byte a [ bitmap_plot::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:268 [ form_control::key_event#0 ] -Uplifting [form_control] best 12540468 combination reg byte a [ form_control::key_event#0 ] +Uplifting [form_control] best 12537468 combination reg byte a [ form_control::key_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ gfx_mode::vic_control2#2 ] -Uplifting [gfx_mode] best 12540459 combination reg byte a [ gfx_mode::vic_control2#2 ] +Uplifting [gfx_mode] best 12537459 combination reg byte a [ gfx_mode::vic_control2#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] -Uplifting [keyboard_event_pressed] best 12540459 combination zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] +Uplifting [keyboard_event_pressed] best 12537459 combination zp ZP_BYTE:255 [ keyboard_event_pressed::row_bits#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:303 [ bitmap_line::y1#0 ] -Uplifting [bitmap_line] best 12540459 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] +Uplifting [bitmap_line] best 12537459 combination zp ZP_BYTE:303 [ bitmap_line::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:302 [ bitmap_line::y0#0 ] -Uplifting [bitmap_line] best 12540459 combination zp ZP_BYTE:302 [ bitmap_line::y0#0 ] +Uplifting [bitmap_line] best 12537459 combination zp ZP_BYTE:302 [ bitmap_line::y0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:257 [ keyboard_event_pressed::return#10 ] -Uplifting [keyboard_event_pressed] best 12540444 combination reg byte a [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 12537444 combination reg byte a [ keyboard_event_pressed::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] -Uplifting [keyboard_event_pressed] best 12540444 combination zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] +Uplifting [keyboard_event_pressed] best 12537444 combination zp ZP_BYTE:19 [ keyboard_event_pressed::keycode#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:300 [ bitmap_line::x0#0 ] -Uplifting [bitmap_line] best 12540444 combination zp ZP_BYTE:300 [ bitmap_line::x0#0 ] +Uplifting [bitmap_line] best 12537444 combination zp ZP_BYTE:300 [ bitmap_line::x0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:305 [ bitmap_line::yd#2 ] -Uplifting [bitmap_line] best 12540434 combination reg byte y [ bitmap_line::yd#2 ] +Uplifting [bitmap_line] best 12537434 combination reg byte y [ bitmap_line::yd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:306 [ bitmap_line::yd#1 ] -Uplifting [bitmap_line] best 12540424 combination reg byte y [ bitmap_line::yd#1 ] +Uplifting [bitmap_line] best 12537424 combination reg byte y [ bitmap_line::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:308 [ bitmap_line::yd#10 ] -Uplifting [bitmap_line] best 12540414 combination reg byte y [ bitmap_line::yd#10 ] +Uplifting [bitmap_line] best 12537414 combination reg byte y [ bitmap_line::yd#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:309 [ bitmap_line::yd#11 ] -Uplifting [bitmap_line] best 12540404 combination reg byte y [ bitmap_line::yd#11 ] +Uplifting [bitmap_line] best 12537404 combination reg byte y [ bitmap_line::yd#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:159 [ gfx_mode::plane_a_offs#0 ] -Uplifting [gfx_mode] best 12540402 combination reg byte x [ gfx_mode::plane_a_offs#0 ] +Uplifting [gfx_mode] best 12537402 combination reg byte x [ gfx_mode::plane_a_offs#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:184 [ gfx_mode::plane_b_offs#0 ] -Uplifting [gfx_mode] best 12540400 combination reg byte x [ gfx_mode::plane_b_offs#0 ] +Uplifting [gfx_mode] best 12537400 combination reg byte x [ gfx_mode::plane_b_offs#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:304 [ bitmap_line::xd#2 ] -Uplifting [bitmap_line] best 12540400 combination zp ZP_BYTE:304 [ bitmap_line::xd#2 ] +Uplifting [bitmap_line] best 12537400 combination zp ZP_BYTE:304 [ bitmap_line::xd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:307 [ bitmap_line::xd#1 ] -Uplifting [bitmap_line] best 12540400 combination zp ZP_BYTE:307 [ bitmap_line::xd#1 ] +Uplifting [bitmap_line] best 12537400 combination zp ZP_BYTE:307 [ bitmap_line::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:216 [ gfx_mode::$56 ] -Uplifting [gfx_mode] best 12540400 combination zp ZP_BYTE:216 [ gfx_mode::$56 ] +Uplifting [gfx_mode] best 12537400 combination zp ZP_BYTE:216 [ gfx_mode::$56 ] Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 ] ] with [ zp ZP_WORD:227 [ get_vic_screen::return#11 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ get_vic_screen::return#5 ] ] with [ zp ZP_WORD:208 [ get_vic_screen::return#10 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ get_vic_charset::return#2 ] ] with [ zp ZP_WORD:218 [ get_vic_charset::return#4 ] ] - score: 1 @@ -24396,21 +24325,16 @@ form_mode: { // [288] (byte) form_mode::preset_current#0 ← *((const byte[]) form_fields_val#0) -- vbuz1=_deref_pbuc1 lda form_fields_val sta preset_current - // [289] phi from form_mode::@19 form_mode::@2 to form_mode::@3 [phi:form_mode::@19/form_mode::@2->form_mode::@3] + // [289] phi from form_mode::@19 form_mode::@2 form_mode::@6 to form_mode::@3 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3] b3_from_b19: b3_from_b2: - // [289] phi (byte) form_mode::preset_current#6 = (byte) form_mode::preset_current#1 [phi:form_mode::@19/form_mode::@2->form_mode::@3#0] -- register_copy - // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@19/form_mode::@2->form_mode::@3#1] -- register_copy - // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@19/form_mode::@2->form_mode::@3#2] -- register_copy - // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@19/form_mode::@2->form_mode::@3#3] -- register_copy + b3_from_b6: + // [289] phi (byte) form_mode::preset_current#6 = (byte) form_mode::preset_current#1 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#0] -- register_copy + // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#1] -- register_copy + // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#2] -- register_copy + // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#3] -- register_copy jmp b3 // Let the user change values in the form - // [289] phi from form_mode::@6 to form_mode::@3 [phi:form_mode::@6->form_mode::@3] - b3_from_b6: - // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@6->form_mode::@3#0] -- register_copy - // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@6->form_mode::@3#1] -- register_copy - // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@6->form_mode::@3#2] -- register_copy - jmp b3 // form_mode::@3 b3: jmp b4 @@ -28181,9 +28105,7 @@ Replacing label breturn_from_get_vic_charset with b1 Replacing label b1_from_b2 with b1 Replacing label b1_from_b14 with b1 Replacing label b1_from_b1 with b1 -Replacing label b3 with b4 -Replacing label b3_from_b6 with b4 -Replacing label b3_from_b19 with b3_from_b2 +Replacing label b3_from_b19 with b3_from_b6 Replacing label b2_from_render_preset_name with b2_from_b12 Replacing label b1_from_b12 with b1 Replacing label b1_from_b2 with b1 @@ -28327,7 +28249,7 @@ Removing instruction b14_from_b13: Removing instruction form_render_values_from_b14: Removing instruction b1_from_b1: Removing instruction b3_from_b19: -Removing instruction b3_from_b6: +Removing instruction b3_from_b2: Removing instruction b3: Removing instruction b5_from_b4: Removing instruction b2_from_render_preset_name: @@ -28777,7 +28699,6 @@ Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn -Skipping double jump to b4 in jmp b3_from_b2 Skipping double jump to b14 in bne b23 Replacing jump to rts with rts in jmp breturn Skipping double jump to breturn_from_b6 in bne b6 @@ -28814,7 +28735,7 @@ Relabelling long label breturn_from_b6 to b11 Relabelling long label breturn_from_b7 to b12 Relabelling long label breturn_from_b8 to b13 Relabelling long label breturn_from_b9 to b14 -Relabelling long label b3_from_b2 to b2 +Relabelling long label b3_from_b6 to b2 Relabelling long label b2_from_b12 to b3 Relabelling long label b2_from_b10 to b4 Relabelling long label b2_from_b11 to b5 @@ -28844,7 +28765,6 @@ Removing instruction jmp b23 Removing instruction jmp b24 Removing instruction jmp b7 Removing instruction jmp b1 -Removing instruction jmp b4 Removing instruction jmp b1 Removing instruction jmp b13 Removing instruction jmp b1 @@ -28896,7 +28816,6 @@ Removing instruction b5: Removing instruction breturn: Removing instruction breturn: Removing instruction breturn: -Removing instruction b2: Removing instruction breturn: Removing instruction b23: Removing instruction b6: @@ -28914,7 +28833,7 @@ Fixing long branch [722] beq b11 to bne Fixing long branch [726] beq b12 to bne Fixing long branch [730] beq b13 to bne Fixing long branch [734] beq b14 to bne -Fixing long branch [1281] bmi b2 to bpl +Fixing long branch [1282] bmi b2 to bpl FINAL SYMBOL TABLE (label) @1 @@ -29519,7 +29438,7 @@ FINAL SYMBOL TABLE (byte) form_mode::preset_current (byte) form_mode::preset_current#0 preset_current zp ZP_BYTE:19 4.0 (byte) form_mode::preset_current#1 preset_current zp ZP_BYTE:19 50.5 -(byte) form_mode::preset_current#6 preset_current zp ZP_BYTE:19 157.71428571428572 +(byte) form_mode::preset_current#6 preset_current zp ZP_BYTE:19 388.25 (byte*) form_preset (void()) form_render_values() (label) form_render_values::@1 @@ -32226,16 +32145,13 @@ form_mode: { // [288] (byte) form_mode::preset_current#0 ← *((const byte[]) form_fields_val#0) -- vbuz1=_deref_pbuc1 lda form_fields_val sta preset_current - // [289] phi from form_mode::@19 form_mode::@2 to form_mode::@3 [phi:form_mode::@19/form_mode::@2->form_mode::@3] - // [289] phi (byte) form_mode::preset_current#6 = (byte) form_mode::preset_current#1 [phi:form_mode::@19/form_mode::@2->form_mode::@3#0] -- register_copy - // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@19/form_mode::@2->form_mode::@3#1] -- register_copy - // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@19/form_mode::@2->form_mode::@3#2] -- register_copy - // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@19/form_mode::@2->form_mode::@3#3] -- register_copy + // [289] phi from form_mode::@19 form_mode::@2 form_mode::@6 to form_mode::@3 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3] + b2: + // [289] phi (byte) form_mode::preset_current#6 = (byte) form_mode::preset_current#1 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#0] -- register_copy + // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#1] -- register_copy + // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#2] -- register_copy + // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@19/form_mode::@2/form_mode::@6->form_mode::@3#3] -- register_copy // Let the user change values in the form - // [289] phi from form_mode::@6 to form_mode::@3 [phi:form_mode::@6->form_mode::@3] - // [289] phi (byte) form_field_idx#28 = (byte) form_field_idx#18 [phi:form_mode::@6->form_mode::@3#0] -- register_copy - // [289] phi (byte) keyboard_events_size#47 = (byte) keyboard_events_size#24 [phi:form_mode::@6->form_mode::@3#1] -- register_copy - // [289] phi (signed byte) form_cursor_count#21 = (signed byte) form_cursor_count#16 [phi:form_mode::@6->form_mode::@3#2] -- register_copy // form_mode::@3 // form_mode::@4 b4: @@ -32267,7 +32183,7 @@ form_mode: { // [297] if((byte) form_mode::preset_current#6==*((const byte[]) form_fields_val#0)) goto form_mode::@3 -- vbuz1_eq__deref_pbuc1_then_la1 lda form_fields_val cmp preset_current - beq b4 + beq b2 // form_mode::@7 // apply_preset(*form_preset) // [298] (byte) apply_preset::idx#0 ← *((const byte[]) form_fields_val#0) -- vbuaa=_deref_pbuc1 @@ -32290,7 +32206,7 @@ form_mode: { // [304] phi from form_mode::@19 to render_preset_name [phi:form_mode::@19->render_preset_name] // [304] phi (byte) render_preset_name::idx#10 = (byte) render_preset_name::idx#1 [phi:form_mode::@19->render_preset_name#0] -- register_copy jsr render_preset_name - jmp b4 + jmp b2 } // render_preset_name // Render form preset name in the form diff --git a/src/test/ref/c64dtv-gfxexplorer.sym b/src/test/ref/c64dtv-gfxexplorer.sym index e75d1062b..ee7f89859 100644 --- a/src/test/ref/c64dtv-gfxexplorer.sym +++ b/src/test/ref/c64dtv-gfxexplorer.sym @@ -600,7 +600,7 @@ (byte) form_mode::preset_current (byte) form_mode::preset_current#0 preset_current zp ZP_BYTE:19 4.0 (byte) form_mode::preset_current#1 preset_current zp ZP_BYTE:19 50.5 -(byte) form_mode::preset_current#6 preset_current zp ZP_BYTE:19 157.71428571428572 +(byte) form_mode::preset_current#6 preset_current zp ZP_BYTE:19 388.25 (byte*) form_preset (void()) form_render_values() (label) form_render_values::@1 diff --git a/src/test/ref/c64dtv-gfxmodes.cfg b/src/test/ref/c64dtv-gfxmodes.cfg index b9ec69702..7b6b639e1 100644 --- a/src/test/ref/c64dtv-gfxmodes.cfg +++ b/src/test/ref/c64dtv-gfxmodes.cfg @@ -281,7 +281,7 @@ mode_ctrl: scope:[mode_ctrl] from mode_8bppchunkybmm::@10 mode_8bpppixelcell::@ [155] (byte) dtv_control#144 ← phi( mode_8bppchunkybmm::@10/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0 mode_8bpppixelcell::@13/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0 mode_ecmchar::@6/(byte) 0 mode_hicolecmchar::@6/(const byte) DTV_HIGHCOLOR#0 mode_hicolmcchar::@6/(const byte) DTV_HIGHCOLOR#0 mode_hicolstdchar::@6/(const byte) DTV_HIGHCOLOR#0 mode_mcchar::@6/(byte) 0 mode_sixsfred2::@12/(const byte) DTV_LINEAR#0 mode_sixsfred::@12/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 mode_stdbitmap::@8/(byte) 0 mode_stdchar::@6/(byte) 0 mode_twoplanebitmap::@15/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 ) to:mode_ctrl::@1 mode_ctrl::@1: scope:[mode_ctrl] from mode_ctrl mode_ctrl::@11 mode_ctrl::@18 - [156] (byte) dtv_control#114 ← phi( mode_ctrl/(byte) dtv_control#144 mode_ctrl::@18/(byte) dtv_control#17 ) + [156] (byte) dtv_control#114 ← phi( mode_ctrl/(byte) dtv_control#144 mode_ctrl::@11/(byte) dtv_control#114 mode_ctrl::@18/(byte) dtv_control#17 ) to:mode_ctrl::@2 mode_ctrl::@2: scope:[mode_ctrl] from mode_ctrl::@1 mode_ctrl::@2 [157] if(*((const byte*) RASTER#0)!=(byte) $ff) goto mode_ctrl::@2 diff --git a/src/test/ref/c64dtv-gfxmodes.log b/src/test/ref/c64dtv-gfxmodes.log index cfc6e53a2..10ee0ca48 100644 --- a/src/test/ref/c64dtv-gfxmodes.log +++ b/src/test/ref/c64dtv-gfxmodes.log @@ -8136,92 +8136,6 @@ Alias (word) mode_8bppchunkybmm::x#2 = (word) mode_8bppchunkybmm::x#3 Alias (byte) mode_8bppchunkybmm::y#2 = (byte) mode_8bppchunkybmm::y#4 Alias (byte) dtv_control#128 = (byte) dtv_control#216 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_line_cursor#30 -Self Phi Eliminated (byte*) print_char_cursor#20 -Self Phi Eliminated (byte*) bitmap_init::bitmap#1 -Self Phi Eliminated (byte) bitmap_clear::y#2 -Self Phi Eliminated (byte) bitmap_line_xdyi::yd#3 -Self Phi Eliminated (byte) bitmap_line_xdyi::xd#2 -Self Phi Eliminated (byte) bitmap_line_xdyi::x1#2 -Self Phi Eliminated (byte) bitmap_line_xdyd::yd#3 -Self Phi Eliminated (byte) bitmap_line_xdyd::xd#2 -Self Phi Eliminated (byte) bitmap_line_xdyd::x1#2 -Self Phi Eliminated (byte) bitmap_line_ydxi::xd#3 -Self Phi Eliminated (byte) bitmap_line_ydxi::yd#2 -Self Phi Eliminated (byte) bitmap_line_ydxi::y1#2 -Self Phi Eliminated (byte) bitmap_line_ydxd::xd#3 -Self Phi Eliminated (byte) bitmap_line_ydxd::yd#2 -Self Phi Eliminated (byte) bitmap_line_ydxd::y1#2 -Self Phi Eliminated (byte*) print_screen#50 -Self Phi Eliminated (byte*) print_line_cursor#70 -Self Phi Eliminated (byte*) print_char_cursor#70 -Self Phi Eliminated (byte) dtv_control#233 -Self Phi Eliminated (byte*) print_screen#18 -Self Phi Eliminated (byte*) print_line_cursor#35 -Self Phi Eliminated (byte*) print_char_cursor#37 -Self Phi Eliminated (byte) dtv_control#131 -Self Phi Eliminated (byte*) print_screen#14 -Self Phi Eliminated (byte*) print_line_cursor#14 -Self Phi Eliminated (byte*) print_char_cursor#15 -Self Phi Eliminated (byte) dtv_control#100 -Self Phi Eliminated (byte) dtv_control#113 -Self Phi Eliminated (byte) dtv_control#204 -Self Phi Eliminated (byte) mode_stdchar::cy#2 -Self Phi Eliminated (byte) dtv_control#117 -Self Phi Eliminated (byte) dtv_control#205 -Self Phi Eliminated (byte) mode_ecmchar::cy#2 -Self Phi Eliminated (byte) dtv_control#118 -Self Phi Eliminated (byte) dtv_control#206 -Self Phi Eliminated (byte) mode_mcchar::cy#2 -Self Phi Eliminated (byte) dtv_control#119 -Self Phi Eliminated (byte) dtv_control#261 -Self Phi Eliminated (byte) mode_stdbitmap::cy#2 -Self Phi Eliminated (byte) dtv_control#192 -Self Phi Eliminated (byte) dtv_control#120 -Self Phi Eliminated (byte) dtv_control#208 -Self Phi Eliminated (byte) mode_hicolstdchar::cy#2 -Self Phi Eliminated (byte) dtv_control#121 -Self Phi Eliminated (byte) dtv_control#209 -Self Phi Eliminated (byte) mode_hicolecmchar::cy#2 -Self Phi Eliminated (byte) dtv_control#122 -Self Phi Eliminated (byte) dtv_control#210 -Self Phi Eliminated (byte) mode_hicolmcchar::cy#2 -Self Phi Eliminated (byte) dtv_control#123 -Self Phi Eliminated (byte) dtv_control#287 -Self Phi Eliminated (byte) mode_twoplanebitmap::cy#2 -Self Phi Eliminated (byte) dtv_control#269 -Self Phi Eliminated (byte) mode_twoplanebitmap::ay#2 -Self Phi Eliminated (byte) dtv_control#211 -Self Phi Eliminated (byte) mode_twoplanebitmap::by#2 -Self Phi Eliminated (byte) dtv_control#124 -Self Phi Eliminated (byte) dtv_control#281 -Self Phi Eliminated (byte) mode_sixsfred::cy#2 -Self Phi Eliminated (byte) dtv_control#256 -Self Phi Eliminated (byte) mode_sixsfred::ay#2 -Self Phi Eliminated (byte) dtv_control#212 -Self Phi Eliminated (byte) mode_sixsfred::by#2 -Self Phi Eliminated (byte) dtv_control#125 -Self Phi Eliminated (byte) dtv_control#282 -Self Phi Eliminated (byte) mode_sixsfred2::cy#2 -Self Phi Eliminated (byte) dtv_control#257 -Self Phi Eliminated (byte) mode_sixsfred2::ay#2 -Self Phi Eliminated (byte) dtv_control#213 -Self Phi Eliminated (byte) mode_sixsfred2::by#2 -Self Phi Eliminated (byte) dtv_control#126 -Self Phi Eliminated (byte) dtv_control#277 -Self Phi Eliminated (byte) mode_8bpppixelcell::ay#2 -Self Phi Eliminated (byte) dtv_control#249 -Self Phi Eliminated (byte) mode_8bpppixelcell::cr#2 -Self Phi Eliminated (byte*) mode_8bpppixelcell::chargen#3 -Self Phi Eliminated (byte) mode_8bpppixelcell::ch#2 -Self Phi Eliminated (byte) dtv_control#127 -Self Phi Eliminated (byte) dtv_control#241 -Self Phi Eliminated (byte) mode_8bppchunkybmm::y#2 -Self Phi Eliminated (byte) dtv_control#128 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -8375,6 +8289,28 @@ Identical Phi Values (byte) dtv_control#54 (byte) dtv_control#1 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 Identical Phi Values (byte) dtv_control#16 (byte) dtv_control#114 +Identical Phi Values (byte) dtv_control#189 (byte) dtv_control#18 +Identical Phi Values (byte) dtv_control#190 (byte) dtv_control#21 +Identical Phi Values (byte) dtv_control#191 (byte) dtv_control#24 +Identical Phi Values (byte) dtv_control#254 (byte) dtv_control#27 +Identical Phi Values (byte) dtv_control#193 (byte) dtv_control#30 +Identical Phi Values (byte) dtv_control#194 (byte) dtv_control#33 +Identical Phi Values (byte) dtv_control#195 (byte) dtv_control#36 +Identical Phi Values (byte) dtv_control#284 (byte) dtv_control#39 +Identical Phi Values (byte) dtv_control#262 (byte) dtv_control#284 +Identical Phi Values (byte) dtv_control#196 (byte) dtv_control#262 +Identical Phi Values (byte) dtv_control#275 (byte) dtv_control#42 +Identical Phi Values (byte) dtv_control#247 (byte) dtv_control#275 +Identical Phi Values (byte) dtv_control#197 (byte) dtv_control#247 +Identical Phi Values (byte) dtv_control#276 (byte) dtv_control#45 +Identical Phi Values (byte) dtv_control#248 (byte) dtv_control#276 +Identical Phi Values (byte) dtv_control#198 (byte) dtv_control#248 +Identical Phi Values (byte) dtv_control#272 (byte) dtv_control#48 +Identical Phi Values (byte) mode_8bpppixelcell::ch#7 (byte) mode_8bpppixelcell::ch#8 +Identical Phi Values (byte) dtv_control#230 (byte) dtv_control#240 +Identical Phi Values (byte) dtv_control#231 (byte) dtv_control#51 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) dtv_control#240 (byte) dtv_control#48 Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [222] (byte~) bitmap_init::$10 ← (byte) bitmap_init::y#2 & (byte) 7 Identified duplicate assignment right side [479] (dword~) menu::$6 ← (dword) DTV_COLOR_BANK_DEFAULT#0 / (word) $400 @@ -8890,7 +8826,7 @@ Resolved ranged next value [1750] mode_8bpppixelcell::cp#1 ← ++ mode_8bpppixel Resolved ranged comparison value [1752] if(mode_8bpppixelcell::cp#1!=rangelast(0,7)) goto mode_8bpppixelcell::@9 to (number) 8 Resolved ranged next value [1756] mode_8bpppixelcell::cr#1 ← ++ mode_8bpppixelcell::cr#6 to ++ Resolved ranged comparison value [1758] if(mode_8bpppixelcell::cr#1!=rangelast(0,7)) goto mode_8bpppixelcell::@8 to (number) 8 -Resolved ranged next value [1760] mode_8bpppixelcell::ch#1 ← ++ mode_8bpppixelcell::ch#7 to ++ +Resolved ranged next value [1760] mode_8bpppixelcell::ch#1 ← ++ mode_8bpppixelcell::ch#8 to ++ Resolved ranged comparison value [1762] if(mode_8bpppixelcell::ch#1!=rangelast(0,$ff)) goto mode_8bpppixelcell::@7 to (number) 0 Resolved ranged next value [1802] mode_8bppchunkybmm::i#1 ← ++ mode_8bppchunkybmm::i#2 to ++ Resolved ranged comparison value [1804] if(mode_8bppchunkybmm::i#1!=rangelast(0,$f)) goto mode_8bppchunkybmm::@1 to (number) $10 @@ -9103,49 +9039,6 @@ Alias (byte~) mode_8bpppixelcell::$2 = (byte~) mode_8bpppixelcell::$0 Alias (byte~) mode_8bppchunkybmm::$3 = (byte~) mode_8bppchunkybmm::$0 Alias (word~) mode_8bppchunkybmm::$12 = (word~) mode_8bppchunkybmm::$10 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) dtv_control#114 -Self Phi Eliminated (byte) dtv_control#189 -Self Phi Eliminated (byte) dtv_control#190 -Self Phi Eliminated (byte) dtv_control#191 -Self Phi Eliminated (byte) dtv_control#254 -Self Phi Eliminated (byte) dtv_control#193 -Self Phi Eliminated (byte) dtv_control#194 -Self Phi Eliminated (byte) dtv_control#195 -Self Phi Eliminated (byte) dtv_control#284 -Self Phi Eliminated (byte) dtv_control#262 -Self Phi Eliminated (byte) dtv_control#196 -Self Phi Eliminated (byte) dtv_control#275 -Self Phi Eliminated (byte) dtv_control#247 -Self Phi Eliminated (byte) dtv_control#197 -Self Phi Eliminated (byte) dtv_control#276 -Self Phi Eliminated (byte) dtv_control#248 -Self Phi Eliminated (byte) dtv_control#198 -Self Phi Eliminated (byte) dtv_control#272 -Self Phi Eliminated (byte) mode_8bpppixelcell::ch#7 -Self Phi Eliminated (byte) dtv_control#230 -Self Phi Eliminated (byte) dtv_control#231 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) dtv_control#189 (const byte) dtv_control#18 -Identical Phi Values (byte) dtv_control#190 (const byte) dtv_control#21 -Identical Phi Values (byte) dtv_control#191 (const byte) dtv_control#24 -Identical Phi Values (byte) dtv_control#254 (const byte) dtv_control#27 -Identical Phi Values (byte) dtv_control#193 (const byte) dtv_control#30 -Identical Phi Values (byte) dtv_control#194 (const byte) dtv_control#33 -Identical Phi Values (byte) dtv_control#195 (const byte) dtv_control#36 -Identical Phi Values (byte) dtv_control#284 (byte) dtv_control#39 -Identical Phi Values (byte) dtv_control#262 (byte) dtv_control#284 -Identical Phi Values (byte) dtv_control#196 (byte) dtv_control#262 -Identical Phi Values (byte) dtv_control#275 (byte) dtv_control#42 -Identical Phi Values (byte) dtv_control#247 (byte) dtv_control#275 -Identical Phi Values (byte) dtv_control#197 (byte) dtv_control#247 -Identical Phi Values (byte) dtv_control#276 (const byte) dtv_control#45 -Identical Phi Values (byte) dtv_control#248 (byte) dtv_control#276 -Identical Phi Values (byte) dtv_control#198 (byte) dtv_control#248 -Identical Phi Values (byte) dtv_control#272 (byte) dtv_control#48 -Identical Phi Values (byte) mode_8bpppixelcell::ch#7 (byte) mode_8bpppixelcell::ch#8 -Identical Phi Values (byte) dtv_control#230 (byte) dtv_control#240 -Identical Phi Values (byte) dtv_control#231 (byte) dtv_control#51 -Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [990] (byte~) mode_8bpppixelcell::$3 ← (byte~) mode_8bpppixelcell::$2 | (const byte) DTV_CHUNKY#0 Identified duplicate assignment right side [1057] (byte~) mode_8bppchunkybmm::$4 ← (byte~) mode_8bppchunkybmm::$3 | (const byte) DTV_CHUNKY#0 Successful SSA optimization Pass2DuplicateRValueIdentification @@ -9325,10 +9218,6 @@ Simplifying constant evaluating to zero <(const dword) mode_8bppchunkybmm::PLANE Successful SSA optimization PassNSimplifyConstantZero Alias (byte~) mode_8bppchunkybmm::$4 = (byte~) mode_8bppchunkybmm::$1 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) dtv_control#240 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) dtv_control#240 (byte) dtv_control#48 -Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [959] (byte~) mode_8bppchunkybmm::$5 ← (byte~) mode_8bppchunkybmm::$4 | (const byte) DTV_COLORRAM_OFF#0 Successful SSA optimization Pass2DuplicateRValueIdentification Constant right-side identified [212] (dword~) menu::$1 ← (const dword) menu::$0 / (dword) $10000 @@ -10186,13 +10075,14 @@ Added new block during phi lifting bitmap_line_ydxd::@6(between bitmap_line_ydxd Added new block during phi lifting bitmap_line_ydxd::@7(between bitmap_line_ydxd::@5 and bitmap_line_ydxd::@2) Added new block during phi lifting menu::@74(between menu::@1 and menu::@1) Added new block during phi lifting menu::@75(between menu::@3 and menu::@3) -Added new block during phi lifting mode_ctrl::@40(between mode_ctrl::@33 and mode_ctrl::@13) -Added new block during phi lifting mode_ctrl::@41(between mode_ctrl::@34 and mode_ctrl::@14) -Added new block during phi lifting mode_ctrl::@42(between mode_ctrl::@35 and mode_ctrl::@15) -Added new block during phi lifting mode_ctrl::@43(between mode_ctrl::@36 and mode_ctrl::@16) -Added new block during phi lifting mode_ctrl::@44(between mode_ctrl::@37 and mode_ctrl::@17) -Added new block during phi lifting mode_ctrl::@45(between mode_ctrl::@38 and mode_ctrl::@18) -Added new block during phi lifting mode_ctrl::@46(between mode_ctrl::@39 and mode_ctrl::@19) +Added new block during phi lifting mode_ctrl::@40(between mode_ctrl::@19 and mode_ctrl::@1) +Added new block during phi lifting mode_ctrl::@41(between mode_ctrl::@33 and mode_ctrl::@13) +Added new block during phi lifting mode_ctrl::@42(between mode_ctrl::@34 and mode_ctrl::@14) +Added new block during phi lifting mode_ctrl::@43(between mode_ctrl::@35 and mode_ctrl::@15) +Added new block during phi lifting mode_ctrl::@44(between mode_ctrl::@36 and mode_ctrl::@16) +Added new block during phi lifting mode_ctrl::@45(between mode_ctrl::@37 and mode_ctrl::@17) +Added new block during phi lifting mode_ctrl::@46(between mode_ctrl::@38 and mode_ctrl::@18) +Added new block during phi lifting mode_ctrl::@47(between mode_ctrl::@39 and mode_ctrl::@19) Added new block during phi lifting mode_stdchar::@8(between mode_stdchar::@1 and mode_stdchar::@1) Added new block during phi lifting mode_stdchar::@9(between mode_stdchar::@5 and mode_stdchar::@3) Added new block during phi lifting mode_stdchar::@10(between mode_stdchar::@4 and mode_stdchar::@4) @@ -10364,25 +10254,25 @@ Calls in [main] to menu:17 Calls in [menu] to print_set_screen:39 print_cls:41 print_str_lines:43 keyboard_key_pressed:47 mode_stdchar:52 keyboard_key_pressed:56 mode_ecmchar:61 keyboard_key_pressed:64 mode_mcchar:69 keyboard_key_pressed:72 mode_stdbitmap:77 keyboard_key_pressed:80 mode_hicolstdchar:85 keyboard_key_pressed:88 mode_hicolecmchar:93 keyboard_key_pressed:96 mode_hicolmcchar:101 keyboard_key_pressed:104 mode_sixsfred2:109 keyboard_key_pressed:112 mode_twoplanebitmap:117 keyboard_key_pressed:120 mode_sixsfred:125 keyboard_key_pressed:128 mode_8bpppixelcell:133 keyboard_key_pressed:136 mode_8bppchunkybmm:141 Calls in [mode_8bppchunkybmm] to dtvSetCpuBankSegment1:160 dtvSetCpuBankSegment1:169 dtvSetCpuBankSegment1:182 mode_ctrl:184 Calls in [mode_ctrl] to keyboard_key_pressed:201 keyboard_key_pressed:207 keyboard_key_pressed:214 keyboard_key_pressed:221 keyboard_key_pressed:228 keyboard_key_pressed:235 keyboard_key_pressed:242 keyboard_key_pressed:249 -Calls in [keyboard_key_pressed] to keyboard_matrix_read:271 -Calls in [mode_8bpppixelcell] to mode_ctrl:344 -Calls in [mode_sixsfred] to mode_ctrl:420 -Calls in [mode_twoplanebitmap] to mode_ctrl:498 -Calls in [mode_sixsfred2] to mode_ctrl:575 -Calls in [mode_hicolmcchar] to mode_ctrl:625 -Calls in [mode_hicolecmchar] to mode_ctrl:670 -Calls in [mode_hicolstdchar] to mode_ctrl:712 -Calls in [mode_stdbitmap] to bitmap_init:750 bitmap_clear:752 bitmap_line:759 mode_ctrl:763 -Calls in [bitmap_line] to bitmap_line_ydxi:787 bitmap_line_xdyi:800 bitmap_line_ydxd:814 bitmap_line_xdyd:826 bitmap_line_ydxd:842 bitmap_line_xdyd:854 bitmap_line_ydxi:868 bitmap_line_xdyi:880 -Calls in [bitmap_line_xdyi] to bitmap_plot:892 -Calls in [bitmap_line_ydxi] to bitmap_plot:926 -Calls in [bitmap_line_xdyd] to bitmap_plot:953 -Calls in [bitmap_line_ydxd] to bitmap_plot:980 -Calls in [mode_mcchar] to mode_ctrl:1082 -Calls in [mode_ecmchar] to mode_ctrl:1129 -Calls in [mode_stdchar] to mode_ctrl:1173 -Calls in [print_str_lines] to print_ln:1199 -Calls in [print_cls] to memset:1214 +Calls in [keyboard_key_pressed] to keyboard_matrix_read:272 +Calls in [mode_8bpppixelcell] to mode_ctrl:345 +Calls in [mode_sixsfred] to mode_ctrl:421 +Calls in [mode_twoplanebitmap] to mode_ctrl:499 +Calls in [mode_sixsfred2] to mode_ctrl:576 +Calls in [mode_hicolmcchar] to mode_ctrl:626 +Calls in [mode_hicolecmchar] to mode_ctrl:671 +Calls in [mode_hicolstdchar] to mode_ctrl:713 +Calls in [mode_stdbitmap] to bitmap_init:751 bitmap_clear:753 bitmap_line:760 mode_ctrl:764 +Calls in [bitmap_line] to bitmap_line_ydxi:788 bitmap_line_xdyi:801 bitmap_line_ydxd:815 bitmap_line_xdyd:827 bitmap_line_ydxd:843 bitmap_line_xdyd:855 bitmap_line_ydxi:869 bitmap_line_xdyi:881 +Calls in [bitmap_line_xdyi] to bitmap_plot:893 +Calls in [bitmap_line_ydxi] to bitmap_plot:927 +Calls in [bitmap_line_xdyd] to bitmap_plot:954 +Calls in [bitmap_line_ydxd] to bitmap_plot:981 +Calls in [mode_mcchar] to mode_ctrl:1083 +Calls in [mode_ecmchar] to mode_ctrl:1130 +Calls in [mode_stdchar] to mode_ctrl:1174 +Calls in [print_str_lines] to print_ln:1200 +Calls in [print_cls] to memset:1215 Created 188 initial phi equivalence classes Coalesced [143] menu::c#3 ← menu::c#1 @@ -10407,262 +10297,263 @@ Coalesced [226] mode_ctrl::ctrl#33 ← mode_ctrl::ctrl#3 Coalesced [233] mode_ctrl::ctrl#35 ← mode_ctrl::ctrl#4 Coalesced [240] mode_ctrl::ctrl#37 ← mode_ctrl::ctrl#5 Coalesced [247] mode_ctrl::ctrl#39 ← mode_ctrl::ctrl#6 -Coalesced [259] dtv_control#290 ← dtv_control#17 -Coalesced [260] mode_ctrl::ctrl#41 ← mode_ctrl::ctrl#22 -Coalesced [261] mode_ctrl::ctrl#40 ← mode_ctrl::ctrl#13 -Coalesced [262] mode_ctrl::ctrl#38 ← mode_ctrl::ctrl#12 -Coalesced [263] mode_ctrl::ctrl#36 ← mode_ctrl::ctrl#11 -Coalesced [264] mode_ctrl::ctrl#34 ← mode_ctrl::ctrl#10 -Coalesced [265] mode_ctrl::ctrl#32 ← mode_ctrl::ctrl#17 -Coalesced [266] mode_ctrl::ctrl#30 ← mode_ctrl::ctrl#0 -Coalesced [305] mode_8bpppixelcell::gfxa#6 ← mode_8bpppixelcell::gfxa#3 -Coalesced [319] mode_8bpppixelcell::chargen#11 ← mode_8bpppixelcell::chargen#4 -Coalesced [320] mode_8bpppixelcell::gfxb#11 ← mode_8bpppixelcell::gfxb#7 -Coalesced [321] mode_8bpppixelcell::col#11 ← mode_8bpppixelcell::col#7 -Coalesced [325] mode_8bpppixelcell::bits#6 ← mode_8bpppixelcell::bits#0 -Coalesced [326] mode_8bpppixelcell::gfxb#13 ← mode_8bpppixelcell::gfxb#5 -Coalesced [327] mode_8bpppixelcell::col#13 ← mode_8bpppixelcell::col#5 -Not coalescing [331] mode_8bpppixelcell::c#3 ← mode_8bpppixelcell::col#2 -Coalesced [347] mode_8bpppixelcell::chargen#9 ← mode_8bpppixelcell::chargen#1 -Coalesced [348] mode_8bpppixelcell::gfxb#9 ← mode_8bpppixelcell::gfxb#1 -Coalesced [349] mode_8bpppixelcell::col#9 ← mode_8bpppixelcell::col#1 -Coalesced [350] mode_8bpppixelcell::ch#9 ← mode_8bpppixelcell::ch#1 -Coalesced (already) [351] mode_8bpppixelcell::chargen#10 ← mode_8bpppixelcell::chargen#1 -Coalesced (already) [352] mode_8bpppixelcell::gfxb#10 ← mode_8bpppixelcell::gfxb#1 -Coalesced (already) [353] mode_8bpppixelcell::col#10 ← mode_8bpppixelcell::col#1 -Coalesced [354] mode_8bpppixelcell::cr#7 ← mode_8bpppixelcell::cr#1 -Coalesced [355] mode_8bpppixelcell::bits#5 ← mode_8bpppixelcell::bits#1 -Coalesced (already) [356] mode_8bpppixelcell::gfxb#12 ← mode_8bpppixelcell::gfxb#1 -Coalesced (already) [357] mode_8bpppixelcell::col#12 ← mode_8bpppixelcell::col#1 -Coalesced [358] mode_8bpppixelcell::cp#5 ← mode_8bpppixelcell::cp#1 -Coalesced [359] mode_8bpppixelcell::ay#5 ← mode_8bpppixelcell::ay#1 -Coalesced [360] mode_8bpppixelcell::gfxa#5 ← mode_8bpppixelcell::gfxa#1 -Coalesced [361] mode_8bpppixelcell::ax#3 ← mode_8bpppixelcell::ax#1 -Coalesced (already) [362] mode_8bpppixelcell::gfxa#7 ← mode_8bpppixelcell::gfxa#1 -Coalesced [363] mode_8bpppixelcell::i#3 ← mode_8bpppixelcell::i#1 -Coalesced [387] mode_sixsfred::col#6 ← mode_sixsfred::col#3 -Coalesced [399] mode_sixsfred::gfxa#6 ← mode_sixsfred::gfxa#3 -Coalesced [411] mode_sixsfred::gfxb#6 ← mode_sixsfred::gfxb#3 -Coalesced [423] mode_sixsfred::gfxb#5 ← mode_sixsfred::gfxb#1 -Coalesced [424] mode_sixsfred::by#5 ← mode_sixsfred::by#1 -Coalesced (already) [425] mode_sixsfred::gfxb#7 ← mode_sixsfred::gfxb#1 -Coalesced [426] mode_sixsfred::bx#3 ← mode_sixsfred::bx#1 -Coalesced [427] mode_sixsfred::ay#5 ← mode_sixsfred::ay#1 -Coalesced [428] mode_sixsfred::gfxa#5 ← mode_sixsfred::gfxa#1 -Coalesced (already) [429] mode_sixsfred::gfxa#7 ← mode_sixsfred::gfxa#1 -Coalesced [430] mode_sixsfred::ax#3 ← mode_sixsfred::ax#1 -Coalesced [431] mode_sixsfred::cy#5 ← mode_sixsfred::cy#1 -Coalesced [432] mode_sixsfred::col#5 ← mode_sixsfred::col#1 -Coalesced [433] mode_sixsfred::cx#3 ← mode_sixsfred::cx#1 -Coalesced (already) [434] mode_sixsfred::col#7 ← mode_sixsfred::col#1 -Coalesced [435] mode_sixsfred::i#3 ← mode_sixsfred::i#1 -Coalesced [461] mode_twoplanebitmap::col#6 ← mode_twoplanebitmap::col#3 -Coalesced [475] mode_twoplanebitmap::gfxa#11 ← mode_twoplanebitmap::gfxa#7 -Coalesced [481] mode_twoplanebitmap::gfxa#12 ← mode_twoplanebitmap::gfxa#2 -Coalesced [489] mode_twoplanebitmap::gfxb#6 ← mode_twoplanebitmap::gfxb#3 -Coalesced [501] mode_twoplanebitmap::gfxb#5 ← mode_twoplanebitmap::gfxb#1 -Coalesced [502] mode_twoplanebitmap::by#5 ← mode_twoplanebitmap::by#1 -Coalesced (already) [503] mode_twoplanebitmap::gfxb#7 ← mode_twoplanebitmap::gfxb#1 -Coalesced [504] mode_twoplanebitmap::bx#3 ← mode_twoplanebitmap::bx#1 -Coalesced [505] mode_twoplanebitmap::ay#8 ← mode_twoplanebitmap::ay#1 -Coalesced [506] mode_twoplanebitmap::gfxa#9 ← mode_twoplanebitmap::gfxa#6 -Coalesced (already) [507] mode_twoplanebitmap::gfxa#10 ← mode_twoplanebitmap::gfxa#6 -Coalesced [508] mode_twoplanebitmap::ax#6 ← mode_twoplanebitmap::ax#1 -Coalesced [511] mode_twoplanebitmap::gfxa#13 ← mode_twoplanebitmap::gfxa#1 -Coalesced [512] mode_twoplanebitmap::cy#5 ← mode_twoplanebitmap::cy#1 -Coalesced [513] mode_twoplanebitmap::col#5 ← mode_twoplanebitmap::col#1 -Coalesced [514] mode_twoplanebitmap::cx#3 ← mode_twoplanebitmap::cx#1 -Coalesced (already) [515] mode_twoplanebitmap::col#7 ← mode_twoplanebitmap::col#1 -Coalesced [516] mode_twoplanebitmap::i#3 ← mode_twoplanebitmap::i#1 -Coalesced [540] mode_sixsfred2::col#6 ← mode_sixsfred2::col#3 -Coalesced [554] mode_sixsfred2::gfxa#6 ← mode_sixsfred2::gfxa#3 -Coalesced [566] mode_sixsfred2::gfxb#6 ← mode_sixsfred2::gfxb#3 -Coalesced [578] mode_sixsfred2::gfxb#5 ← mode_sixsfred2::gfxb#1 -Coalesced [579] mode_sixsfred2::by#5 ← mode_sixsfred2::by#1 -Coalesced (already) [580] mode_sixsfred2::gfxb#7 ← mode_sixsfred2::gfxb#1 -Coalesced [581] mode_sixsfred2::bx#3 ← mode_sixsfred2::bx#1 -Coalesced [582] mode_sixsfred2::ay#5 ← mode_sixsfred2::ay#1 -Coalesced [583] mode_sixsfred2::gfxa#5 ← mode_sixsfred2::gfxa#1 -Coalesced (already) [584] mode_sixsfred2::gfxa#7 ← mode_sixsfred2::gfxa#1 -Coalesced [585] mode_sixsfred2::ax#3 ← mode_sixsfred2::ax#1 -Coalesced [586] mode_sixsfred2::cy#5 ← mode_sixsfred2::cy#1 -Coalesced [587] mode_sixsfred2::col#5 ← mode_sixsfred2::col#1 -Coalesced [588] mode_sixsfred2::cx#3 ← mode_sixsfred2::cx#1 -Coalesced (already) [589] mode_sixsfred2::col#7 ← mode_sixsfred2::col#1 -Coalesced [590] mode_sixsfred2::i#3 ← mode_sixsfred2::i#1 -Coalesced [609] mode_hicolmcchar::col#6 ← mode_hicolmcchar::col#3 -Coalesced [610] mode_hicolmcchar::ch#6 ← mode_hicolmcchar::ch#3 -Coalesced [628] mode_hicolmcchar::cy#5 ← mode_hicolmcchar::cy#1 -Coalesced [629] mode_hicolmcchar::col#5 ← mode_hicolmcchar::col#1 -Coalesced [630] mode_hicolmcchar::ch#5 ← mode_hicolmcchar::ch#1 -Coalesced [631] mode_hicolmcchar::cx#3 ← mode_hicolmcchar::cx#1 -Coalesced (already) [632] mode_hicolmcchar::col#7 ← mode_hicolmcchar::col#1 -Coalesced (already) [633] mode_hicolmcchar::ch#7 ← mode_hicolmcchar::ch#1 -Coalesced [634] mode_hicolmcchar::i#3 ← mode_hicolmcchar::i#1 -Coalesced [654] mode_hicolecmchar::col#6 ← mode_hicolecmchar::col#3 -Coalesced [655] mode_hicolecmchar::ch#6 ← mode_hicolecmchar::ch#3 -Coalesced [673] mode_hicolecmchar::cy#5 ← mode_hicolecmchar::cy#1 -Coalesced [674] mode_hicolecmchar::col#5 ← mode_hicolecmchar::col#1 -Coalesced [675] mode_hicolecmchar::ch#5 ← mode_hicolecmchar::ch#1 -Coalesced [676] mode_hicolecmchar::cx#3 ← mode_hicolecmchar::cx#1 -Coalesced (already) [677] mode_hicolecmchar::col#7 ← mode_hicolecmchar::col#1 -Coalesced (already) [678] mode_hicolecmchar::ch#7 ← mode_hicolecmchar::ch#1 -Coalesced [679] mode_hicolecmchar::i#3 ← mode_hicolecmchar::i#1 -Coalesced [696] mode_hicolstdchar::col#6 ← mode_hicolstdchar::col#3 -Coalesced [697] mode_hicolstdchar::ch#6 ← mode_hicolstdchar::ch#3 -Coalesced [715] mode_hicolstdchar::cy#5 ← mode_hicolstdchar::cy#1 -Coalesced [716] mode_hicolstdchar::col#5 ← mode_hicolstdchar::col#1 -Coalesced [717] mode_hicolstdchar::ch#5 ← mode_hicolstdchar::ch#1 -Coalesced [718] mode_hicolstdchar::cx#3 ← mode_hicolstdchar::cx#1 -Coalesced (already) [719] mode_hicolstdchar::col#7 ← mode_hicolstdchar::col#1 -Coalesced (already) [720] mode_hicolstdchar::ch#7 ← mode_hicolstdchar::ch#1 -Coalesced [721] mode_hicolstdchar::i#3 ← mode_hicolstdchar::i#1 -Coalesced [736] mode_stdbitmap::ch#6 ← mode_stdbitmap::ch#3 -Coalesced [766] mode_stdbitmap::l#4 ← mode_stdbitmap::l#1 -Coalesced [767] mode_stdbitmap::cy#5 ← mode_stdbitmap::cy#1 -Coalesced [768] mode_stdbitmap::ch#5 ← mode_stdbitmap::ch#1 -Coalesced [769] mode_stdbitmap::cx#3 ← mode_stdbitmap::cx#1 -Coalesced (already) [770] mode_stdbitmap::ch#7 ← mode_stdbitmap::ch#1 -Coalesced [771] mode_stdbitmap::i#3 ← mode_stdbitmap::i#1 -Coalesced [782] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 -Coalesced [783] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 -Coalesced [784] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 -Coalesced [785] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 -Coalesced [786] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 -Coalesced [795] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 -Coalesced [796] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 -Coalesced [797] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 -Coalesced [798] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 -Coalesced [799] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 -Coalesced [809] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 -Coalesced [810] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 -Coalesced [811] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 -Coalesced [812] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 -Coalesced [813] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 -Coalesced [821] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 -Coalesced [822] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 -Coalesced [823] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 -Coalesced [824] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 -Coalesced [825] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 -Coalesced [837] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 -Coalesced [838] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 -Coalesced [839] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 -Coalesced [840] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 -Coalesced [841] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 -Coalesced [849] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 -Coalesced [850] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 -Coalesced [851] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 -Coalesced [852] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 -Coalesced [853] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 -Coalesced [863] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 -Coalesced [864] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 -Coalesced [865] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 -Coalesced [866] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 -Coalesced [867] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 -Coalesced [875] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 -Coalesced [876] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 -Coalesced [877] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 -Coalesced [878] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 -Coalesced [879] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 -Coalesced [884] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 -Coalesced [885] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 -Coalesced [886] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 -Coalesced [890] bitmap_plot::x#6 ← bitmap_plot::x#0 -Coalesced [891] bitmap_plot::y#6 ← bitmap_plot::y#0 -Coalesced [898] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 -Coalesced [899] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 -Coalesced [904] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 -Coalesced [905] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 -Coalesced [906] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 -Coalesced (already) [907] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 -Coalesced [908] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 -Coalesced [918] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 -Coalesced [919] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 -Coalesced [920] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 -Coalesced [924] bitmap_plot::x#8 ← bitmap_plot::x#2 -Coalesced [925] bitmap_plot::y#8 ← bitmap_plot::y#2 -Coalesced [932] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 -Coalesced [933] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 -Coalesced [938] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 -Coalesced [939] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 -Coalesced [940] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 -Coalesced (already) [941] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 -Coalesced [942] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 -Coalesced [945] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 -Coalesced [946] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 -Coalesced [947] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 -Coalesced [951] bitmap_plot::x#5 ← bitmap_plot::x#1 -Coalesced [952] bitmap_plot::y#5 ← bitmap_plot::y#1 -Coalesced [959] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 -Coalesced [960] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 -Coalesced [965] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 -Coalesced [966] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 -Coalesced [967] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 -Coalesced (already) [968] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 -Coalesced [969] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 -Coalesced [972] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 -Coalesced [973] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 -Coalesced [974] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 -Coalesced [978] bitmap_plot::x#7 ← bitmap_plot::x#3 -Coalesced [979] bitmap_plot::y#7 ← bitmap_plot::y#3 -Coalesced [986] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 -Coalesced [987] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 -Coalesced [992] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 -Coalesced [993] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 -Coalesced [994] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 -Coalesced (already) [995] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 -Coalesced [996] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 -Coalesced [1000] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 -Coalesced [1009] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 -Coalesced [1010] bitmap_clear::y#5 ← bitmap_clear::y#1 -Coalesced (already) [1011] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 -Coalesced [1012] bitmap_clear::x#3 ← bitmap_clear::x#1 -Coalesced [1035] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [1040] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [1041] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [1042] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [1043] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [1044] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [1045] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [1064] mode_mcchar::col#6 ← mode_mcchar::col#3 -Coalesced [1065] mode_mcchar::ch#6 ← mode_mcchar::ch#3 -Coalesced [1085] mode_mcchar::cy#5 ← mode_mcchar::cy#1 -Coalesced [1086] mode_mcchar::col#5 ← mode_mcchar::col#1 -Coalesced [1087] mode_mcchar::ch#5 ← mode_mcchar::ch#1 -Coalesced [1088] mode_mcchar::cx#3 ← mode_mcchar::cx#1 -Coalesced (already) [1089] mode_mcchar::col#7 ← mode_mcchar::col#1 -Coalesced (already) [1090] mode_mcchar::ch#7 ← mode_mcchar::ch#1 -Coalesced [1091] mode_mcchar::i#3 ← mode_mcchar::i#1 -Coalesced [1111] mode_ecmchar::col#6 ← mode_ecmchar::col#3 -Coalesced [1112] mode_ecmchar::ch#6 ← mode_ecmchar::ch#3 -Coalesced [1132] mode_ecmchar::cy#5 ← mode_ecmchar::cy#1 -Coalesced [1133] mode_ecmchar::col#5 ← mode_ecmchar::col#1 -Coalesced [1134] mode_ecmchar::ch#5 ← mode_ecmchar::ch#1 -Coalesced [1135] mode_ecmchar::cx#3 ← mode_ecmchar::cx#1 -Coalesced (already) [1136] mode_ecmchar::col#7 ← mode_ecmchar::col#1 -Coalesced (already) [1137] mode_ecmchar::ch#7 ← mode_ecmchar::ch#1 -Coalesced [1138] mode_ecmchar::i#3 ← mode_ecmchar::i#1 -Coalesced [1155] mode_stdchar::col#6 ← mode_stdchar::col#3 -Coalesced [1156] mode_stdchar::ch#6 ← mode_stdchar::ch#3 -Coalesced [1176] mode_stdchar::cy#5 ← mode_stdchar::cy#1 -Coalesced [1177] mode_stdchar::col#5 ← mode_stdchar::col#1 -Coalesced [1178] mode_stdchar::ch#5 ← mode_stdchar::ch#1 -Coalesced [1179] mode_stdchar::cx#3 ← mode_stdchar::cx#1 -Coalesced (already) [1180] mode_stdchar::col#7 ← mode_stdchar::col#1 -Coalesced (already) [1181] mode_stdchar::ch#7 ← mode_stdchar::ch#1 -Coalesced [1182] mode_stdchar::i#3 ← mode_stdchar::i#1 -Coalesced [1187] print_str_lines::str#10 ← print_str_lines::str#2 -Coalesced [1188] print_char_cursor#100 ← print_char_cursor#19 -Coalesced [1195] print_char_cursor#103 ← print_char_cursor#1 -Coalesced [1200] print_str_lines::str#9 ← print_str_lines::str#0 -Not coalescing [1201] print_char_cursor#99 ← print_line_cursor#19 -Coalesced [1202] print_line_cursor#99 ← print_line_cursor#19 -Coalesced (already) [1203] print_str_lines::str#11 ← print_str_lines::str#0 -Coalesced [1204] print_char_cursor#101 ← print_char_cursor#32 -Coalesced (already) [1205] print_char_cursor#102 ← print_char_cursor#17 -Coalesced [1206] print_line_cursor#100 ← print_line_cursor#17 -Coalesced (already) [1212] print_line_cursor#101 ← print_line_cursor#19 -Coalesced [1225] memset::dst#3 ← memset::dst#1 +Coalesced [259] dtv_control#291 ← dtv_control#17 +Coalesced (already) [260] dtv_control#290 ← dtv_control#114 +Coalesced [261] mode_ctrl::ctrl#41 ← mode_ctrl::ctrl#22 +Coalesced [262] mode_ctrl::ctrl#40 ← mode_ctrl::ctrl#13 +Coalesced [263] mode_ctrl::ctrl#38 ← mode_ctrl::ctrl#12 +Coalesced [264] mode_ctrl::ctrl#36 ← mode_ctrl::ctrl#11 +Coalesced [265] mode_ctrl::ctrl#34 ← mode_ctrl::ctrl#10 +Coalesced [266] mode_ctrl::ctrl#32 ← mode_ctrl::ctrl#17 +Coalesced [267] mode_ctrl::ctrl#30 ← mode_ctrl::ctrl#0 +Coalesced [306] mode_8bpppixelcell::gfxa#6 ← mode_8bpppixelcell::gfxa#3 +Coalesced [320] mode_8bpppixelcell::chargen#11 ← mode_8bpppixelcell::chargen#4 +Coalesced [321] mode_8bpppixelcell::gfxb#11 ← mode_8bpppixelcell::gfxb#7 +Coalesced [322] mode_8bpppixelcell::col#11 ← mode_8bpppixelcell::col#7 +Coalesced [326] mode_8bpppixelcell::bits#6 ← mode_8bpppixelcell::bits#0 +Coalesced [327] mode_8bpppixelcell::gfxb#13 ← mode_8bpppixelcell::gfxb#5 +Coalesced [328] mode_8bpppixelcell::col#13 ← mode_8bpppixelcell::col#5 +Not coalescing [332] mode_8bpppixelcell::c#3 ← mode_8bpppixelcell::col#2 +Coalesced [348] mode_8bpppixelcell::chargen#9 ← mode_8bpppixelcell::chargen#1 +Coalesced [349] mode_8bpppixelcell::gfxb#9 ← mode_8bpppixelcell::gfxb#1 +Coalesced [350] mode_8bpppixelcell::col#9 ← mode_8bpppixelcell::col#1 +Coalesced [351] mode_8bpppixelcell::ch#9 ← mode_8bpppixelcell::ch#1 +Coalesced (already) [352] mode_8bpppixelcell::chargen#10 ← mode_8bpppixelcell::chargen#1 +Coalesced (already) [353] mode_8bpppixelcell::gfxb#10 ← mode_8bpppixelcell::gfxb#1 +Coalesced (already) [354] mode_8bpppixelcell::col#10 ← mode_8bpppixelcell::col#1 +Coalesced [355] mode_8bpppixelcell::cr#7 ← mode_8bpppixelcell::cr#1 +Coalesced [356] mode_8bpppixelcell::bits#5 ← mode_8bpppixelcell::bits#1 +Coalesced (already) [357] mode_8bpppixelcell::gfxb#12 ← mode_8bpppixelcell::gfxb#1 +Coalesced (already) [358] mode_8bpppixelcell::col#12 ← mode_8bpppixelcell::col#1 +Coalesced [359] mode_8bpppixelcell::cp#5 ← mode_8bpppixelcell::cp#1 +Coalesced [360] mode_8bpppixelcell::ay#5 ← mode_8bpppixelcell::ay#1 +Coalesced [361] mode_8bpppixelcell::gfxa#5 ← mode_8bpppixelcell::gfxa#1 +Coalesced [362] mode_8bpppixelcell::ax#3 ← mode_8bpppixelcell::ax#1 +Coalesced (already) [363] mode_8bpppixelcell::gfxa#7 ← mode_8bpppixelcell::gfxa#1 +Coalesced [364] mode_8bpppixelcell::i#3 ← mode_8bpppixelcell::i#1 +Coalesced [388] mode_sixsfred::col#6 ← mode_sixsfred::col#3 +Coalesced [400] mode_sixsfred::gfxa#6 ← mode_sixsfred::gfxa#3 +Coalesced [412] mode_sixsfred::gfxb#6 ← mode_sixsfred::gfxb#3 +Coalesced [424] mode_sixsfred::gfxb#5 ← mode_sixsfred::gfxb#1 +Coalesced [425] mode_sixsfred::by#5 ← mode_sixsfred::by#1 +Coalesced (already) [426] mode_sixsfred::gfxb#7 ← mode_sixsfred::gfxb#1 +Coalesced [427] mode_sixsfred::bx#3 ← mode_sixsfred::bx#1 +Coalesced [428] mode_sixsfred::ay#5 ← mode_sixsfred::ay#1 +Coalesced [429] mode_sixsfred::gfxa#5 ← mode_sixsfred::gfxa#1 +Coalesced (already) [430] mode_sixsfred::gfxa#7 ← mode_sixsfred::gfxa#1 +Coalesced [431] mode_sixsfred::ax#3 ← mode_sixsfred::ax#1 +Coalesced [432] mode_sixsfred::cy#5 ← mode_sixsfred::cy#1 +Coalesced [433] mode_sixsfred::col#5 ← mode_sixsfred::col#1 +Coalesced [434] mode_sixsfred::cx#3 ← mode_sixsfred::cx#1 +Coalesced (already) [435] mode_sixsfred::col#7 ← mode_sixsfred::col#1 +Coalesced [436] mode_sixsfred::i#3 ← mode_sixsfred::i#1 +Coalesced [462] mode_twoplanebitmap::col#6 ← mode_twoplanebitmap::col#3 +Coalesced [476] mode_twoplanebitmap::gfxa#11 ← mode_twoplanebitmap::gfxa#7 +Coalesced [482] mode_twoplanebitmap::gfxa#12 ← mode_twoplanebitmap::gfxa#2 +Coalesced [490] mode_twoplanebitmap::gfxb#6 ← mode_twoplanebitmap::gfxb#3 +Coalesced [502] mode_twoplanebitmap::gfxb#5 ← mode_twoplanebitmap::gfxb#1 +Coalesced [503] mode_twoplanebitmap::by#5 ← mode_twoplanebitmap::by#1 +Coalesced (already) [504] mode_twoplanebitmap::gfxb#7 ← mode_twoplanebitmap::gfxb#1 +Coalesced [505] mode_twoplanebitmap::bx#3 ← mode_twoplanebitmap::bx#1 +Coalesced [506] mode_twoplanebitmap::ay#8 ← mode_twoplanebitmap::ay#1 +Coalesced [507] mode_twoplanebitmap::gfxa#9 ← mode_twoplanebitmap::gfxa#6 +Coalesced (already) [508] mode_twoplanebitmap::gfxa#10 ← mode_twoplanebitmap::gfxa#6 +Coalesced [509] mode_twoplanebitmap::ax#6 ← mode_twoplanebitmap::ax#1 +Coalesced [512] mode_twoplanebitmap::gfxa#13 ← mode_twoplanebitmap::gfxa#1 +Coalesced [513] mode_twoplanebitmap::cy#5 ← mode_twoplanebitmap::cy#1 +Coalesced [514] mode_twoplanebitmap::col#5 ← mode_twoplanebitmap::col#1 +Coalesced [515] mode_twoplanebitmap::cx#3 ← mode_twoplanebitmap::cx#1 +Coalesced (already) [516] mode_twoplanebitmap::col#7 ← mode_twoplanebitmap::col#1 +Coalesced [517] mode_twoplanebitmap::i#3 ← mode_twoplanebitmap::i#1 +Coalesced [541] mode_sixsfred2::col#6 ← mode_sixsfred2::col#3 +Coalesced [555] mode_sixsfred2::gfxa#6 ← mode_sixsfred2::gfxa#3 +Coalesced [567] mode_sixsfred2::gfxb#6 ← mode_sixsfred2::gfxb#3 +Coalesced [579] mode_sixsfred2::gfxb#5 ← mode_sixsfred2::gfxb#1 +Coalesced [580] mode_sixsfred2::by#5 ← mode_sixsfred2::by#1 +Coalesced (already) [581] mode_sixsfred2::gfxb#7 ← mode_sixsfred2::gfxb#1 +Coalesced [582] mode_sixsfred2::bx#3 ← mode_sixsfred2::bx#1 +Coalesced [583] mode_sixsfred2::ay#5 ← mode_sixsfred2::ay#1 +Coalesced [584] mode_sixsfred2::gfxa#5 ← mode_sixsfred2::gfxa#1 +Coalesced (already) [585] mode_sixsfred2::gfxa#7 ← mode_sixsfred2::gfxa#1 +Coalesced [586] mode_sixsfred2::ax#3 ← mode_sixsfred2::ax#1 +Coalesced [587] mode_sixsfred2::cy#5 ← mode_sixsfred2::cy#1 +Coalesced [588] mode_sixsfred2::col#5 ← mode_sixsfred2::col#1 +Coalesced [589] mode_sixsfred2::cx#3 ← mode_sixsfred2::cx#1 +Coalesced (already) [590] mode_sixsfred2::col#7 ← mode_sixsfred2::col#1 +Coalesced [591] mode_sixsfred2::i#3 ← mode_sixsfred2::i#1 +Coalesced [610] mode_hicolmcchar::col#6 ← mode_hicolmcchar::col#3 +Coalesced [611] mode_hicolmcchar::ch#6 ← mode_hicolmcchar::ch#3 +Coalesced [629] mode_hicolmcchar::cy#5 ← mode_hicolmcchar::cy#1 +Coalesced [630] mode_hicolmcchar::col#5 ← mode_hicolmcchar::col#1 +Coalesced [631] mode_hicolmcchar::ch#5 ← mode_hicolmcchar::ch#1 +Coalesced [632] mode_hicolmcchar::cx#3 ← mode_hicolmcchar::cx#1 +Coalesced (already) [633] mode_hicolmcchar::col#7 ← mode_hicolmcchar::col#1 +Coalesced (already) [634] mode_hicolmcchar::ch#7 ← mode_hicolmcchar::ch#1 +Coalesced [635] mode_hicolmcchar::i#3 ← mode_hicolmcchar::i#1 +Coalesced [655] mode_hicolecmchar::col#6 ← mode_hicolecmchar::col#3 +Coalesced [656] mode_hicolecmchar::ch#6 ← mode_hicolecmchar::ch#3 +Coalesced [674] mode_hicolecmchar::cy#5 ← mode_hicolecmchar::cy#1 +Coalesced [675] mode_hicolecmchar::col#5 ← mode_hicolecmchar::col#1 +Coalesced [676] mode_hicolecmchar::ch#5 ← mode_hicolecmchar::ch#1 +Coalesced [677] mode_hicolecmchar::cx#3 ← mode_hicolecmchar::cx#1 +Coalesced (already) [678] mode_hicolecmchar::col#7 ← mode_hicolecmchar::col#1 +Coalesced (already) [679] mode_hicolecmchar::ch#7 ← mode_hicolecmchar::ch#1 +Coalesced [680] mode_hicolecmchar::i#3 ← mode_hicolecmchar::i#1 +Coalesced [697] mode_hicolstdchar::col#6 ← mode_hicolstdchar::col#3 +Coalesced [698] mode_hicolstdchar::ch#6 ← mode_hicolstdchar::ch#3 +Coalesced [716] mode_hicolstdchar::cy#5 ← mode_hicolstdchar::cy#1 +Coalesced [717] mode_hicolstdchar::col#5 ← mode_hicolstdchar::col#1 +Coalesced [718] mode_hicolstdchar::ch#5 ← mode_hicolstdchar::ch#1 +Coalesced [719] mode_hicolstdchar::cx#3 ← mode_hicolstdchar::cx#1 +Coalesced (already) [720] mode_hicolstdchar::col#7 ← mode_hicolstdchar::col#1 +Coalesced (already) [721] mode_hicolstdchar::ch#7 ← mode_hicolstdchar::ch#1 +Coalesced [722] mode_hicolstdchar::i#3 ← mode_hicolstdchar::i#1 +Coalesced [737] mode_stdbitmap::ch#6 ← mode_stdbitmap::ch#3 +Coalesced [767] mode_stdbitmap::l#4 ← mode_stdbitmap::l#1 +Coalesced [768] mode_stdbitmap::cy#5 ← mode_stdbitmap::cy#1 +Coalesced [769] mode_stdbitmap::ch#5 ← mode_stdbitmap::ch#1 +Coalesced [770] mode_stdbitmap::cx#3 ← mode_stdbitmap::cx#1 +Coalesced (already) [771] mode_stdbitmap::ch#7 ← mode_stdbitmap::ch#1 +Coalesced [772] mode_stdbitmap::i#3 ← mode_stdbitmap::i#1 +Coalesced [783] bitmap_line_ydxi::xd#8 ← bitmap_line_ydxi::xd#0 +Coalesced [784] bitmap_line_ydxi::x#9 ← bitmap_line_ydxi::x#0 +Coalesced [785] bitmap_line_ydxi::y#9 ← bitmap_line_ydxi::y#0 +Coalesced [786] bitmap_line_ydxi::yd#8 ← bitmap_line_ydxi::yd#0 +Coalesced [787] bitmap_line_ydxi::y1#8 ← bitmap_line_ydxi::y1#0 +Coalesced [796] bitmap_line_xdyi::yd#7 ← bitmap_line_xdyi::yd#0 +Coalesced [797] bitmap_line_xdyi::x#8 ← bitmap_line_xdyi::x#0 +Coalesced [798] bitmap_line_xdyi::y#8 ← bitmap_line_xdyi::y#0 +Coalesced [799] bitmap_line_xdyi::xd#7 ← bitmap_line_xdyi::xd#0 +Coalesced [800] bitmap_line_xdyi::x1#7 ← bitmap_line_xdyi::x1#0 +Coalesced [810] bitmap_line_ydxd::xd#7 ← bitmap_line_ydxd::xd#0 +Coalesced [811] bitmap_line_ydxd::x#8 ← bitmap_line_ydxd::x#0 +Coalesced [812] bitmap_line_ydxd::y#9 ← bitmap_line_ydxd::y#0 +Coalesced [813] bitmap_line_ydxd::yd#7 ← bitmap_line_ydxd::yd#0 +Coalesced [814] bitmap_line_ydxd::y1#7 ← bitmap_line_ydxd::y1#0 +Coalesced [822] bitmap_line_xdyd::yd#7 ← bitmap_line_xdyd::yd#0 +Coalesced [823] bitmap_line_xdyd::x#8 ← bitmap_line_xdyd::x#0 +Coalesced [824] bitmap_line_xdyd::y#8 ← bitmap_line_xdyd::y#0 +Coalesced [825] bitmap_line_xdyd::xd#7 ← bitmap_line_xdyd::xd#0 +Coalesced [826] bitmap_line_xdyd::x1#7 ← bitmap_line_xdyd::x1#0 +Coalesced [838] bitmap_line_ydxd::xd#8 ← bitmap_line_ydxd::xd#1 +Coalesced [839] bitmap_line_ydxd::x#9 ← bitmap_line_ydxd::x#1 +Coalesced [840] bitmap_line_ydxd::y#10 ← bitmap_line_ydxd::y#1 +Coalesced [841] bitmap_line_ydxd::yd#8 ← bitmap_line_ydxd::yd#1 +Coalesced [842] bitmap_line_ydxd::y1#8 ← bitmap_line_ydxd::y1#1 +Coalesced [850] bitmap_line_xdyd::yd#8 ← bitmap_line_xdyd::yd#1 +Coalesced [851] bitmap_line_xdyd::x#9 ← bitmap_line_xdyd::x#1 +Coalesced [852] bitmap_line_xdyd::y#9 ← bitmap_line_xdyd::y#1 +Coalesced [853] bitmap_line_xdyd::xd#8 ← bitmap_line_xdyd::xd#1 +Coalesced [854] bitmap_line_xdyd::x1#8 ← bitmap_line_xdyd::x1#1 +Coalesced [864] bitmap_line_ydxi::xd#7 ← bitmap_line_ydxi::xd#1 +Coalesced [865] bitmap_line_ydxi::x#8 ← bitmap_line_ydxi::x#1 +Coalesced [866] bitmap_line_ydxi::y#8 ← bitmap_line_ydxi::y#1 +Coalesced [867] bitmap_line_ydxi::yd#7 ← bitmap_line_ydxi::yd#1 +Coalesced [868] bitmap_line_ydxi::y1#7 ← bitmap_line_ydxi::y1#1 +Coalesced [876] bitmap_line_xdyi::yd#8 ← bitmap_line_xdyi::yd#1 +Coalesced [877] bitmap_line_xdyi::x#9 ← bitmap_line_xdyi::x#1 +Coalesced [878] bitmap_line_xdyi::y#9 ← bitmap_line_xdyi::y#1 +Coalesced [879] bitmap_line_xdyi::xd#8 ← bitmap_line_xdyi::xd#1 +Coalesced [880] bitmap_line_xdyi::x1#8 ← bitmap_line_xdyi::x1#1 +Coalesced [885] bitmap_line_xdyi::x#10 ← bitmap_line_xdyi::x#6 +Coalesced [886] bitmap_line_xdyi::y#10 ← bitmap_line_xdyi::y#5 +Coalesced [887] bitmap_line_xdyi::e#7 ← bitmap_line_xdyi::e#0 +Coalesced [891] bitmap_plot::x#6 ← bitmap_plot::x#0 +Coalesced [892] bitmap_plot::y#6 ← bitmap_plot::y#0 +Coalesced [899] bitmap_line_xdyi::y#12 ← bitmap_line_xdyi::y#2 +Coalesced [900] bitmap_line_xdyi::e#9 ← bitmap_line_xdyi::e#2 +Coalesced [905] bitmap_line_xdyi::x#11 ← bitmap_line_xdyi::x#2 +Coalesced [906] bitmap_line_xdyi::y#11 ← bitmap_line_xdyi::y#6 +Coalesced [907] bitmap_line_xdyi::e#8 ← bitmap_line_xdyi::e#6 +Coalesced (already) [908] bitmap_line_xdyi::y#13 ← bitmap_line_xdyi::y#3 +Coalesced [909] bitmap_line_xdyi::e#10 ← bitmap_line_xdyi::e#1 +Coalesced [919] bitmap_line_ydxi::x#10 ← bitmap_line_ydxi::x#5 +Coalesced [920] bitmap_line_ydxi::y#10 ← bitmap_line_ydxi::y#6 +Coalesced [921] bitmap_line_ydxi::e#7 ← bitmap_line_ydxi::e#0 +Coalesced [925] bitmap_plot::x#8 ← bitmap_plot::x#2 +Coalesced [926] bitmap_plot::y#8 ← bitmap_plot::y#2 +Coalesced [933] bitmap_line_ydxi::x#12 ← bitmap_line_ydxi::x#2 +Coalesced [934] bitmap_line_ydxi::e#9 ← bitmap_line_ydxi::e#2 +Coalesced [939] bitmap_line_ydxi::x#11 ← bitmap_line_ydxi::x#6 +Coalesced [940] bitmap_line_ydxi::y#11 ← bitmap_line_ydxi::y#2 +Coalesced [941] bitmap_line_ydxi::e#8 ← bitmap_line_ydxi::e#6 +Coalesced (already) [942] bitmap_line_ydxi::x#13 ← bitmap_line_ydxi::x#3 +Coalesced [943] bitmap_line_ydxi::e#10 ← bitmap_line_ydxi::e#1 +Coalesced [946] bitmap_line_xdyd::x#10 ← bitmap_line_xdyd::x#6 +Coalesced [947] bitmap_line_xdyd::y#10 ← bitmap_line_xdyd::y#5 +Coalesced [948] bitmap_line_xdyd::e#7 ← bitmap_line_xdyd::e#0 +Coalesced [952] bitmap_plot::x#5 ← bitmap_plot::x#1 +Coalesced [953] bitmap_plot::y#5 ← bitmap_plot::y#1 +Coalesced [960] bitmap_line_xdyd::y#12 ← bitmap_line_xdyd::y#2 +Coalesced [961] bitmap_line_xdyd::e#9 ← bitmap_line_xdyd::e#2 +Coalesced [966] bitmap_line_xdyd::x#11 ← bitmap_line_xdyd::x#2 +Coalesced [967] bitmap_line_xdyd::y#11 ← bitmap_line_xdyd::y#6 +Coalesced [968] bitmap_line_xdyd::e#8 ← bitmap_line_xdyd::e#6 +Coalesced (already) [969] bitmap_line_xdyd::y#13 ← bitmap_line_xdyd::y#3 +Coalesced [970] bitmap_line_xdyd::e#10 ← bitmap_line_xdyd::e#1 +Coalesced [973] bitmap_line_ydxd::x#10 ← bitmap_line_ydxd::x#5 +Coalesced [974] bitmap_line_ydxd::y#11 ← bitmap_line_ydxd::y#7 +Coalesced [975] bitmap_line_ydxd::e#7 ← bitmap_line_ydxd::e#0 +Coalesced [979] bitmap_plot::x#7 ← bitmap_plot::x#3 +Coalesced [980] bitmap_plot::y#7 ← bitmap_plot::y#3 +Coalesced [987] bitmap_line_ydxd::x#12 ← bitmap_line_ydxd::x#2 +Coalesced [988] bitmap_line_ydxd::e#9 ← bitmap_line_ydxd::e#2 +Coalesced [993] bitmap_line_ydxd::x#11 ← bitmap_line_ydxd::x#6 +Coalesced [994] bitmap_line_ydxd::y#12 ← bitmap_line_ydxd::y#3 +Coalesced [995] bitmap_line_ydxd::e#8 ← bitmap_line_ydxd::e#6 +Coalesced (already) [996] bitmap_line_ydxd::x#13 ← bitmap_line_ydxd::x#3 +Coalesced [997] bitmap_line_ydxd::e#10 ← bitmap_line_ydxd::e#1 +Coalesced [1001] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 +Coalesced [1010] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 +Coalesced [1011] bitmap_clear::y#5 ← bitmap_clear::y#1 +Coalesced (already) [1012] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 +Coalesced [1013] bitmap_clear::x#3 ← bitmap_clear::x#1 +Coalesced [1036] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [1041] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [1042] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [1043] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [1044] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [1045] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [1046] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [1065] mode_mcchar::col#6 ← mode_mcchar::col#3 +Coalesced [1066] mode_mcchar::ch#6 ← mode_mcchar::ch#3 +Coalesced [1086] mode_mcchar::cy#5 ← mode_mcchar::cy#1 +Coalesced [1087] mode_mcchar::col#5 ← mode_mcchar::col#1 +Coalesced [1088] mode_mcchar::ch#5 ← mode_mcchar::ch#1 +Coalesced [1089] mode_mcchar::cx#3 ← mode_mcchar::cx#1 +Coalesced (already) [1090] mode_mcchar::col#7 ← mode_mcchar::col#1 +Coalesced (already) [1091] mode_mcchar::ch#7 ← mode_mcchar::ch#1 +Coalesced [1092] mode_mcchar::i#3 ← mode_mcchar::i#1 +Coalesced [1112] mode_ecmchar::col#6 ← mode_ecmchar::col#3 +Coalesced [1113] mode_ecmchar::ch#6 ← mode_ecmchar::ch#3 +Coalesced [1133] mode_ecmchar::cy#5 ← mode_ecmchar::cy#1 +Coalesced [1134] mode_ecmchar::col#5 ← mode_ecmchar::col#1 +Coalesced [1135] mode_ecmchar::ch#5 ← mode_ecmchar::ch#1 +Coalesced [1136] mode_ecmchar::cx#3 ← mode_ecmchar::cx#1 +Coalesced (already) [1137] mode_ecmchar::col#7 ← mode_ecmchar::col#1 +Coalesced (already) [1138] mode_ecmchar::ch#7 ← mode_ecmchar::ch#1 +Coalesced [1139] mode_ecmchar::i#3 ← mode_ecmchar::i#1 +Coalesced [1156] mode_stdchar::col#6 ← mode_stdchar::col#3 +Coalesced [1157] mode_stdchar::ch#6 ← mode_stdchar::ch#3 +Coalesced [1177] mode_stdchar::cy#5 ← mode_stdchar::cy#1 +Coalesced [1178] mode_stdchar::col#5 ← mode_stdchar::col#1 +Coalesced [1179] mode_stdchar::ch#5 ← mode_stdchar::ch#1 +Coalesced [1180] mode_stdchar::cx#3 ← mode_stdchar::cx#1 +Coalesced (already) [1181] mode_stdchar::col#7 ← mode_stdchar::col#1 +Coalesced (already) [1182] mode_stdchar::ch#7 ← mode_stdchar::ch#1 +Coalesced [1183] mode_stdchar::i#3 ← mode_stdchar::i#1 +Coalesced [1188] print_str_lines::str#10 ← print_str_lines::str#2 +Coalesced [1189] print_char_cursor#100 ← print_char_cursor#19 +Coalesced [1196] print_char_cursor#103 ← print_char_cursor#1 +Coalesced [1201] print_str_lines::str#9 ← print_str_lines::str#0 +Not coalescing [1202] print_char_cursor#99 ← print_line_cursor#19 +Coalesced [1203] print_line_cursor#99 ← print_line_cursor#19 +Coalesced (already) [1204] print_str_lines::str#11 ← print_str_lines::str#0 +Coalesced [1205] print_char_cursor#101 ← print_char_cursor#32 +Coalesced (already) [1206] print_char_cursor#102 ← print_char_cursor#17 +Coalesced [1207] print_line_cursor#100 ← print_line_cursor#17 +Coalesced (already) [1213] print_line_cursor#101 ← print_line_cursor#19 +Coalesced [1226] memset::dst#3 ← memset::dst#1 Coalesced down to 125 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @17 @@ -10697,12 +10588,13 @@ Culled Empty Block (label) mode_8bppchunkybmm::@15 Culled Empty Block (label) mode_8bppchunkybmm::@16 Culled Empty Block (label) mode_8bppchunkybmm::@13 Culled Empty Block (label) mode_ctrl::@29 +Culled Empty Block (label) mode_ctrl::@40 +Culled Empty Block (label) mode_ctrl::@46 Culled Empty Block (label) mode_ctrl::@45 Culled Empty Block (label) mode_ctrl::@44 Culled Empty Block (label) mode_ctrl::@43 Culled Empty Block (label) mode_ctrl::@42 Culled Empty Block (label) mode_ctrl::@41 -Culled Empty Block (label) mode_ctrl::@40 Culled Empty Block (label) mode_8bpppixelcell::@2 Culled Empty Block (label) mode_8bpppixelcell::@15 Culled Empty Block (label) mode_8bpppixelcell::@19 @@ -10898,7 +10790,7 @@ Renumbering block mode_ctrl::@36 to mode_ctrl::@23 Renumbering block mode_ctrl::@37 to mode_ctrl::@24 Renumbering block mode_ctrl::@38 to mode_ctrl::@25 Renumbering block mode_ctrl::@39 to mode_ctrl::@26 -Renumbering block mode_ctrl::@46 to mode_ctrl::@27 +Renumbering block mode_ctrl::@47 to mode_ctrl::@27 Renumbering block mode_stdbitmap::@11 to mode_stdbitmap::@10 Renumbering block mode_twoplanebitmap::@7 to mode_twoplanebitmap::@6 Renumbering block mode_twoplanebitmap::@8 to mode_twoplanebitmap::@7 @@ -11278,7 +11170,7 @@ mode_ctrl: scope:[mode_ctrl] from mode_8bppchunkybmm::@10 mode_8bpppixelcell::@ [155] (byte) dtv_control#144 ← phi( mode_8bppchunkybmm::@10/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0 mode_8bpppixelcell::@13/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0 mode_ecmchar::@6/(byte) 0 mode_hicolecmchar::@6/(const byte) DTV_HIGHCOLOR#0 mode_hicolmcchar::@6/(const byte) DTV_HIGHCOLOR#0 mode_hicolstdchar::@6/(const byte) DTV_HIGHCOLOR#0 mode_mcchar::@6/(byte) 0 mode_sixsfred2::@12/(const byte) DTV_LINEAR#0 mode_sixsfred::@12/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 mode_stdbitmap::@8/(byte) 0 mode_stdchar::@6/(byte) 0 mode_twoplanebitmap::@15/(const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 ) to:mode_ctrl::@1 mode_ctrl::@1: scope:[mode_ctrl] from mode_ctrl mode_ctrl::@11 mode_ctrl::@18 - [156] (byte) dtv_control#114 ← phi( mode_ctrl/(byte) dtv_control#144 mode_ctrl::@18/(byte) dtv_control#17 ) + [156] (byte) dtv_control#114 ← phi( mode_ctrl/(byte) dtv_control#144 mode_ctrl::@11/(byte) dtv_control#114 mode_ctrl::@18/(byte) dtv_control#17 ) to:mode_ctrl::@2 mode_ctrl::@2: scope:[mode_ctrl] from mode_ctrl::@1 mode_ctrl::@2 [157] if(*((const byte*) RASTER#0)!=(byte) $ff) goto mode_ctrl::@2 @@ -12888,7 +12780,7 @@ VARIABLE REGISTER WEIGHTS (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 2002.0 (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 1003.0 (byte) dtv_control -(byte) dtv_control#114 42.099999999999994 +(byte) dtv_control#114 80.52941176470588 (byte) dtv_control#144 2.0 (byte) dtv_control#17 67.33333333333333 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) @@ -15103,13 +14995,11 @@ mode_ctrl: { .label _24 = $c9 .label _28 = $cb .label ctrl = $d - // [156] phi from mode_ctrl mode_ctrl::@18 to mode_ctrl::@1 [phi:mode_ctrl/mode_ctrl::@18->mode_ctrl::@1] + // [156] phi from mode_ctrl mode_ctrl::@11 mode_ctrl::@18 to mode_ctrl::@1 [phi:mode_ctrl/mode_ctrl::@11/mode_ctrl::@18->mode_ctrl::@1] b1_from_mode_ctrl: - b1_from_b18: - // [156] phi (byte) dtv_control#114 = (byte) dtv_control#144 [phi:mode_ctrl/mode_ctrl::@18->mode_ctrl::@1#0] -- register_copy - jmp b1 - // [156] phi from mode_ctrl::@11 to mode_ctrl::@1 [phi:mode_ctrl::@11->mode_ctrl::@1] b1_from_b11: + b1_from_b18: + // [156] phi (byte) dtv_control#114 = (byte) dtv_control#144 [phi:mode_ctrl/mode_ctrl::@11/mode_ctrl::@18->mode_ctrl::@1#0] -- register_copy jmp b1 // mode_ctrl::@1 b1: @@ -20563,7 +20453,7 @@ Uplift Scope [bitmap_line_ydxd] 4,742.47: zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 Uplift Scope [mode_hicolstdchar] 2,002: zp ZP_BYTE:239 [ mode_hicolstdchar::$25 ] 2,002: zp ZP_BYTE:241 [ mode_hicolstdchar::$27 ] 1,835.17: zp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] 1,019.76: zp ZP_WORD:87 [ mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 ] 1,010.6: zp ZP_WORD:89 [ mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 ] 1,001: zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] 1,001: zp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] 353.5: zp ZP_BYTE:84 [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] 251.75: zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] Uplift Scope [mode_hicolecmchar] 2,002: zp ZP_BYTE:235 [ mode_hicolecmchar::$26 ] 2,002: zp ZP_BYTE:237 [ mode_hicolecmchar::$28 ] 1,835.17: zp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] 1,019.76: zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 ] 1,010.6: zp ZP_WORD:82 [ mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 ] 1,001: zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] 1,001: zp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] 353.5: zp ZP_BYTE:77 [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] 251.75: zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] Uplift Scope [mode_hicolmcchar] 2,002: zp ZP_BYTE:231 [ mode_hicolmcchar::$26 ] 2,002: zp ZP_BYTE:233 [ mode_hicolmcchar::$28 ] 1,835.17: zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] 1,019.76: zp ZP_WORD:73 [ mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 ] 1,010.6: zp ZP_WORD:75 [ mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 ] 1,001: zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] 1,001: zp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] 353.5: zp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] 251.75: zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] -Uplift Scope [] 3,698: zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#99 print_char_cursor#32 print_char_cursor#1 ] 2,653.58: zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] 111.43: zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] +Uplift Scope [] 3,698: zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#99 print_char_cursor#32 print_char_cursor#1 ] 2,653.58: zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] 149.86: zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] Uplift Scope [bitmap_clear] 2,180.6: zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] 2,168.83: zp ZP_BYTE:126 [ bitmap_clear::x#2 bitmap_clear::x#1 ] 185.17: zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 2: zp ZP_WORD:269 [ bitmap_clear::bitmap#0 ] Uplift Scope [menu] 353.5: zp ZP_BYTE:2 [ menu::i#2 menu::i#1 ] 303: zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] 202: zp ZP_BYTE:162 [ menu::$29 ] 202: zp ZP_BYTE:164 [ menu::$33 ] 202: zp ZP_BYTE:166 [ menu::$37 ] 202: zp ZP_BYTE:168 [ menu::$41 ] 202: zp ZP_BYTE:170 [ menu::$45 ] 202: zp ZP_BYTE:172 [ menu::$49 ] 202: zp ZP_BYTE:174 [ menu::$53 ] 202: zp ZP_BYTE:176 [ menu::$57 ] 202: zp ZP_BYTE:178 [ menu::$61 ] 202: zp ZP_BYTE:180 [ menu::$65 ] 202: zp ZP_BYTE:182 [ menu::$69 ] 202: zp ZP_BYTE:184 [ menu::$73 ] Uplift Scope [dtvSetCpuBankSegment1] 3,005: zp ZP_BYTE:15 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] @@ -20578,400 +20468,400 @@ Uplift Scope [print_cls] Uplift Scope [print_set_screen] Uplift Scope [main] -Uplifting [mode_8bpppixelcell] best 3632720 combination reg byte a [ mode_8bpppixelcell::c#2 mode_8bpppixelcell::c#3 ] reg byte a [ mode_8bpppixelcell::$20 ] zp ZP_BYTE:29 [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] zp ZP_WORD:26 [ mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] zp ZP_BYTE:211 [ mode_8bpppixelcell::$14 ] zp ZP_BYTE:213 [ mode_8bpppixelcell::$16 ] zp ZP_BYTE:214 [ mode_8bpppixelcell::$17 ] zp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] zp ZP_WORD:22 [ mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 ] zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] zp ZP_WORD:19 [ mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 ] zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] zp ZP_BYTE:16 [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] +Uplifting [mode_8bpppixelcell] best 3629720 combination reg byte a [ mode_8bpppixelcell::c#2 mode_8bpppixelcell::c#3 ] reg byte a [ mode_8bpppixelcell::$20 ] zp ZP_BYTE:29 [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] zp ZP_WORD:26 [ mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 ] zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] zp ZP_BYTE:211 [ mode_8bpppixelcell::$14 ] zp ZP_BYTE:213 [ mode_8bpppixelcell::$16 ] zp ZP_BYTE:214 [ mode_8bpppixelcell::$17 ] zp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] zp ZP_WORD:22 [ mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 ] zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] zp ZP_WORD:19 [ mode_8bpppixelcell::gfxa#2 mode_8bpppixelcell::gfxa#3 mode_8bpppixelcell::gfxa#1 ] zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] zp ZP_BYTE:16 [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] Limited combination testing to 10 combinations of 3538944 possible. -Uplifting [mode_ctrl] best 3604820 combination reg byte x [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ] reg byte a [ mode_ctrl::$1 ] zp ZP_BYTE:191 [ mode_ctrl::$4 ] zp ZP_BYTE:193 [ mode_ctrl::$8 ] zp ZP_BYTE:195 [ mode_ctrl::$12 ] zp ZP_BYTE:197 [ mode_ctrl::$16 ] zp ZP_BYTE:199 [ mode_ctrl::$20 ] zp ZP_BYTE:201 [ mode_ctrl::$24 ] zp ZP_BYTE:203 [ mode_ctrl::$28 ] +Uplifting [mode_ctrl] best 3601820 combination reg byte x [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ] reg byte a [ mode_ctrl::$1 ] zp ZP_BYTE:191 [ mode_ctrl::$4 ] zp ZP_BYTE:193 [ mode_ctrl::$8 ] zp ZP_BYTE:195 [ mode_ctrl::$12 ] zp ZP_BYTE:197 [ mode_ctrl::$16 ] zp ZP_BYTE:199 [ mode_ctrl::$20 ] zp ZP_BYTE:201 [ mode_ctrl::$24 ] zp ZP_BYTE:203 [ mode_ctrl::$28 ] Limited combination testing to 10 combinations of 196608 possible. -Uplifting [mode_twoplanebitmap] best 3589820 combination zp ZP_WORD:50 [ mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 ] zp ZP_WORD:54 [ mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 ] reg byte x [ mode_twoplanebitmap::bx#2 mode_twoplanebitmap::bx#1 ] reg byte a [ mode_twoplanebitmap::$16 ] zp ZP_BYTE:222 [ mode_twoplanebitmap::$18 ] zp ZP_BYTE:223 [ mode_twoplanebitmap::$19 ] zp ZP_BYTE:224 [ mode_twoplanebitmap::$22 ] zp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] zp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] zp ZP_WORD:47 [ mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 ] zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] zp ZP_BYTE:44 [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] +Uplifting [mode_twoplanebitmap] best 3586820 combination zp ZP_WORD:50 [ mode_twoplanebitmap::gfxa#3 mode_twoplanebitmap::gfxa#7 mode_twoplanebitmap::gfxa#6 mode_twoplanebitmap::gfxa#2 mode_twoplanebitmap::gfxa#1 ] zp ZP_WORD:54 [ mode_twoplanebitmap::gfxb#2 mode_twoplanebitmap::gfxb#3 mode_twoplanebitmap::gfxb#1 ] reg byte x [ mode_twoplanebitmap::bx#2 mode_twoplanebitmap::bx#1 ] reg byte a [ mode_twoplanebitmap::$16 ] zp ZP_BYTE:222 [ mode_twoplanebitmap::$18 ] zp ZP_BYTE:223 [ mode_twoplanebitmap::$19 ] zp ZP_BYTE:224 [ mode_twoplanebitmap::$22 ] zp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] zp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] zp ZP_WORD:47 [ mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 ] zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] zp ZP_BYTE:44 [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] Limited combination testing to 10 combinations of 196608 possible. -Uplifting [mode_sixsfred2] best 3574820 combination zp ZP_WORD:67 [ mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 ] reg byte x [ mode_sixsfred2::bx#2 mode_sixsfred2::bx#1 ] reg byte a [ mode_sixsfred2::$15 ] zp ZP_BYTE:227 [ mode_sixsfred2::$17 ] zp ZP_BYTE:228 [ mode_sixsfred2::$18 ] zp ZP_BYTE:229 [ mode_sixsfred2::$21 ] zp ZP_BYTE:230 [ mode_sixsfred2::row#0 ] zp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] zp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] zp ZP_WORD:63 [ mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 ] zp ZP_WORD:60 [ mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 ] zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] zp ZP_BYTE:57 [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] +Uplifting [mode_sixsfred2] best 3571820 combination zp ZP_WORD:67 [ mode_sixsfred2::gfxb#2 mode_sixsfred2::gfxb#3 mode_sixsfred2::gfxb#1 ] reg byte x [ mode_sixsfred2::bx#2 mode_sixsfred2::bx#1 ] reg byte a [ mode_sixsfred2::$15 ] zp ZP_BYTE:227 [ mode_sixsfred2::$17 ] zp ZP_BYTE:228 [ mode_sixsfred2::$18 ] zp ZP_BYTE:229 [ mode_sixsfred2::$21 ] zp ZP_BYTE:230 [ mode_sixsfred2::row#0 ] zp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] zp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] zp ZP_WORD:63 [ mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 ] zp ZP_WORD:60 [ mode_sixsfred2::col#2 mode_sixsfred2::col#3 mode_sixsfred2::col#1 ] zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] zp ZP_BYTE:57 [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] Limited combination testing to 10 combinations of 786432 possible. -Uplifting [mode_sixsfred] best 3549820 combination zp ZP_WORD:41 [ mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 ] reg byte x [ mode_sixsfred::bx#2 mode_sixsfred::bx#1 ] reg byte x [ mode_sixsfred::cx#2 mode_sixsfred::cx#1 ] reg byte a [ mode_sixsfred::$17 ] zp ZP_BYTE:217 [ mode_sixsfred::$18 ] zp ZP_BYTE:218 [ mode_sixsfred::$21 ] zp ZP_BYTE:219 [ mode_sixsfred::row#0 ] zp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 ] zp ZP_WORD:37 [ mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 ] zp ZP_BYTE:31 [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] +Uplifting [mode_sixsfred] best 3546820 combination zp ZP_WORD:41 [ mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 ] reg byte x [ mode_sixsfred::bx#2 mode_sixsfred::bx#1 ] reg byte x [ mode_sixsfred::cx#2 mode_sixsfred::cx#1 ] reg byte a [ mode_sixsfred::$17 ] zp ZP_BYTE:217 [ mode_sixsfred::$18 ] zp ZP_BYTE:218 [ mode_sixsfred::$21 ] zp ZP_BYTE:219 [ mode_sixsfred::row#0 ] zp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] zp ZP_WORD:34 [ mode_sixsfred::col#2 mode_sixsfred::col#3 mode_sixsfred::col#1 ] zp ZP_WORD:37 [ mode_sixsfred::gfxa#2 mode_sixsfred::gfxa#3 mode_sixsfred::gfxa#1 ] zp ZP_BYTE:31 [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] Limited combination testing to 10 combinations of 65536 possible. -Uplifting [mode_stdchar] best 3537820 combination reg byte a [ mode_stdchar::$25 ] reg byte a [ mode_stdchar::$26 ] zp ZP_BYTE:290 [ mode_stdchar::$27 ] zp ZP_BYTE:292 [ mode_stdchar::$29 ] zp ZP_BYTE:293 [ mode_stdchar::$30 ] zp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] zp ZP_WORD:149 [ mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 ] zp ZP_BYTE:291 [ mode_stdchar::$28 ] zp ZP_WORD:151 [ mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 ] zp ZP_BYTE:146 [ mode_stdchar::i#2 mode_stdchar::i#1 ] zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] +Uplifting [mode_stdchar] best 3534820 combination reg byte a [ mode_stdchar::$25 ] reg byte a [ mode_stdchar::$26 ] zp ZP_BYTE:290 [ mode_stdchar::$27 ] zp ZP_BYTE:292 [ mode_stdchar::$29 ] zp ZP_BYTE:293 [ mode_stdchar::$30 ] zp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] zp ZP_WORD:149 [ mode_stdchar::col#2 mode_stdchar::col#3 mode_stdchar::col#1 ] zp ZP_BYTE:291 [ mode_stdchar::$28 ] zp ZP_WORD:151 [ mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 ] zp ZP_BYTE:146 [ mode_stdchar::i#2 mode_stdchar::i#1 ] zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] Limited combination testing to 10 combinations of 36864 possible. -Uplifting [mode_ecmchar] best 3525820 combination reg byte a [ mode_ecmchar::$26 ] reg byte a [ mode_ecmchar::$27 ] zp ZP_BYTE:284 [ mode_ecmchar::$28 ] zp ZP_BYTE:286 [ mode_ecmchar::$30 ] zp ZP_BYTE:287 [ mode_ecmchar::$31 ] zp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] zp ZP_WORD:142 [ mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 ] zp ZP_BYTE:285 [ mode_ecmchar::$29 ] zp ZP_WORD:144 [ mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 ] zp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] +Uplifting [mode_ecmchar] best 3522820 combination reg byte a [ mode_ecmchar::$26 ] reg byte a [ mode_ecmchar::$27 ] zp ZP_BYTE:284 [ mode_ecmchar::$28 ] zp ZP_BYTE:286 [ mode_ecmchar::$30 ] zp ZP_BYTE:287 [ mode_ecmchar::$31 ] zp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] zp ZP_WORD:142 [ mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 ] zp ZP_BYTE:285 [ mode_ecmchar::$29 ] zp ZP_WORD:144 [ mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 ] zp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] Limited combination testing to 10 combinations of 36864 possible. -Uplifting [mode_mcchar] best 3513820 combination reg byte a [ mode_mcchar::$26 ] reg byte a [ mode_mcchar::$27 ] zp ZP_BYTE:278 [ mode_mcchar::$28 ] zp ZP_BYTE:280 [ mode_mcchar::$30 ] zp ZP_BYTE:281 [ mode_mcchar::$31 ] zp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] zp ZP_WORD:135 [ mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] zp ZP_BYTE:279 [ mode_mcchar::$29 ] zp ZP_WORD:137 [ mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] zp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] +Uplifting [mode_mcchar] best 3510820 combination reg byte a [ mode_mcchar::$26 ] reg byte a [ mode_mcchar::$27 ] zp ZP_BYTE:278 [ mode_mcchar::$28 ] zp ZP_BYTE:280 [ mode_mcchar::$30 ] zp ZP_BYTE:281 [ mode_mcchar::$31 ] zp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] zp ZP_WORD:135 [ mode_mcchar::col#2 mode_mcchar::col#3 mode_mcchar::col#1 ] zp ZP_BYTE:279 [ mode_mcchar::$29 ] zp ZP_WORD:137 [ mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 ] zp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] Limited combination testing to 10 combinations of 36864 possible. -Uplifting [bitmap_plot] best 3489811 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:261 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:265 [ bitmap_plot::$1 ] zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:263 [ bitmap_plot::plotter#0 ] +Uplifting [bitmap_plot] best 3486811 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp ZP_WORD:261 [ bitmap_plot::plotter_y#0 ] zp ZP_BYTE:265 [ bitmap_plot::$1 ] zp ZP_WORD:259 [ bitmap_plot::plotter_x#0 ] zp ZP_WORD:263 [ bitmap_plot::plotter#0 ] Limited combination testing to 10 combinations of 36 possible. -Uplifting [mode_stdbitmap] best 3477811 combination reg byte a [ mode_stdbitmap::$22 ] reg byte a [ mode_stdbitmap::$25 ] zp ZP_BYTE:247 [ mode_stdbitmap::$26 ] zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] zp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +Uplifting [mode_stdbitmap] best 3474811 combination reg byte a [ mode_stdbitmap::$22 ] reg byte a [ mode_stdbitmap::$25 ] zp ZP_BYTE:247 [ mode_stdbitmap::$26 ] zp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] zp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] zp ZP_WORD:94 [ mode_stdbitmap::ch#2 mode_stdbitmap::ch#3 mode_stdbitmap::ch#1 ] zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] zp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] Limited combination testing to 10 combinations of 13824 possible. -Uplifting [mode_8bppchunkybmm] best 3465511 combination reg byte x [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ] zp ZP_WORD:10 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] reg byte a [ mode_8bppchunkybmm::c#0 ] zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] zp ZP_WORD:185 [ mode_8bppchunkybmm::$26 ] zp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] +Uplifting [mode_8bppchunkybmm] best 3462511 combination reg byte x [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ] zp ZP_WORD:10 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 ] reg byte a [ mode_8bppchunkybmm::c#0 ] zp ZP_WORD:7 [ mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x#1 ] zp ZP_WORD:185 [ mode_8bppchunkybmm::$26 ] zp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [bitmap_line_xdyi] best 3459511 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 3456511 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_xdyd] best 3453511 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 3450511 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxi] best 3443505 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 3440505 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [bitmap_line_ydxd] best 3433499 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 3430499 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Limited combination testing to 10 combinations of 256 possible. -Uplifting [mode_hicolstdchar] best 3421499 combination reg byte a [ mode_hicolstdchar::$25 ] reg byte a [ mode_hicolstdchar::$27 ] zp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] zp ZP_WORD:87 [ mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 ] zp ZP_WORD:89 [ mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 ] zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] zp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] zp ZP_BYTE:84 [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] +Uplifting [mode_hicolstdchar] best 3418499 combination reg byte a [ mode_hicolstdchar::$25 ] reg byte a [ mode_hicolstdchar::$27 ] zp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] zp ZP_WORD:87 [ mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 ] zp ZP_WORD:89 [ mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 ] zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] zp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] zp ZP_BYTE:84 [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [mode_hicolecmchar] best 3409499 combination reg byte a [ mode_hicolecmchar::$26 ] reg byte a [ mode_hicolecmchar::$28 ] zp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 ] zp ZP_WORD:82 [ mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 ] zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] zp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] zp ZP_BYTE:77 [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] +Uplifting [mode_hicolecmchar] best 3406499 combination reg byte a [ mode_hicolecmchar::$26 ] reg byte a [ mode_hicolecmchar::$28 ] zp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] zp ZP_WORD:80 [ mode_hicolecmchar::col#2 mode_hicolecmchar::col#3 mode_hicolecmchar::col#1 ] zp ZP_WORD:82 [ mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 ] zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] zp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] zp ZP_BYTE:77 [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [mode_hicolmcchar] best 3397499 combination reg byte a [ mode_hicolmcchar::$26 ] reg byte a [ mode_hicolmcchar::$28 ] zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] zp ZP_WORD:73 [ mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 ] zp ZP_WORD:75 [ mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 ] zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] zp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] zp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] +Uplifting [mode_hicolmcchar] best 3394499 combination reg byte a [ mode_hicolmcchar::$26 ] reg byte a [ mode_hicolmcchar::$28 ] zp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] zp ZP_WORD:73 [ mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 ] zp ZP_WORD:75 [ mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 ] zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] zp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] zp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] Limited combination testing to 10 combinations of 2304 possible. -Uplifting [] best 3397499 combination zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#99 print_char_cursor#32 print_char_cursor#1 ] zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] -Uplifting [bitmap_clear] best 3388499 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:269 [ bitmap_clear::bitmap#0 ] -Uplifting [menu] best 3386699 combination reg byte x [ menu::i#2 menu::i#1 ] zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] reg byte a [ menu::$29 ] zp ZP_BYTE:164 [ menu::$33 ] zp ZP_BYTE:166 [ menu::$37 ] zp ZP_BYTE:168 [ menu::$41 ] zp ZP_BYTE:170 [ menu::$45 ] zp ZP_BYTE:172 [ menu::$49 ] zp ZP_BYTE:174 [ menu::$53 ] zp ZP_BYTE:176 [ menu::$57 ] zp ZP_BYTE:178 [ menu::$61 ] zp ZP_BYTE:180 [ menu::$65 ] zp ZP_BYTE:182 [ menu::$69 ] zp ZP_BYTE:184 [ menu::$73 ] +Uplifting [] best 3394499 combination zp ZP_WORD:155 [ print_char_cursor#17 print_char_cursor#19 print_char_cursor#99 print_char_cursor#32 print_char_cursor#1 ] zp ZP_WORD:157 [ print_line_cursor#18 print_line_cursor#17 print_line_cursor#19 ] zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] +Uplifting [bitmap_clear] best 3385499 combination zp ZP_WORD:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:269 [ bitmap_clear::bitmap#0 ] +Uplifting [menu] best 3383699 combination reg byte x [ menu::i#2 menu::i#1 ] zp ZP_WORD:3 [ menu::c#2 menu::c#1 ] reg byte a [ menu::$29 ] zp ZP_BYTE:164 [ menu::$33 ] zp ZP_BYTE:166 [ menu::$37 ] zp ZP_BYTE:168 [ menu::$41 ] zp ZP_BYTE:170 [ menu::$45 ] zp ZP_BYTE:172 [ menu::$49 ] zp ZP_BYTE:174 [ menu::$53 ] zp ZP_BYTE:176 [ menu::$57 ] zp ZP_BYTE:178 [ menu::$61 ] zp ZP_BYTE:180 [ menu::$65 ] zp ZP_BYTE:182 [ menu::$69 ] zp ZP_BYTE:184 [ menu::$73 ] Limited combination testing to 10 combinations of 50331648 possible. -Uplifting [dtvSetCpuBankSegment1] best 3385690 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] -Uplifting [print_str_lines] best 3373690 combination zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] -Uplifting [bitmap_init] best 3370690 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:271 [ bitmap_init::$0 ] zp ZP_BYTE:273 [ bitmap_init::$7 ] zp ZP_BYTE:274 [ bitmap_init::$8 ] zp ZP_BYTE:275 [ bitmap_init::$9 ] zp ZP_BYTE:272 [ bitmap_init::$10 ] +Uplifting [dtvSetCpuBankSegment1] best 3382690 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] +Uplifting [print_str_lines] best 3370690 combination zp ZP_WORD:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] +Uplifting [bitmap_init] best 3367690 combination zp ZP_WORD:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp ZP_BYTE:271 [ bitmap_init::$0 ] zp ZP_BYTE:273 [ bitmap_init::$7 ] zp ZP_BYTE:274 [ bitmap_init::$8 ] zp ZP_BYTE:275 [ bitmap_init::$9 ] zp ZP_BYTE:272 [ bitmap_init::$10 ] Limited combination testing to 10 combinations of 34560 possible. -Uplifting [memset] best 3370690 combination zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 ] -Uplifting [bitmap_line] best 3370374 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] zp ZP_BYTE:250 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:248 [ bitmap_line::x0#0 ] zp ZP_BYTE:253 [ bitmap_line::yd#2 ] zp ZP_BYTE:254 [ bitmap_line::yd#1 ] zp ZP_BYTE:256 [ bitmap_line::yd#10 ] zp ZP_BYTE:257 [ bitmap_line::yd#11 ] zp ZP_BYTE:252 [ bitmap_line::xd#2 ] zp ZP_BYTE:255 [ bitmap_line::xd#1 ] +Uplifting [memset] best 3367690 combination zp ZP_WORD:159 [ memset::dst#2 memset::dst#1 ] +Uplifting [bitmap_line] best 3367374 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] zp ZP_BYTE:250 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp ZP_BYTE:248 [ bitmap_line::x0#0 ] zp ZP_BYTE:253 [ bitmap_line::yd#2 ] zp ZP_BYTE:254 [ bitmap_line::yd#1 ] zp ZP_BYTE:256 [ bitmap_line::yd#10 ] zp ZP_BYTE:257 [ bitmap_line::yd#11 ] zp ZP_BYTE:252 [ bitmap_line::xd#2 ] zp ZP_BYTE:255 [ bitmap_line::xd#1 ] Limited combination testing to 10 combinations of 186624 possible. -Uplifting [keyboard_matrix_read] best 3370362 combination reg byte y [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 3367362 combination reg byte y [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#2 ] zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] Limited combination testing to 10 combinations of 64 possible. -Uplifting [RADIX] best 3370362 combination -Uplifting [print_ln] best 3370362 combination -Uplifting [print_cls] best 3370362 combination -Uplifting [print_set_screen] best 3370362 combination -Uplifting [main] best 3370362 combination +Uplifting [RADIX] best 3367362 combination +Uplifting [print_ln] best 3367362 combination +Uplifting [print_cls] best 3367362 combination +Uplifting [print_set_screen] best 3367362 combination +Uplifting [main] best 3367362 combination Attempting to uplift remaining variables inzp ZP_BYTE:29 [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] -Uplifting [mode_8bpppixelcell] best 3280362 combination reg byte x [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] +Uplifting [mode_8bpppixelcell] best 3277362 combination reg byte x [ mode_8bpppixelcell::cp#2 mode_8bpppixelcell::cp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] -Uplifting [mode_8bpppixelcell] best 3280362 combination zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] +Uplifting [mode_8bpppixelcell] best 3277362 combination zp ZP_BYTE:25 [ mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] -Uplifting [mode_8bpppixelcell] best 3280362 combination zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] +Uplifting [mode_8bpppixelcell] best 3277362 combination zp ZP_BYTE:28 [ mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] -Uplifting [bitmap_line_xdyi] best 3280362 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] +Uplifting [bitmap_line_xdyi] best 3277362 combination zp ZP_BYTE:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] -Uplifting [bitmap_line_ydxi] best 3280362 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] +Uplifting [bitmap_line_ydxi] best 3277362 combination zp ZP_BYTE:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] -Uplifting [bitmap_line_xdyd] best 3280362 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] +Uplifting [bitmap_line_xdyd] best 3277362 combination zp ZP_BYTE:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] -Uplifting [bitmap_line_ydxd] best 3280362 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] +Uplifting [bitmap_line_ydxd] best 3277362 combination zp ZP_BYTE:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] -Uplifting [bitmap_line_xdyi] best 3280362 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] +Uplifting [bitmap_line_xdyi] best 3277362 combination zp ZP_BYTE:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] -Uplifting [bitmap_line_xdyd] best 3280362 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] +Uplifting [bitmap_line_xdyd] best 3277362 combination zp ZP_BYTE:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:188 [ keyboard_key_pressed::return#14 ] -Uplifting [keyboard_key_pressed] best 3274362 combination reg byte a [ keyboard_key_pressed::return#14 ] +Uplifting [keyboard_key_pressed] best 3271362 combination reg byte a [ keyboard_key_pressed::return#14 ] Attempting to uplift remaining variables inzp ZP_BYTE:190 [ keyboard_key_pressed::return#15 ] -Uplifting [keyboard_key_pressed] best 3268362 combination reg byte a [ keyboard_key_pressed::return#15 ] +Uplifting [keyboard_key_pressed] best 3265362 combination reg byte a [ keyboard_key_pressed::return#15 ] Attempting to uplift remaining variables inzp ZP_BYTE:191 [ mode_ctrl::$4 ] -Uplifting [mode_ctrl] best 3262362 combination reg byte a [ mode_ctrl::$4 ] +Uplifting [mode_ctrl] best 3259362 combination reg byte a [ mode_ctrl::$4 ] Attempting to uplift remaining variables inzp ZP_BYTE:192 [ keyboard_key_pressed::return#16 ] -Uplifting [keyboard_key_pressed] best 3256362 combination reg byte a [ keyboard_key_pressed::return#16 ] +Uplifting [keyboard_key_pressed] best 3253362 combination reg byte a [ keyboard_key_pressed::return#16 ] Attempting to uplift remaining variables inzp ZP_BYTE:193 [ mode_ctrl::$8 ] -Uplifting [mode_ctrl] best 3250362 combination reg byte a [ mode_ctrl::$8 ] +Uplifting [mode_ctrl] best 3247362 combination reg byte a [ mode_ctrl::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:194 [ keyboard_key_pressed::return#17 ] -Uplifting [keyboard_key_pressed] best 3244362 combination reg byte a [ keyboard_key_pressed::return#17 ] +Uplifting [keyboard_key_pressed] best 3241362 combination reg byte a [ keyboard_key_pressed::return#17 ] Attempting to uplift remaining variables inzp ZP_BYTE:195 [ mode_ctrl::$12 ] -Uplifting [mode_ctrl] best 3238362 combination reg byte a [ mode_ctrl::$12 ] +Uplifting [mode_ctrl] best 3235362 combination reg byte a [ mode_ctrl::$12 ] Attempting to uplift remaining variables inzp ZP_BYTE:196 [ keyboard_key_pressed::return#18 ] -Uplifting [keyboard_key_pressed] best 3232362 combination reg byte a [ keyboard_key_pressed::return#18 ] +Uplifting [keyboard_key_pressed] best 3229362 combination reg byte a [ keyboard_key_pressed::return#18 ] Attempting to uplift remaining variables inzp ZP_BYTE:197 [ mode_ctrl::$16 ] -Uplifting [mode_ctrl] best 3226362 combination reg byte a [ mode_ctrl::$16 ] +Uplifting [mode_ctrl] best 3223362 combination reg byte a [ mode_ctrl::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:198 [ keyboard_key_pressed::return#19 ] -Uplifting [keyboard_key_pressed] best 3220362 combination reg byte a [ keyboard_key_pressed::return#19 ] +Uplifting [keyboard_key_pressed] best 3217362 combination reg byte a [ keyboard_key_pressed::return#19 ] Attempting to uplift remaining variables inzp ZP_BYTE:199 [ mode_ctrl::$20 ] -Uplifting [mode_ctrl] best 3214362 combination reg byte a [ mode_ctrl::$20 ] +Uplifting [mode_ctrl] best 3211362 combination reg byte a [ mode_ctrl::$20 ] Attempting to uplift remaining variables inzp ZP_BYTE:200 [ keyboard_key_pressed::return#20 ] -Uplifting [keyboard_key_pressed] best 3208362 combination reg byte a [ keyboard_key_pressed::return#20 ] +Uplifting [keyboard_key_pressed] best 3205362 combination reg byte a [ keyboard_key_pressed::return#20 ] Attempting to uplift remaining variables inzp ZP_BYTE:201 [ mode_ctrl::$24 ] -Uplifting [mode_ctrl] best 3202362 combination reg byte a [ mode_ctrl::$24 ] +Uplifting [mode_ctrl] best 3199362 combination reg byte a [ mode_ctrl::$24 ] Attempting to uplift remaining variables inzp ZP_BYTE:202 [ keyboard_key_pressed::return#21 ] -Uplifting [keyboard_key_pressed] best 3196362 combination reg byte a [ keyboard_key_pressed::return#21 ] +Uplifting [keyboard_key_pressed] best 3193362 combination reg byte a [ keyboard_key_pressed::return#21 ] Attempting to uplift remaining variables inzp ZP_BYTE:203 [ mode_ctrl::$28 ] -Uplifting [mode_ctrl] best 3190362 combination reg byte a [ mode_ctrl::$28 ] +Uplifting [mode_ctrl] best 3187362 combination reg byte a [ mode_ctrl::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:211 [ mode_8bpppixelcell::$14 ] -Uplifting [mode_8bpppixelcell] best 3184362 combination reg byte a [ mode_8bpppixelcell::$14 ] +Uplifting [mode_8bpppixelcell] best 3181362 combination reg byte a [ mode_8bpppixelcell::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:213 [ mode_8bpppixelcell::$16 ] -Uplifting [mode_8bpppixelcell] best 3178362 combination reg byte a [ mode_8bpppixelcell::$16 ] +Uplifting [mode_8bpppixelcell] best 3175362 combination reg byte a [ mode_8bpppixelcell::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:214 [ mode_8bpppixelcell::$17 ] -Uplifting [mode_8bpppixelcell] best 3172362 combination reg byte a [ mode_8bpppixelcell::$17 ] +Uplifting [mode_8bpppixelcell] best 3169362 combination reg byte a [ mode_8bpppixelcell::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:217 [ mode_sixsfred::$18 ] -Uplifting [mode_sixsfred] best 3166362 combination reg byte a [ mode_sixsfred::$18 ] +Uplifting [mode_sixsfred] best 3163362 combination reg byte a [ mode_sixsfred::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:218 [ mode_sixsfred::$21 ] -Uplifting [mode_sixsfred] best 3160362 combination reg byte a [ mode_sixsfred::$21 ] +Uplifting [mode_sixsfred] best 3157362 combination reg byte a [ mode_sixsfred::$21 ] Attempting to uplift remaining variables inzp ZP_BYTE:219 [ mode_sixsfred::row#0 ] -Uplifting [mode_sixsfred] best 3156362 combination reg byte a [ mode_sixsfred::row#0 ] +Uplifting [mode_sixsfred] best 3153362 combination reg byte a [ mode_sixsfred::row#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:222 [ mode_twoplanebitmap::$18 ] -Uplifting [mode_twoplanebitmap] best 3150362 combination reg byte a [ mode_twoplanebitmap::$18 ] +Uplifting [mode_twoplanebitmap] best 3147362 combination reg byte a [ mode_twoplanebitmap::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:223 [ mode_twoplanebitmap::$19 ] -Uplifting [mode_twoplanebitmap] best 3144362 combination reg byte a [ mode_twoplanebitmap::$19 ] +Uplifting [mode_twoplanebitmap] best 3141362 combination reg byte a [ mode_twoplanebitmap::$19 ] Attempting to uplift remaining variables inzp ZP_BYTE:224 [ mode_twoplanebitmap::$22 ] -Uplifting [mode_twoplanebitmap] best 3138362 combination reg byte a [ mode_twoplanebitmap::$22 ] +Uplifting [mode_twoplanebitmap] best 3135362 combination reg byte a [ mode_twoplanebitmap::$22 ] Attempting to uplift remaining variables inzp ZP_BYTE:227 [ mode_sixsfred2::$17 ] -Uplifting [mode_sixsfred2] best 3132362 combination reg byte a [ mode_sixsfred2::$17 ] +Uplifting [mode_sixsfred2] best 3129362 combination reg byte a [ mode_sixsfred2::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:228 [ mode_sixsfred2::$18 ] -Uplifting [mode_sixsfred2] best 3126362 combination reg byte a [ mode_sixsfred2::$18 ] +Uplifting [mode_sixsfred2] best 3123362 combination reg byte a [ mode_sixsfred2::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:229 [ mode_sixsfred2::$21 ] -Uplifting [mode_sixsfred2] best 3120362 combination reg byte a [ mode_sixsfred2::$21 ] +Uplifting [mode_sixsfred2] best 3117362 combination reg byte a [ mode_sixsfred2::$21 ] Attempting to uplift remaining variables inzp ZP_BYTE:230 [ mode_sixsfred2::row#0 ] -Uplifting [mode_sixsfred2] best 3116362 combination reg byte a [ mode_sixsfred2::row#0 ] +Uplifting [mode_sixsfred2] best 3113362 combination reg byte a [ mode_sixsfred2::row#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:247 [ mode_stdbitmap::$26 ] -Uplifting [mode_stdbitmap] best 3110362 combination reg byte a [ mode_stdbitmap::$26 ] +Uplifting [mode_stdbitmap] best 3107362 combination reg byte a [ mode_stdbitmap::$26 ] Attempting to uplift remaining variables inzp ZP_BYTE:278 [ mode_mcchar::$28 ] -Uplifting [mode_mcchar] best 3104362 combination reg byte a [ mode_mcchar::$28 ] +Uplifting [mode_mcchar] best 3101362 combination reg byte a [ mode_mcchar::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:280 [ mode_mcchar::$30 ] -Uplifting [mode_mcchar] best 3098362 combination reg byte a [ mode_mcchar::$30 ] +Uplifting [mode_mcchar] best 3095362 combination reg byte a [ mode_mcchar::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:281 [ mode_mcchar::$31 ] -Uplifting [mode_mcchar] best 3092362 combination reg byte a [ mode_mcchar::$31 ] +Uplifting [mode_mcchar] best 3089362 combination reg byte a [ mode_mcchar::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:284 [ mode_ecmchar::$28 ] -Uplifting [mode_ecmchar] best 3086362 combination reg byte a [ mode_ecmchar::$28 ] +Uplifting [mode_ecmchar] best 3083362 combination reg byte a [ mode_ecmchar::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:286 [ mode_ecmchar::$30 ] -Uplifting [mode_ecmchar] best 3080362 combination reg byte a [ mode_ecmchar::$30 ] +Uplifting [mode_ecmchar] best 3077362 combination reg byte a [ mode_ecmchar::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:287 [ mode_ecmchar::$31 ] -Uplifting [mode_ecmchar] best 3074362 combination reg byte a [ mode_ecmchar::$31 ] +Uplifting [mode_ecmchar] best 3071362 combination reg byte a [ mode_ecmchar::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:290 [ mode_stdchar::$27 ] -Uplifting [mode_stdchar] best 3068362 combination reg byte a [ mode_stdchar::$27 ] +Uplifting [mode_stdchar] best 3065362 combination reg byte a [ mode_stdchar::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:292 [ mode_stdchar::$29 ] -Uplifting [mode_stdchar] best 3062362 combination reg byte a [ mode_stdchar::$29 ] +Uplifting [mode_stdchar] best 3059362 combination reg byte a [ mode_stdchar::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:293 [ mode_stdchar::$30 ] -Uplifting [mode_stdchar] best 3056362 combination reg byte a [ mode_stdchar::$30 ] +Uplifting [mode_stdchar] best 3053362 combination reg byte a [ mode_stdchar::$30 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] -Uplifting [mode_8bpppixelcell] best 3046362 combination reg byte x [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] +Uplifting [mode_8bpppixelcell] best 3043362 combination reg byte x [ mode_8bpppixelcell::ax#2 mode_8bpppixelcell::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] -Uplifting [mode_twoplanebitmap] best 3036362 combination reg byte x [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] +Uplifting [mode_twoplanebitmap] best 3033362 combination reg byte x [ mode_twoplanebitmap::cx#2 mode_twoplanebitmap::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:59 [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] -Uplifting [mode_sixsfred2] best 3026362 combination reg byte x [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] +Uplifting [mode_sixsfred2] best 3023362 combination reg byte x [ mode_sixsfred2::cx#2 mode_sixsfred2::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:39 [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] -Uplifting [mode_sixsfred] best 3017362 combination reg byte x [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] +Uplifting [mode_sixsfred] best 3014362 combination reg byte x [ mode_sixsfred::ax#2 mode_sixsfred::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] -Uplifting [mode_sixsfred2] best 3008362 combination reg byte x [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] +Uplifting [mode_sixsfred2] best 3005362 combination reg byte x [ mode_sixsfred2::ax#2 mode_sixsfred2::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:93 [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] -Uplifting [mode_stdbitmap] best 2998362 combination reg byte x [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] +Uplifting [mode_stdbitmap] best 2995362 combination reg byte x [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:134 [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] -Uplifting [mode_mcchar] best 2987362 combination reg byte x [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] +Uplifting [mode_mcchar] best 2984362 combination reg byte x [ mode_mcchar::cx#2 mode_mcchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:141 [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] -Uplifting [mode_ecmchar] best 2976362 combination reg byte x [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] +Uplifting [mode_ecmchar] best 2973362 combination reg byte x [ mode_ecmchar::cx#2 mode_ecmchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:148 [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] -Uplifting [mode_stdchar] best 2965362 combination reg byte x [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] +Uplifting [mode_stdchar] best 2962362 combination reg byte x [ mode_stdchar::cx#2 mode_stdchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] -Uplifting [mode_hicolmcchar] best 2955362 combination reg byte x [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] +Uplifting [mode_hicolmcchar] best 2952362 combination reg byte x [ mode_hicolmcchar::cx#2 mode_hicolmcchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:79 [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] -Uplifting [mode_hicolecmchar] best 2945362 combination reg byte x [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] +Uplifting [mode_hicolecmchar] best 2942362 combination reg byte x [ mode_hicolecmchar::cx#2 mode_hicolecmchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:86 [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] -Uplifting [mode_hicolstdchar] best 2935362 combination reg byte x [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] +Uplifting [mode_hicolstdchar] best 2932362 combination reg byte x [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:52 [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] -Uplifting [mode_twoplanebitmap] best 2926362 combination reg byte x [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] +Uplifting [mode_twoplanebitmap] best 2923362 combination reg byte x [ mode_twoplanebitmap::ax#2 mode_twoplanebitmap::ax#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] -Uplifting [mode_8bpppixelcell] best 2926362 combination zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] +Uplifting [mode_8bpppixelcell] best 2923362 combination zp ZP_BYTE:24 [ mode_8bpppixelcell::cr#6 mode_8bpppixelcell::cr#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:244 [ mode_stdbitmap::col#0 ] -Uplifting [mode_stdbitmap] best 2925362 combination reg byte y [ mode_stdbitmap::col#0 ] +Uplifting [mode_stdbitmap] best 2922362 combination reg byte y [ mode_stdbitmap::col#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] -Uplifting [bitmap_line_xdyi] best 2925362 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] +Uplifting [bitmap_line_xdyi] best 2922362 combination zp ZP_BYTE:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] -Uplifting [bitmap_line_ydxi] best 2925362 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] +Uplifting [bitmap_line_ydxi] best 2922362 combination zp ZP_BYTE:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] -Uplifting [bitmap_line_xdyd] best 2925362 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] +Uplifting [bitmap_line_xdyd] best 2922362 combination zp ZP_BYTE:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -Uplifting [bitmap_line_ydxd] best 2925362 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] +Uplifting [bitmap_line_ydxd] best 2922362 combination zp ZP_BYTE:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] -Uplifting [mode_8bpppixelcell] best 2925362 combination zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] +Uplifting [mode_8bpppixelcell] best 2922362 combination zp ZP_BYTE:212 [ mode_8bpppixelcell::$15 ] Attempting to uplift remaining variables inzp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] -Uplifting [mode_twoplanebitmap] best 2925362 combination zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] +Uplifting [mode_twoplanebitmap] best 2922362 combination zp ZP_BYTE:221 [ mode_twoplanebitmap::$17 ] Attempting to uplift remaining variables inzp ZP_BYTE:226 [ mode_sixsfred2::$16 ] -Uplifting [mode_sixsfred2] best 2925362 combination zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] +Uplifting [mode_sixsfred2] best 2922362 combination zp ZP_BYTE:226 [ mode_sixsfred2::$16 ] Attempting to uplift remaining variables inzp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] -Uplifting [mode_hicolmcchar] best 2925362 combination zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] +Uplifting [mode_hicolmcchar] best 2922362 combination zp ZP_BYTE:232 [ mode_hicolmcchar::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:234 [ mode_hicolmcchar::v#0 ] -Uplifting [mode_hicolmcchar] best 2916362 combination reg byte a [ mode_hicolmcchar::v#0 ] +Uplifting [mode_hicolmcchar] best 2913362 combination reg byte a [ mode_hicolmcchar::v#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] -Uplifting [mode_hicolecmchar] best 2916362 combination zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] +Uplifting [mode_hicolecmchar] best 2913362 combination zp ZP_BYTE:236 [ mode_hicolecmchar::$27 ] Attempting to uplift remaining variables inzp ZP_BYTE:238 [ mode_hicolecmchar::v#0 ] -Uplifting [mode_hicolecmchar] best 2907362 combination reg byte a [ mode_hicolecmchar::v#0 ] +Uplifting [mode_hicolecmchar] best 2904362 combination reg byte a [ mode_hicolecmchar::v#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] -Uplifting [mode_hicolstdchar] best 2907362 combination zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] +Uplifting [mode_hicolstdchar] best 2904362 combination zp ZP_BYTE:240 [ mode_hicolstdchar::$26 ] Attempting to uplift remaining variables inzp ZP_BYTE:242 [ mode_hicolstdchar::v#0 ] -Uplifting [mode_hicolstdchar] best 2898362 combination reg byte a [ mode_hicolstdchar::v#0 ] +Uplifting [mode_hicolstdchar] best 2895362 combination reg byte a [ mode_hicolstdchar::v#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] -Uplifting [mode_stdbitmap] best 2898362 combination zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] +Uplifting [mode_stdbitmap] best 2895362 combination zp ZP_BYTE:245 [ mode_stdbitmap::col2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:279 [ mode_mcchar::$29 ] -Uplifting [mode_mcchar] best 2898362 combination zp ZP_BYTE:279 [ mode_mcchar::$29 ] +Uplifting [mode_mcchar] best 2895362 combination zp ZP_BYTE:279 [ mode_mcchar::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:285 [ mode_ecmchar::$29 ] -Uplifting [mode_ecmchar] best 2898362 combination zp ZP_BYTE:285 [ mode_ecmchar::$29 ] +Uplifting [mode_ecmchar] best 2895362 combination zp ZP_BYTE:285 [ mode_ecmchar::$29 ] Attempting to uplift remaining variables inzp ZP_BYTE:291 [ mode_stdchar::$28 ] -Uplifting [mode_stdchar] best 2898362 combination zp ZP_BYTE:291 [ mode_stdchar::$28 ] +Uplifting [mode_stdchar] best 2895362 combination zp ZP_BYTE:291 [ mode_stdchar::$28 ] Attempting to uplift remaining variables inzp ZP_BYTE:209 [ keyboard_key_pressed::return#0 ] -Uplifting [keyboard_key_pressed] best 2870759 combination reg byte a [ keyboard_key_pressed::return#0 ] +Uplifting [keyboard_key_pressed] best 2867759 combination reg byte a [ keyboard_key_pressed::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] -Uplifting [mode_8bppchunkybmm] best 2869559 combination reg byte x [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] +Uplifting [mode_8bppchunkybmm] best 2866559 combination reg byte x [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] -Uplifting [mode_8bpppixelcell] best 2868359 combination reg byte x [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] +Uplifting [mode_8bpppixelcell] best 2865359 combination reg byte x [ mode_8bpppixelcell::i#2 mode_8bpppixelcell::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] -Uplifting [mode_sixsfred] best 2867159 combination reg byte x [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] +Uplifting [mode_sixsfred] best 2864159 combination reg byte x [ mode_sixsfred::i#2 mode_sixsfred::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:44 [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] -Uplifting [mode_twoplanebitmap] best 2865959 combination reg byte x [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] +Uplifting [mode_twoplanebitmap] best 2862959 combination reg byte x [ mode_twoplanebitmap::i#2 mode_twoplanebitmap::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:57 [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] -Uplifting [mode_sixsfred2] best 2864759 combination reg byte x [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] +Uplifting [mode_sixsfred2] best 2861759 combination reg byte x [ mode_sixsfred2::i#2 mode_sixsfred2::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:70 [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] -Uplifting [mode_hicolmcchar] best 2863559 combination reg byte x [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] +Uplifting [mode_hicolmcchar] best 2860559 combination reg byte x [ mode_hicolmcchar::i#2 mode_hicolmcchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] -Uplifting [mode_hicolecmchar] best 2862359 combination reg byte x [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] +Uplifting [mode_hicolecmchar] best 2859359 combination reg byte x [ mode_hicolecmchar::i#2 mode_hicolecmchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] -Uplifting [mode_hicolstdchar] best 2861159 combination reg byte x [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] +Uplifting [mode_hicolstdchar] best 2858159 combination reg byte x [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:91 [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] -Uplifting [mode_stdbitmap] best 2859959 combination reg byte x [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] +Uplifting [mode_stdbitmap] best 2856959 combination reg byte x [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:132 [ mode_mcchar::i#2 mode_mcchar::i#1 ] -Uplifting [mode_mcchar] best 2858759 combination reg byte x [ mode_mcchar::i#2 mode_mcchar::i#1 ] +Uplifting [mode_mcchar] best 2855759 combination reg byte x [ mode_mcchar::i#2 mode_mcchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:139 [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] -Uplifting [mode_ecmchar] best 2857559 combination reg byte x [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] +Uplifting [mode_ecmchar] best 2854559 combination reg byte x [ mode_ecmchar::i#2 mode_ecmchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:146 [ mode_stdchar::i#2 mode_stdchar::i#1 ] -Uplifting [mode_stdchar] best 2856359 combination reg byte x [ mode_stdchar::i#2 mode_stdchar::i#1 ] +Uplifting [mode_stdchar] best 2853359 combination reg byte x [ mode_stdchar::i#2 mode_stdchar::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] -Uplifting [mode_mcchar] best 2856359 combination zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] +Uplifting [mode_mcchar] best 2853359 combination zp ZP_BYTE:133 [ mode_mcchar::cy#4 mode_mcchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] -Uplifting [mode_ecmchar] best 2856359 combination zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] +Uplifting [mode_ecmchar] best 2853359 combination zp ZP_BYTE:140 [ mode_ecmchar::cy#4 mode_ecmchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] -Uplifting [mode_stdchar] best 2856359 combination zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] +Uplifting [mode_stdchar] best 2853359 combination zp ZP_BYTE:147 [ mode_stdchar::cy#4 mode_stdchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] -Uplifting [mode_sixsfred] best 2856359 combination zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] +Uplifting [mode_sixsfred] best 2853359 combination zp ZP_BYTE:32 [ mode_sixsfred::cy#4 mode_sixsfred::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] -Uplifting [mode_sixsfred] best 2856359 combination zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] +Uplifting [mode_sixsfred] best 2853359 combination zp ZP_BYTE:36 [ mode_sixsfred::ay#4 mode_sixsfred::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] -Uplifting [mode_sixsfred2] best 2856359 combination zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] +Uplifting [mode_sixsfred2] best 2853359 combination zp ZP_BYTE:62 [ mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] -Uplifting [mode_8bpppixelcell] best 2856359 combination zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] +Uplifting [mode_8bpppixelcell] best 2853359 combination zp ZP_BYTE:17 [ mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] -Uplifting [mode_twoplanebitmap] best 2856359 combination zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] +Uplifting [mode_twoplanebitmap] best 2853359 combination zp ZP_BYTE:45 [ mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] -Uplifting [mode_sixsfred2] best 2856359 combination zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] +Uplifting [mode_sixsfred2] best 2853359 combination zp ZP_BYTE:58 [ mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] -Uplifting [mode_twoplanebitmap] best 2856359 combination zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] +Uplifting [mode_twoplanebitmap] best 2853359 combination zp ZP_BYTE:49 [ mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] -Uplifting [mode_stdbitmap] best 2856359 combination zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] +Uplifting [mode_stdbitmap] best 2853359 combination zp ZP_BYTE:92 [ mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] -Uplifting [mode_stdbitmap] best 2856359 combination zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] +Uplifting [mode_stdbitmap] best 2853359 combination zp ZP_BYTE:96 [ mode_stdbitmap::l#2 mode_stdbitmap::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] -Uplifting [mode_hicolmcchar] best 2856359 combination zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] +Uplifting [mode_hicolmcchar] best 2853359 combination zp ZP_BYTE:71 [ mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] -Uplifting [mode_hicolecmchar] best 2856359 combination zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] +Uplifting [mode_hicolecmchar] best 2853359 combination zp ZP_BYTE:78 [ mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] -Uplifting [mode_hicolstdchar] best 2856359 combination zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] +Uplifting [mode_hicolstdchar] best 2853359 combination zp ZP_BYTE:85 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] -Uplifting [mode_8bppchunkybmm] best 2856359 combination zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] +Uplifting [mode_8bppchunkybmm] best 2853359 combination zp ZP_BYTE:6 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:129 [ bitmap_init::y#2 bitmap_init::y#1 ] -Uplifting [bitmap_init] best 2854559 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] +Uplifting [bitmap_init] best 2851559 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:161 [ keyboard_key_pressed::return#2 ] -Uplifting [keyboard_key_pressed] best 2853959 combination reg byte a [ keyboard_key_pressed::return#2 ] +Uplifting [keyboard_key_pressed] best 2850959 combination reg byte a [ keyboard_key_pressed::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:163 [ keyboard_key_pressed::return#24 ] -Uplifting [keyboard_key_pressed] best 2853359 combination reg byte a [ keyboard_key_pressed::return#24 ] +Uplifting [keyboard_key_pressed] best 2850359 combination reg byte a [ keyboard_key_pressed::return#24 ] Attempting to uplift remaining variables inzp ZP_BYTE:164 [ menu::$33 ] -Uplifting [menu] best 2852759 combination reg byte a [ menu::$33 ] +Uplifting [menu] best 2849759 combination reg byte a [ menu::$33 ] Attempting to uplift remaining variables inzp ZP_BYTE:165 [ keyboard_key_pressed::return#25 ] -Uplifting [keyboard_key_pressed] best 2852159 combination reg byte a [ keyboard_key_pressed::return#25 ] +Uplifting [keyboard_key_pressed] best 2849159 combination reg byte a [ keyboard_key_pressed::return#25 ] Attempting to uplift remaining variables inzp ZP_BYTE:166 [ menu::$37 ] -Uplifting [menu] best 2851559 combination reg byte a [ menu::$37 ] +Uplifting [menu] best 2848559 combination reg byte a [ menu::$37 ] Attempting to uplift remaining variables inzp ZP_BYTE:167 [ keyboard_key_pressed::return#26 ] -Uplifting [keyboard_key_pressed] best 2850959 combination reg byte a [ keyboard_key_pressed::return#26 ] +Uplifting [keyboard_key_pressed] best 2847959 combination reg byte a [ keyboard_key_pressed::return#26 ] Attempting to uplift remaining variables inzp ZP_BYTE:168 [ menu::$41 ] -Uplifting [menu] best 2850359 combination reg byte a [ menu::$41 ] +Uplifting [menu] best 2847359 combination reg byte a [ menu::$41 ] Attempting to uplift remaining variables inzp ZP_BYTE:169 [ keyboard_key_pressed::return#27 ] -Uplifting [keyboard_key_pressed] best 2849759 combination reg byte a [ keyboard_key_pressed::return#27 ] +Uplifting [keyboard_key_pressed] best 2846759 combination reg byte a [ keyboard_key_pressed::return#27 ] Attempting to uplift remaining variables inzp ZP_BYTE:170 [ menu::$45 ] -Uplifting [menu] best 2849159 combination reg byte a [ menu::$45 ] +Uplifting [menu] best 2846159 combination reg byte a [ menu::$45 ] Attempting to uplift remaining variables inzp ZP_BYTE:171 [ keyboard_key_pressed::return#28 ] -Uplifting [keyboard_key_pressed] best 2848559 combination reg byte a [ keyboard_key_pressed::return#28 ] +Uplifting [keyboard_key_pressed] best 2845559 combination reg byte a [ keyboard_key_pressed::return#28 ] Attempting to uplift remaining variables inzp ZP_BYTE:172 [ menu::$49 ] -Uplifting [menu] best 2847959 combination reg byte a [ menu::$49 ] +Uplifting [menu] best 2844959 combination reg byte a [ menu::$49 ] Attempting to uplift remaining variables inzp ZP_BYTE:173 [ keyboard_key_pressed::return#29 ] -Uplifting [keyboard_key_pressed] best 2847359 combination reg byte a [ keyboard_key_pressed::return#29 ] +Uplifting [keyboard_key_pressed] best 2844359 combination reg byte a [ keyboard_key_pressed::return#29 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ menu::$53 ] -Uplifting [menu] best 2846759 combination reg byte a [ menu::$53 ] +Uplifting [menu] best 2843759 combination reg byte a [ menu::$53 ] Attempting to uplift remaining variables inzp ZP_BYTE:175 [ keyboard_key_pressed::return#30 ] -Uplifting [keyboard_key_pressed] best 2846159 combination reg byte a [ keyboard_key_pressed::return#30 ] +Uplifting [keyboard_key_pressed] best 2843159 combination reg byte a [ keyboard_key_pressed::return#30 ] Attempting to uplift remaining variables inzp ZP_BYTE:176 [ menu::$57 ] -Uplifting [menu] best 2845559 combination reg byte a [ menu::$57 ] +Uplifting [menu] best 2842559 combination reg byte a [ menu::$57 ] Attempting to uplift remaining variables inzp ZP_BYTE:177 [ keyboard_key_pressed::return#10 ] -Uplifting [keyboard_key_pressed] best 2844959 combination reg byte a [ keyboard_key_pressed::return#10 ] +Uplifting [keyboard_key_pressed] best 2841959 combination reg byte a [ keyboard_key_pressed::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ menu::$61 ] -Uplifting [menu] best 2844359 combination reg byte a [ menu::$61 ] +Uplifting [menu] best 2841359 combination reg byte a [ menu::$61 ] Attempting to uplift remaining variables inzp ZP_BYTE:179 [ keyboard_key_pressed::return#11 ] -Uplifting [keyboard_key_pressed] best 2843759 combination reg byte a [ keyboard_key_pressed::return#11 ] +Uplifting [keyboard_key_pressed] best 2840759 combination reg byte a [ keyboard_key_pressed::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:180 [ menu::$65 ] -Uplifting [menu] best 2843159 combination reg byte a [ menu::$65 ] +Uplifting [menu] best 2840159 combination reg byte a [ menu::$65 ] Attempting to uplift remaining variables inzp ZP_BYTE:181 [ keyboard_key_pressed::return#12 ] -Uplifting [keyboard_key_pressed] best 2842559 combination reg byte a [ keyboard_key_pressed::return#12 ] +Uplifting [keyboard_key_pressed] best 2839559 combination reg byte a [ keyboard_key_pressed::return#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:182 [ menu::$69 ] -Uplifting [menu] best 2841959 combination reg byte a [ menu::$69 ] +Uplifting [menu] best 2838959 combination reg byte a [ menu::$69 ] Attempting to uplift remaining variables inzp ZP_BYTE:183 [ keyboard_key_pressed::return#13 ] -Uplifting [keyboard_key_pressed] best 2841359 combination reg byte a [ keyboard_key_pressed::return#13 ] +Uplifting [keyboard_key_pressed] best 2838359 combination reg byte a [ keyboard_key_pressed::return#13 ] Attempting to uplift remaining variables inzp ZP_BYTE:184 [ menu::$73 ] -Uplifting [menu] best 2840759 combination reg byte a [ menu::$73 ] +Uplifting [menu] best 2837759 combination reg byte a [ menu::$73 ] Attempting to uplift remaining variables inzp ZP_BYTE:271 [ bitmap_init::$0 ] -Uplifting [bitmap_init] best 2840359 combination reg byte a [ bitmap_init::$0 ] +Uplifting [bitmap_init] best 2837359 combination reg byte a [ bitmap_init::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:273 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 2839759 combination reg byte a [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 2836759 combination reg byte a [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:274 [ bitmap_init::$8 ] -Uplifting [bitmap_init] best 2839159 combination reg byte a [ bitmap_init::$8 ] +Uplifting [bitmap_init] best 2836159 combination reg byte a [ bitmap_init::$8 ] Attempting to uplift remaining variables inzp ZP_BYTE:275 [ bitmap_init::$9 ] -Uplifting [bitmap_init] best 2838559 combination reg byte a [ bitmap_init::$9 ] +Uplifting [bitmap_init] best 2835559 combination reg byte a [ bitmap_init::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] -Uplifting [mode_sixsfred] best 2838559 combination zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] +Uplifting [mode_sixsfred] best 2835559 combination zp ZP_BYTE:40 [ mode_sixsfred::by#4 mode_sixsfred::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] -Uplifting [mode_twoplanebitmap] best 2838559 combination zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] +Uplifting [mode_twoplanebitmap] best 2835559 combination zp ZP_BYTE:53 [ mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] -Uplifting [mode_sixsfred2] best 2838559 combination zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] +Uplifting [mode_sixsfred2] best 2835559 combination zp ZP_BYTE:66 [ mode_sixsfred2::by#4 mode_sixsfred2::by#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Uplifting [bitmap_clear] best 2838559 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Uplifting [bitmap_clear] best 2835559 combination zp ZP_BYTE:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] -Uplifting [mode_8bpppixelcell] best 2838559 combination zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] -Uplifting [bitmap_line_xdyi] best 2838559 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] -Uplifting [bitmap_line_ydxi] best 2838559 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] -Uplifting [bitmap_line_xdyd] best 2838559 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] -Uplifting [bitmap_line_ydxd] best 2838559 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] +Uplifting [mode_8bpppixelcell] best 2835559 combination zp ZP_BYTE:21 [ mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] -Uplifting [] best 2838559 combination zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] +Uplifting [] best 2835559 combination zp ZP_BYTE:12 [ dtv_control#114 dtv_control#144 dtv_control#17 ] +Attempting to uplift remaining variables inzp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] +Uplifting [bitmap_line_xdyi] best 2835559 combination zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] +Uplifting [bitmap_line_ydxi] best 2835559 combination zp ZP_BYTE:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] +Uplifting [bitmap_line_xdyd] best 2835559 combination zp ZP_BYTE:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] +Uplifting [bitmap_line_ydxd] best 2835559 combination zp ZP_BYTE:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] -Uplifting [bitmap_line_xdyi] best 2838559 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] +Uplifting [bitmap_line_xdyi] best 2835559 combination zp ZP_BYTE:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] -Uplifting [bitmap_line_ydxi] best 2838559 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] +Uplifting [bitmap_line_ydxi] best 2835559 combination zp ZP_BYTE:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] -Uplifting [bitmap_line_xdyd] best 2838559 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] +Uplifting [bitmap_line_xdyd] best 2835559 combination zp ZP_BYTE:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] -Uplifting [bitmap_line_ydxd] best 2838559 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] +Uplifting [bitmap_line_ydxd] best 2835559 combination zp ZP_BYTE:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] -Uplifting [bitmap_line_xdyi] best 2838559 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] +Uplifting [bitmap_line_xdyi] best 2835559 combination zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] -Uplifting [bitmap_line_ydxi] best 2838559 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] +Uplifting [bitmap_line_ydxi] best 2835559 combination zp ZP_BYTE:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] -Uplifting [bitmap_line_xdyd] best 2838559 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] +Uplifting [bitmap_line_xdyd] best 2835559 combination zp ZP_BYTE:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] -Uplifting [bitmap_line_ydxd] best 2838559 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] +Uplifting [bitmap_line_ydxd] best 2835559 combination zp ZP_BYTE:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:272 [ bitmap_init::$10 ] -Uplifting [bitmap_init] best 2838559 combination zp ZP_BYTE:272 [ bitmap_init::$10 ] +Uplifting [bitmap_init] best 2835559 combination zp ZP_BYTE:272 [ bitmap_init::$10 ] Attempting to uplift remaining variables inzp ZP_BYTE:251 [ bitmap_line::y1#0 ] -Uplifting [bitmap_line] best 2838559 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] +Uplifting [bitmap_line] best 2835559 combination zp ZP_BYTE:251 [ bitmap_line::y1#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:250 [ bitmap_line::y0#0 ] -Uplifting [bitmap_line] best 2838559 combination zp ZP_BYTE:250 [ bitmap_line::y0#0 ] +Uplifting [bitmap_line] best 2835559 combination zp ZP_BYTE:250 [ bitmap_line::y0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:248 [ bitmap_line::x0#0 ] -Uplifting [bitmap_line] best 2838559 combination zp ZP_BYTE:248 [ bitmap_line::x0#0 ] +Uplifting [bitmap_line] best 2835559 combination zp ZP_BYTE:248 [ bitmap_line::x0#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:205 [ keyboard_key_pressed::rowidx#0 ] -Uplifting [keyboard_key_pressed] best 2838555 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] +Uplifting [keyboard_key_pressed] best 2835555 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:208 [ keyboard_key_pressed::$2 ] -Uplifting [keyboard_key_pressed] best 2838549 combination reg byte a [ keyboard_key_pressed::$2 ] +Uplifting [keyboard_key_pressed] best 2835549 combination reg byte a [ keyboard_key_pressed::$2 ] Attempting to uplift remaining variables inzp ZP_BYTE:265 [ bitmap_plot::$1 ] -Uplifting [bitmap_plot] best 2838543 combination reg byte a [ bitmap_plot::$1 ] +Uplifting [bitmap_plot] best 2835543 combination reg byte a [ bitmap_plot::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ keyboard_key_pressed::key#20 ] -Uplifting [keyboard_key_pressed] best 2838481 combination reg byte y [ keyboard_key_pressed::key#20 ] +Uplifting [keyboard_key_pressed] best 2835481 combination reg byte y [ keyboard_key_pressed::key#20 ] Attempting to uplift remaining variables inzp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] -Uplifting [keyboard_matrix_read] best 2838475 combination reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [keyboard_matrix_read] best 2835475 combination reg byte a [ keyboard_matrix_read::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:253 [ bitmap_line::yd#2 ] -Uplifting [bitmap_line] best 2838465 combination reg byte y [ bitmap_line::yd#2 ] +Uplifting [bitmap_line] best 2835465 combination reg byte y [ bitmap_line::yd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:254 [ bitmap_line::yd#1 ] -Uplifting [bitmap_line] best 2838455 combination reg byte y [ bitmap_line::yd#1 ] +Uplifting [bitmap_line] best 2835455 combination reg byte y [ bitmap_line::yd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:256 [ bitmap_line::yd#10 ] -Uplifting [bitmap_line] best 2838445 combination reg byte y [ bitmap_line::yd#10 ] +Uplifting [bitmap_line] best 2835445 combination reg byte y [ bitmap_line::yd#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:257 [ bitmap_line::yd#11 ] -Uplifting [bitmap_line] best 2838435 combination reg byte y [ bitmap_line::yd#11 ] +Uplifting [bitmap_line] best 2835435 combination reg byte y [ bitmap_line::yd#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:252 [ bitmap_line::xd#2 ] -Uplifting [bitmap_line] best 2838435 combination zp ZP_BYTE:252 [ bitmap_line::xd#2 ] +Uplifting [bitmap_line] best 2835435 combination zp ZP_BYTE:252 [ bitmap_line::xd#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:255 [ bitmap_line::xd#1 ] -Uplifting [bitmap_line] best 2838435 combination zp ZP_BYTE:255 [ bitmap_line::xd#1 ] +Uplifting [bitmap_line] best 2835435 combination zp ZP_BYTE:255 [ bitmap_line::xd#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] -Uplifting [keyboard_key_pressed] best 2838435 combination zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] +Uplifting [keyboard_key_pressed] best 2835435 combination zp ZP_BYTE:204 [ keyboard_key_pressed::colidx#0 ] Coalescing zero page register with common assignment [ zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] ] with [ zp ZP_BYTE:252 [ bitmap_line::xd#2 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_BYTE:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 ] ] with [ zp ZP_BYTE:255 [ bitmap_line::xd#1 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_BYTE:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ] ] with [ zp ZP_BYTE:248 [ bitmap_line::x0#0 ] ] - score: 1 @@ -21901,13 +21791,11 @@ mode_8bppchunkybmm: { // mode_ctrl // Allow the user to control the DTV graphics using different keys mode_ctrl: { - // [156] phi from mode_ctrl mode_ctrl::@18 to mode_ctrl::@1 [phi:mode_ctrl/mode_ctrl::@18->mode_ctrl::@1] + // [156] phi from mode_ctrl mode_ctrl::@11 mode_ctrl::@18 to mode_ctrl::@1 [phi:mode_ctrl/mode_ctrl::@11/mode_ctrl::@18->mode_ctrl::@1] b1_from_mode_ctrl: - b1_from_b18: - // [156] phi (byte) dtv_control#114 = (byte) dtv_control#144 [phi:mode_ctrl/mode_ctrl::@18->mode_ctrl::@1#0] -- register_copy - jmp b1 - // [156] phi from mode_ctrl::@11 to mode_ctrl::@1 [phi:mode_ctrl::@11->mode_ctrl::@1] b1_from_b11: + b1_from_b18: + // [156] phi (byte) dtv_control#114 = (byte) dtv_control#144 [phi:mode_ctrl/mode_ctrl::@11/mode_ctrl::@18->mode_ctrl::@1#0] -- register_copy jmp b1 // mode_ctrl::@1 b1: @@ -26174,6 +26062,7 @@ Replacing label b9_from_b24 with b9 Replacing label b10_from_b25 with b10 Replacing label b27_from_b26 with b11 Replacing label b1_from_b11 with b1 +Replacing label b1_from_b18 with b1 Replacing label b1_from_b1 with b1 Replacing label b3_from_b3 with b3 Replacing label b2_from_b4 with b2 @@ -26306,6 +26195,7 @@ Removing instruction b10_from_b8: Removing instruction mode_ctrl_from_b10: Removing instruction b1_from_mode_ctrl: Removing instruction b1_from_b11: +Removing instruction b1_from_b18: Removing instruction b3_from_b2: Removing instruction keyboard_key_pressed_from_b3: Removing instruction b5_from_b12: @@ -26679,7 +26569,6 @@ Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn -Skipping double jump to b1 in jmp b1_from_b18 Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn @@ -26688,7 +26577,6 @@ Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b18 to b3 Relabelling long label b9_from_b8 to b4 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b1 @@ -26697,7 +26585,6 @@ Removing instruction jmp b1 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b5 -Removing instruction jmp b1 Removing instruction jmp b11 Removing instruction jmp b1 Removing instruction jmp b2 @@ -26763,8 +26650,6 @@ Replacing instruction ldx #0 with TAX Removing instruction lda y0 Removing instruction lda y0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction b3: -Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bbegin: Removing instruction breturn: Removing instruction breturn: @@ -27199,7 +27084,7 @@ FINAL SYMBOL TABLE (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 reg byte a 2002.0 (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 reg byte a 1003.0 (byte) dtv_control -(byte) dtv_control#114 dtv_control zp ZP_BYTE:9 42.099999999999994 +(byte) dtv_control#114 dtv_control zp ZP_BYTE:9 80.52941176470588 (byte) dtv_control#144 dtv_control zp ZP_BYTE:9 2.0 (byte) dtv_control#17 dtv_control zp ZP_BYTE:9 67.33333333333333 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) @@ -28965,9 +28850,8 @@ mode_8bppchunkybmm: { // mode_ctrl // Allow the user to control the DTV graphics using different keys mode_ctrl: { - // [156] phi from mode_ctrl mode_ctrl::@18 to mode_ctrl::@1 [phi:mode_ctrl/mode_ctrl::@18->mode_ctrl::@1] - // [156] phi (byte) dtv_control#114 = (byte) dtv_control#144 [phi:mode_ctrl/mode_ctrl::@18->mode_ctrl::@1#0] -- register_copy - // [156] phi from mode_ctrl::@11 to mode_ctrl::@1 [phi:mode_ctrl::@11->mode_ctrl::@1] + // [156] phi from mode_ctrl mode_ctrl::@11 mode_ctrl::@18 to mode_ctrl::@1 [phi:mode_ctrl/mode_ctrl::@11/mode_ctrl::@18->mode_ctrl::@1] + // [156] phi (byte) dtv_control#114 = (byte) dtv_control#144 [phi:mode_ctrl/mode_ctrl::@11/mode_ctrl::@18->mode_ctrl::@1#0] -- register_copy // mode_ctrl::@1 b1: // Wait for the raster diff --git a/src/test/ref/c64dtv-gfxmodes.sym b/src/test/ref/c64dtv-gfxmodes.sym index 80bd6eb12..1b799a5ef 100644 --- a/src/test/ref/c64dtv-gfxmodes.sym +++ b/src/test/ref/c64dtv-gfxmodes.sym @@ -425,7 +425,7 @@ (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 reg byte a 2002.0 (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 reg byte a 1003.0 (byte) dtv_control -(byte) dtv_control#114 dtv_control zp ZP_BYTE:9 42.099999999999994 +(byte) dtv_control#114 dtv_control zp ZP_BYTE:9 80.52941176470588 (byte) dtv_control#144 dtv_control zp ZP_BYTE:9 2.0 (byte) dtv_control#17 dtv_control zp ZP_BYTE:9 67.33333333333333 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) diff --git a/src/test/ref/callconstparam.log b/src/test/ref/callconstparam.log index f050ada7a..e8928f521 100644 --- a/src/test/ref/callconstparam.log +++ b/src/test/ref/callconstparam.log @@ -131,8 +131,6 @@ Alias (byte*) screen#11 = (byte*) screen#4 (byte*) screen#5 Alias (byte*) screen#0 = (byte*) screen#15 Alias (byte*) screen#12 = (byte*) screen#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) line::x1#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) screen#13 (byte*) screen#0 Identical Phi Values (byte*) screen#1 (byte*) screen#11 Identical Phi Values (byte*) screen#2 (byte*) screen#11 diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index 37e8c777e..d73fd7db1 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -189,12 +189,6 @@ Alias (byte*) SCREEN4#3 = (byte*) SCREEN4#4 Alias (byte) w::b#0 = (byte~) w::$1 Alias (byte) w::b2#0 = (byte~) w::$2 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) SCREEN2#1 -Self Phi Eliminated (byte*) SCREEN3#3 -Self Phi Eliminated (byte*) SCREEN4#3 -Self Phi Eliminated (byte*) SCREEN3#1 -Self Phi Eliminated (byte*) SCREEN4#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) SCREEN2#2 (byte*) SCREEN2#0 Identical Phi Values (byte*) SCREEN3#5 (byte*) SCREEN3#0 Identical Phi Values (byte*) SCREEN4#5 (byte*) SCREEN4#0 diff --git a/src/test/ref/chargen.log b/src/test/ref/chargen.log index f8a4c9919..e10367c5e 100644 --- a/src/test/ref/chargen.log +++ b/src/test/ref/chargen.log @@ -207,12 +207,11 @@ Alias (byte) main::x#2 = (byte) main::x#3 Alias (byte) main::y#3 = (byte) main::y#5 Alias (byte*) main::CHAR_A#2 = (byte*) main::CHAR_A#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::y#3 -Self Phi Eliminated (byte*) main::CHAR_A#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::y#3 (byte) main::y#2 Identical Phi Values (byte*) main::CHAR_A#2 (byte*) main::CHAR_A#1 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) main::CHAR_A#1 (byte*) main::CHAR_A#0 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$3 [17] if((byte~) main::$1==(byte) 0) goto main::@3 Simple Condition (bool~) main::$5 [25] if((byte) main::x#1!=rangelast(0,7)) goto main::@2 Simple Condition (bool~) main::$7 [33] if((byte) main::y#1!=rangelast(0,7)) goto main::@1 @@ -240,10 +239,6 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) main::CHAR_A#1 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) main::CHAR_A#1 (byte*) main::CHAR_A#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [1] (byte*) main::CHAR_A#0 ← (const byte*) CHARGEN#0 + (byte) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::CHAR_A#0 = CHARGEN#0+8 diff --git a/src/test/ref/chessboard.log b/src/test/ref/chessboard.log index f4ed6ab55..67a38e61f 100644 --- a/src/test/ref/chessboard.log +++ b/src/test/ref/chessboard.log @@ -141,10 +141,6 @@ Alias (byte) main::color#2 = (byte~) main::$2 Alias (byte*) main::screen#1 = (byte*~) main::$3 Alias (byte*) main::colors#1 = (byte*~) main::$4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::screen#2 -Self Phi Eliminated (byte*) main::colors#2 -Self Phi Eliminated (byte) main::row#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) main::screen#2 (byte*) main::screen#4 Identical Phi Values (byte*) main::colors#2 (byte*) main::colors#4 Identical Phi Values (byte) main::row#2 (byte) main::row#4 diff --git a/src/test/ref/comparison-rewriting.log b/src/test/ref/comparison-rewriting.log index f016190b8..467bf0d10 100644 --- a/src/test/ref/comparison-rewriting.log +++ b/src/test/ref/comparison-rewriting.log @@ -276,9 +276,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) main::i1#10 = (byte) main::i1#3 (byte) main::i1#2 (byte) main::i1#11 (byte) main::i1#12 (byte) main::i1#7 Alias (byte*) main::screen#1 = (byte*) main::screen#13 (byte*) main::screen#14 (byte*) main::screen#15 (byte*) main::screen#16 (byte*) main::screen#11 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::screen#10 -Self Phi Eliminated (byte*) main::screen#12 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) main::screen#10 (byte*) main::sc#0 Identical Phi Values (byte*) main::screen#12 (byte*) main::screen#10 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index b7351d0cd..2acd89296 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -3013,33 +3013,6 @@ Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2 Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2 Alias candidate removed (solo) (byte) getCharToProcess::x#3 = Alias candidate removed (solo) (byte) getCharToProcess::y#3 = -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (byte*) SCREEN_COPY#24 -Self Phi Eliminated (byte*) SCREEN_DIST#15 -Self Phi Eliminated (byte*) SCREEN_COPY#11 -Self Phi Eliminated (byte*) SCREEN_DIST#11 -Self Phi Eliminated (byte*) SCREEN_COPY#12 -Self Phi Eliminated (byte*) SCREEN_DIST#12 -Self Phi Eliminated (byte*) getCharToProcess::screen_line#2 -Self Phi Eliminated (byte*) getCharToProcess::dist_line#2 -Self Phi Eliminated (byte*) SCREEN_COPY#10 -Self Phi Eliminated (byte) startProcessing::freeIdx#4 -Self Phi Eliminated (byte) startProcessing::center_y#1 -Self Phi Eliminated (byte) startProcessing::center_x#1 -Self Phi Eliminated (byte) startProcessing::center_x#2 -Self Phi Eliminated (byte) startProcessing::center_y#2 -Self Phi Eliminated (byte) startProcessing::spriteIdx#1 -Self Phi Eliminated (byte) startProcessing::spriteCol#1 -Self Phi Eliminated (byte*) startProcessing::screenPtr#1 -Self Phi Eliminated (byte) init_angle_screen::y#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (signed word) atan2_16::y#1 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#1 (signed word) atan2_16::x#0 Identical Phi Values (signed word) atan2_16::yi#10 (signed word) atan2_16::yi#3 @@ -3082,20 +3055,26 @@ Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_an Identical Phi Values (word) setupRasterIrq::raster#1 (word) setupRasterIrq::raster#0 Identical Phi Values (void()*) setupRasterIrq::irqRoutine#1 (void()*) setupRasterIrq::irqRoutine#0 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 +Identical Phi Values (byte*) SCREEN_COPY#22 (byte*) SCREEN_COPY#0 +Identical Phi Values (byte) getCharToProcess::y#2 (byte) getCharToProcess::y#7 +Identical Phi Values (byte) startProcessing::center_y#8 (byte) startProcessing::center_y#0 +Identical Phi Values (byte) startProcessing::center_x#8 (byte) startProcessing::center_x#0 Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [441] (byte~) processChars::$17 ← (byte) processChars::i#10 * (byte) 2 Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) atan2_16::$0 [16] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [25] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [39] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [48] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [48] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [51] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [59] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [62] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [79] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [83] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [83] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$6 [164] if((byte*) main::src#1!=(byte*~) main::$5) goto main::@1 Simple Condition (bool~) main::$8 [190] if((byte) main::i#1!=rangelast(0,main::$7)) goto main::@3 Simple Condition (bool~) main::$11 [213] if((byte) main::center_dist#0!=(byte) NOT_FOUND#0) goto main::@6 @@ -3236,7 +3215,7 @@ if() condition always false - eliminating [611] if((const bool) DEBUG#0) goto ir Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [241] getCharToProcess::x#1 ← ++ getCharToProcess::x#2 to ++ Resolved ranged comparison value [243] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 to (number) $28 -Resolved ranged next value [256] getCharToProcess::y#1 ← ++ getCharToProcess::y#2 to ++ +Resolved ranged next value [256] getCharToProcess::y#1 ← ++ getCharToProcess::y#7 to ++ Resolved ranged comparison value [258] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 to (number) $19 Resolved ranged next value [327] startProcessing::i1#1 ← ++ startProcessing::i1#2 to ++ Resolved ranged comparison value [329] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 to (number) 8 @@ -3380,20 +3359,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) processChars::$17 = (byte~) processChars::$13 Alias (byte~) processChars::$30 = (byte~) processChars::$29 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Self Phi Eliminated (byte*) SCREEN_COPY#22 -Self Phi Eliminated (byte) getCharToProcess::y#2 -Self Phi Eliminated (byte) startProcessing::center_y#8 -Self Phi Eliminated (byte) startProcessing::center_x#8 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Identical Phi Values (byte*) SCREEN_COPY#22 (byte*) SCREEN_COPY#0 -Identical Phi Values (byte) getCharToProcess::y#2 (byte) getCharToProcess::y#7 -Identical Phi Values (byte) startProcessing::center_y#8 (byte) startProcessing::center_y#0 -Identical Phi Values (byte) startProcessing::center_x#8 (byte) startProcessing::center_x#0 -Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) processChars::$18 [230] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(word) XPOS_LEFTMOST#0) goto processChars::@7 Simple Condition (bool~) processChars::$23 [318] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(word) YPOS_BOTTOMMOST#0) goto processChars::@7 Simple Condition (bool~) processChars::$21 [319] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(word) YPOS_TOPMOST#0) goto processChars::@7 diff --git a/src/test/ref/complex/medusa/medusa.log b/src/test/ref/complex/medusa/medusa.log index 4f96c4f55..7e1ba8de3 100644 --- a/src/test/ref/complex/medusa/medusa.log +++ b/src/test/ref/complex/medusa/medusa.log @@ -208,9 +208,6 @@ Alias (byte*) memcpy::dst#2 = (byte*) memcpy::dst#3 Alias (byte*) memcpy::src_end#1 = (byte*) memcpy::src_end#2 Alias (void*) memcpy::destination#3 = (void*) memcpy::destination#5 (void*) memcpy::destination#4 (void*) memcpy::return#0 (void*) memcpy::return#4 (void*) memcpy::return#1 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) memcpy::src_end#1 -Self Phi Eliminated (void*) memcpy::destination#3 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) memcpy::src_end#1 (byte*) memcpy::src_end#0 Identical Phi Values (void*) memcpy::destination#3 (void*) memcpy::destination#2 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/complex/splines/truetype-splines.cfg b/src/test/ref/complex/splines/truetype-splines.cfg index 6180ae8c7..f1ddbf552 100644 --- a/src/test/ref/complex/splines/truetype-splines.cfg +++ b/src/test/ref/complex/splines/truetype-splines.cfg @@ -156,7 +156,7 @@ main::@10: scope:[main] from main::@2 [129] call show_letter to:main::@3 main::@3: scope:[main] from main::@10 main::@3 main::@5 - [130] (byte) main::w#4 ← phi( main::@10/(byte) 0 main::@5/(byte) main::w#1 ) + [130] (byte) main::w#4 ← phi( main::@10/(byte) 0 main::@3/(byte) main::w#4 main::@5/(byte) main::w#1 ) [131] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log index 54bcfc032..5eaf5ce05 100644 --- a/src/test/ref/complex/splines/truetype-splines.log +++ b/src/test/ref/complex/splines/truetype-splines.log @@ -4749,41 +4749,6 @@ Alias (signed byte*) COS#11 = (signed byte*) COS#5 Alias (signed word) show_letter::current_x#10 = (signed word) show_letter::segment_to_x#0 Alias (signed word) show_letter::current_y#10 = (signed word) show_letter::segment_to_y#0 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (signed word) spline_8segB::j_x#1 -Self Phi Eliminated (signed word) spline_8segB::j_y#1 -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (byte*) bitmap_init::gfx#2 -Self Phi Eliminated (byte*) bitmap_gfx#23 -Self Phi Eliminated (byte*) bitmap_screen#22 -Self Phi Eliminated (byte*) bitmap_gfx#11 -Self Phi Eliminated (byte*) bitmap_screen#11 -Self Phi Eliminated (word) bitmap_line::sy#1 -Self Phi Eliminated (word) bitmap_line::dx#11 -Self Phi Eliminated (word) bitmap_line::dy#11 -Self Phi Eliminated (word) bitmap_line::y2#10 -Self Phi Eliminated (word) bitmap_line::sx#1 -Self Phi Eliminated (word) bitmap_line::sx#11 -Self Phi Eliminated (word) bitmap_line::dy#12 -Self Phi Eliminated (word) bitmap_line::dx#12 -Self Phi Eliminated (word) bitmap_line::x2#4 -Self Phi Eliminated (word) bitmap_line::sy#2 -Self Phi Eliminated (byte) main::w#4 -Self Phi Eliminated (byte) main::angle#8 -Self Phi Eliminated (byte*) bitmap_screen#36 -Self Phi Eliminated (byte*) bitmap_gfx#37 -Self Phi Eliminated (signed byte*) COS#24 -Self Phi Eliminated (byte) main::w#2 -Self Phi Eliminated (byte) main::angle#3 -Self Phi Eliminated (byte*) bitmap_screen#24 -Self Phi Eliminated (byte*) bitmap_gfx#25 -Self Phi Eliminated (signed byte*) COS#18 -Self Phi Eliminated (byte*) bitmap_gfx#14 -Self Phi Eliminated (byte*) bitmap_screen#14 -Self Phi Eliminated (byte) show_letter::angle#1 -Self Phi Eliminated (signed byte*) COS#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (signed word) spline_8segB::p1_x#1 (signed word) spline_8segB::p1_x#0 Identical Phi Values (signed word) spline_8segB::p2_x#1 (signed word) spline_8segB::p2_x#0 Identical Phi Values (signed word) spline_8segB::p0_x#1 (signed word) spline_8segB::p0_x#0 @@ -4835,6 +4800,17 @@ Identical Phi Values (byte*) bitmap_gfx#10 (byte*) bitmap_gfx#14 Identical Phi Values (byte*) bitmap_screen#10 (byte*) bitmap_screen#14 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#3 +Identical Phi Values (byte) main::angle#8 (byte) main::angle#2 +Identical Phi Values (byte*) bitmap_screen#36 (byte*) bitmap_screen#12 +Identical Phi Values (byte*) bitmap_gfx#37 (byte*) bitmap_gfx#18 +Identical Phi Values (signed byte*) COS#24 (signed byte*) COS#10 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) bitmap_screen#12 (byte*) bitmap_screen#1 +Identical Phi Values (byte*) bitmap_gfx#18 (byte*) bitmap_gfx#1 +Identical Phi Values (signed byte*) COS#10 (signed byte*) COS#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) bitmap_screen#7 (byte*) bitmap_screen#1 +Identical Phi Values (byte*) bitmap_gfx#12 (byte*) bitmap_gfx#1 Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [114] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 Identified duplicate assignment right side [875] (byte~) bitmap_plot_spline_8seg::$8 ← (byte) bitmap_plot_spline_8seg::n#2 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16 @@ -5001,6 +4977,8 @@ Constant value identified (signed word*)SPLINE_8SEG#0 in [37] (signed word*) spl Constant value identified (signed word*)SPLINE_8SEG#0 in [39] (signed word*) spline_8segB::$34 ← (signed word*)(const struct SplineVector16[9]) SPLINE_8SEG#0 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y Constant value identified (signed word*)SPLINE_8SEG#0 in [58] (signed word*) spline_8segB::$35 ← (signed word*)(const struct SplineVector16[9]) SPLINE_8SEG#0 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X Constant value identified (signed word*)SPLINE_8SEG#0 in [60] (signed word*) spline_8segB::$36 ← (signed word*)(const struct SplineVector16[9]) SPLINE_8SEG#0 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant value identified (void*)bitmap_screen#1 in [133] (void*) memset::str#0 ← (void*)(const byte*) bitmap_screen#1 +Constant value identified (void*)bitmap_gfx#1 in [139] (void*) memset::str#1 ← (void*)(const byte*) bitmap_gfx#1 Constant value identified (byte*)letter_c#0 in [392] (byte*) main::$38 ← (byte*)(const struct Segment[$16]) letter_c#0 + (const byte) OFFSET_STRUCT_SEGMENT_TYPE Constant value identified (struct SplineVector16*)letter_c#0 in [394] (struct SplineVector16*) main::$39 ← (struct SplineVector16*)(const struct Segment[$16]) letter_c#0 + (const byte) OFFSET_STRUCT_SEGMENT_TO Constant value identified (struct SplineVector16*)letter_c#0 in [399] (struct SplineVector16*) main::$40 ← (struct SplineVector16*)(const struct Segment[$16]) letter_c#0 + (const byte) OFFSET_STRUCT_SEGMENT_VIA @@ -5224,16 +5202,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) bitmap_init::$7 = (byte~) bitmap_init::$3 Alias (byte~) bitmap_plot_spline_8seg::$8 = (byte~) bitmap_plot_spline_8seg::$7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::angle#8 -Self Phi Eliminated (byte*) bitmap_screen#36 -Self Phi Eliminated (byte*) bitmap_gfx#37 -Self Phi Eliminated (signed byte*) COS#24 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) main::angle#8 (byte) main::angle#2 -Identical Phi Values (byte*) bitmap_screen#36 (byte*) bitmap_screen#12 -Identical Phi Values (byte*) bitmap_gfx#37 (byte*) bitmap_gfx#18 -Identical Phi Values (signed byte*) COS#24 (signed byte*) COS#10 -Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) bitmap_line::$4 [102] if((word) bitmap_line::dx#0==(byte) 0) goto bitmap_line::@24 Simple Condition (bool~) bitmap_line::$5 [638] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -5307,6 +5275,8 @@ Constant (const signed word*) spline_8segB::$33 = (signed word*)SPLINE_8SEG#0 Constant (const signed word*) spline_8segB::$34 = (signed word*)SPLINE_8SEG#0+OFFSET_STRUCT_SPLINEVECTOR16_Y Constant (const signed word*) spline_8segB::$35 = (signed word*)SPLINE_8SEG#0 Constant (const signed word*) spline_8segB::$36 = (signed word*)SPLINE_8SEG#0+OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant (const void*) memset::str#0 = (void*)bitmap_screen#1 +Constant (const void*) memset::str#1 = (void*)bitmap_gfx#1 Constant (const byte*) mulf_init::sqr1_hi#0 = mulf_sqr1_hi#0+1 Constant (const byte*) mulf_init::sqr1_lo#0 = mulf_sqr1_lo#0+1 Constant (const byte*) mulf_init::$13 = mulf_sqr1_lo#0+$200 @@ -5494,74 +5464,59 @@ Successful SSA optimization Pass2ConstantValues Converting *(pointer+n) to pointer[n] [223] *((signed word*) main::$105) ← (signed word) $92 -- *((signed word*)main::$39 + OFFSET_STRUCT_SPLINEVECTOR16_Y) Converting *(pointer+n) to pointer[n] [228] *((signed word*) main::$107) ← (signed byte) 0 -- *((signed word*)main::$40 + OFFSET_STRUCT_SPLINEVECTOR16_Y) Successful SSA optimization Pass2InlineDerefIdx -Eliminating unused variable (signed word*) main::$105 and assignment [205] (signed word*) main::$105 ← (signed word*)(const struct SplineVector16*) main::$39 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Eliminating unused variable (signed word*) main::$107 and assignment [209] (signed word*) main::$107 ← (signed word*)(const struct SplineVector16*) main::$40 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Eliminating unused variable (signed word*) main::$105 and assignment [203] (signed word*) main::$105 ← (signed word*)(const struct SplineVector16*) main::$39 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Eliminating unused variable (signed word*) main::$107 and assignment [207] (signed word*) main::$107 ← (signed word*)(const struct SplineVector16*) main::$40 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y Eliminating unused constant (const byte*) PRINT_SCREEN#0 Successful SSA optimization PassNEliminateUnusedVars -Self Phi Eliminated (byte*) bitmap_screen#12 -Self Phi Eliminated (byte*) bitmap_gfx#18 -Self Phi Eliminated (signed byte*) COS#10 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) bitmap_screen#12 (const byte*) bitmap_screen#1 -Identical Phi Values (byte*) bitmap_gfx#18 (const byte*) bitmap_gfx#1 -Identical Phi Values (signed byte*) COS#10 (const signed byte*) COS#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values (byte*) bitmap_screen#7 (const byte*) bitmap_screen#1 -Identical Phi Values (byte*) bitmap_gfx#12 (const byte*) bitmap_gfx#1 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [72] (void*) memset::str#0 ← (void*)(const byte*) bitmap_screen#1 -Constant right-side identified [75] (void*) memset::str#1 ← (void*)(const byte*) bitmap_gfx#1 -Constant right-side identified [212] (signed word*) main::$109 ← (signed word*)(const struct SplineVector16*) main::$42 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [216] (signed word*) main::$111 ← (signed word*)(const struct SplineVector16*) main::$43 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [221] (signed word*) main::$113 ← (signed word*)(const struct SplineVector16*) main::$45 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [225] (signed word*) main::$115 ← (signed word*)(const struct SplineVector16*) main::$46 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [230] (signed word*) main::$117 ← (signed word*)(const struct SplineVector16*) main::$48 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [234] (signed word*) main::$119 ← (signed word*)(const struct SplineVector16*) main::$49 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [239] (signed word*) main::$121 ← (signed word*)(const struct SplineVector16*) main::$51 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [243] (signed word*) main::$123 ← (signed word*)(const struct SplineVector16*) main::$52 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [248] (signed word*) main::$125 ← (signed word*)(const struct SplineVector16*) main::$54 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [252] (signed word*) main::$127 ← (signed word*)(const struct SplineVector16*) main::$55 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [257] (signed word*) main::$129 ← (signed word*)(const struct SplineVector16*) main::$57 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [261] (signed word*) main::$131 ← (signed word*)(const struct SplineVector16*) main::$58 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [266] (signed word*) main::$133 ← (signed word*)(const struct SplineVector16*) main::$60 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [270] (signed word*) main::$135 ← (signed word*)(const struct SplineVector16*) main::$61 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [275] (signed word*) main::$137 ← (signed word*)(const struct SplineVector16*) main::$63 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [279] (signed word*) main::$139 ← (signed word*)(const struct SplineVector16*) main::$64 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [284] (signed word*) main::$141 ← (signed word*)(const struct SplineVector16*) main::$66 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [288] (signed word*) main::$143 ← (signed word*)(const struct SplineVector16*) main::$67 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [293] (signed word*) main::$145 ← (signed word*)(const struct SplineVector16*) main::$69 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [297] (signed word*) main::$147 ← (signed word*)(const struct SplineVector16*) main::$70 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [302] (signed word*) main::$149 ← (signed word*)(const struct SplineVector16*) main::$72 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [306] (signed word*) main::$151 ← (signed word*)(const struct SplineVector16*) main::$73 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [311] (signed word*) main::$153 ← (signed word*)(const struct SplineVector16*) main::$75 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [315] (signed word*) main::$155 ← (signed word*)(const struct SplineVector16*) main::$76 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [320] (signed word*) main::$157 ← (signed word*)(const struct SplineVector16*) main::$78 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [324] (signed word*) main::$159 ← (signed word*)(const struct SplineVector16*) main::$79 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [329] (signed word*) main::$161 ← (signed word*)(const struct SplineVector16*) main::$81 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [333] (signed word*) main::$163 ← (signed word*)(const struct SplineVector16*) main::$82 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [338] (signed word*) main::$165 ← (signed word*)(const struct SplineVector16*) main::$84 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [342] (signed word*) main::$167 ← (signed word*)(const struct SplineVector16*) main::$85 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [347] (signed word*) main::$169 ← (signed word*)(const struct SplineVector16*) main::$87 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [351] (signed word*) main::$171 ← (signed word*)(const struct SplineVector16*) main::$88 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [356] (signed word*) main::$173 ← (signed word*)(const struct SplineVector16*) main::$90 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [360] (signed word*) main::$175 ← (signed word*)(const struct SplineVector16*) main::$91 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [365] (signed word*) main::$177 ← (signed word*)(const struct SplineVector16*) main::$93 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [369] (signed word*) main::$179 ← (signed word*)(const struct SplineVector16*) main::$94 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [374] (signed word*) main::$181 ← (signed word*)(const struct SplineVector16*) main::$96 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [378] (signed word*) main::$183 ← (signed word*)(const struct SplineVector16*) main::$97 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [383] (signed word*) main::$185 ← (signed word*)(const struct SplineVector16*) main::$99 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [387] (signed word*) main::$187 ← (signed word*)(const struct SplineVector16*) main::$100 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [392] (signed word*) main::$189 ← (signed word*)(const struct SplineVector16*) main::$102 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [396] (signed word*) main::$191 ← (signed word*)(const struct SplineVector16*) main::$103 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [402] (byte~) main::vicSelectGfxBank1_toDd001_$1#0 ← > (const word) main::vicSelectGfxBank1_toDd001_$0#0 -Constant right-side identified [406] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff -Constant right-side identified [409] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 -Constant right-side identified [414] (byte~) main::$6 ← (const byte) main::$5 | (const byte) VIC_RSEL#0 -Constant right-side identified [431] (signed word*) show_letter::$29 ← (signed word*)(const struct SplineVector16*) show_letter::$24 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [448] (signed word*) show_letter::$31 ← (signed word*)(const struct SplineVector16*) show_letter::$26 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [210] (signed word*) main::$109 ← (signed word*)(const struct SplineVector16*) main::$42 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [214] (signed word*) main::$111 ← (signed word*)(const struct SplineVector16*) main::$43 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [219] (signed word*) main::$113 ← (signed word*)(const struct SplineVector16*) main::$45 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [223] (signed word*) main::$115 ← (signed word*)(const struct SplineVector16*) main::$46 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [228] (signed word*) main::$117 ← (signed word*)(const struct SplineVector16*) main::$48 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [232] (signed word*) main::$119 ← (signed word*)(const struct SplineVector16*) main::$49 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [237] (signed word*) main::$121 ← (signed word*)(const struct SplineVector16*) main::$51 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [241] (signed word*) main::$123 ← (signed word*)(const struct SplineVector16*) main::$52 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [246] (signed word*) main::$125 ← (signed word*)(const struct SplineVector16*) main::$54 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [250] (signed word*) main::$127 ← (signed word*)(const struct SplineVector16*) main::$55 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [255] (signed word*) main::$129 ← (signed word*)(const struct SplineVector16*) main::$57 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [259] (signed word*) main::$131 ← (signed word*)(const struct SplineVector16*) main::$58 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [264] (signed word*) main::$133 ← (signed word*)(const struct SplineVector16*) main::$60 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [268] (signed word*) main::$135 ← (signed word*)(const struct SplineVector16*) main::$61 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [273] (signed word*) main::$137 ← (signed word*)(const struct SplineVector16*) main::$63 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [277] (signed word*) main::$139 ← (signed word*)(const struct SplineVector16*) main::$64 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [282] (signed word*) main::$141 ← (signed word*)(const struct SplineVector16*) main::$66 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [286] (signed word*) main::$143 ← (signed word*)(const struct SplineVector16*) main::$67 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [291] (signed word*) main::$145 ← (signed word*)(const struct SplineVector16*) main::$69 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [295] (signed word*) main::$147 ← (signed word*)(const struct SplineVector16*) main::$70 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [300] (signed word*) main::$149 ← (signed word*)(const struct SplineVector16*) main::$72 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [304] (signed word*) main::$151 ← (signed word*)(const struct SplineVector16*) main::$73 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [309] (signed word*) main::$153 ← (signed word*)(const struct SplineVector16*) main::$75 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [313] (signed word*) main::$155 ← (signed word*)(const struct SplineVector16*) main::$76 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [318] (signed word*) main::$157 ← (signed word*)(const struct SplineVector16*) main::$78 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [322] (signed word*) main::$159 ← (signed word*)(const struct SplineVector16*) main::$79 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [327] (signed word*) main::$161 ← (signed word*)(const struct SplineVector16*) main::$81 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [331] (signed word*) main::$163 ← (signed word*)(const struct SplineVector16*) main::$82 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [336] (signed word*) main::$165 ← (signed word*)(const struct SplineVector16*) main::$84 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [340] (signed word*) main::$167 ← (signed word*)(const struct SplineVector16*) main::$85 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [345] (signed word*) main::$169 ← (signed word*)(const struct SplineVector16*) main::$87 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [349] (signed word*) main::$171 ← (signed word*)(const struct SplineVector16*) main::$88 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [354] (signed word*) main::$173 ← (signed word*)(const struct SplineVector16*) main::$90 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [358] (signed word*) main::$175 ← (signed word*)(const struct SplineVector16*) main::$91 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [363] (signed word*) main::$177 ← (signed word*)(const struct SplineVector16*) main::$93 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [367] (signed word*) main::$179 ← (signed word*)(const struct SplineVector16*) main::$94 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [372] (signed word*) main::$181 ← (signed word*)(const struct SplineVector16*) main::$96 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [376] (signed word*) main::$183 ← (signed word*)(const struct SplineVector16*) main::$97 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [381] (signed word*) main::$185 ← (signed word*)(const struct SplineVector16*) main::$99 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [385] (signed word*) main::$187 ← (signed word*)(const struct SplineVector16*) main::$100 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [390] (signed word*) main::$189 ← (signed word*)(const struct SplineVector16*) main::$102 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [394] (signed word*) main::$191 ← (signed word*)(const struct SplineVector16*) main::$103 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [400] (byte~) main::vicSelectGfxBank1_toDd001_$1#0 ← > (const word) main::vicSelectGfxBank1_toDd001_$0#0 +Constant right-side identified [404] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff +Constant right-side identified [407] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 +Constant right-side identified [412] (byte~) main::$6 ← (const byte) main::$5 | (const byte) VIC_RSEL#0 +Constant right-side identified [429] (signed word*) show_letter::$29 ← (signed word*)(const struct SplineVector16*) show_letter::$24 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [446] (signed word*) show_letter::$31 ← (signed word*)(const struct SplineVector16*) show_letter::$26 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const void*) memset::str#0 = (void*)bitmap_screen#1 -Constant (const void*) memset::str#1 = (void*)bitmap_gfx#1 Constant (const signed word*) main::$104 = (signed word*)main::$39 Constant (const signed word*) main::$106 = (signed word*)main::$40 Constant (const signed word*) main::$108 = (signed word*)main::$42 @@ -6155,7 +6110,8 @@ Added new block during phi lifting mulf_init::@11(between mulf_init::@6 and mulf Added new block during phi lifting mulf_init::@12(between mulf_init::@5 and mulf_init::@6) Added new block during phi lifting mulf16s::@7(between mulf16s::@6 and mulf16s::@1) Added new block during phi lifting mulf16s::@8(between mulf16s::@1 and mulf16s::@2) -Added new block during phi lifting main::@26(between main::@8 and main::@5) +Added new block during phi lifting main::@26(between main::@5 and main::@5) +Added new block during phi lifting main::@27(between main::@8 and main::@5) Added new block during phi lifting show_letter::@16(between show_letter::@5 and show_letter::@1) Added new block during phi lifting bitmap_plot_spline_8seg::@4(between bitmap_plot_spline_8seg::@3 and bitmap_plot_spline_8seg::@1) Adding NOP phi() at start of @begin @@ -6200,117 +6156,118 @@ Adding NOP phi() at start of mulf_init::@7 CALL GRAPH Calls in [] to main:8 Calls in [main] to mulf_init:121 bitmap_init:123 bitmap_clear:125 bitmap_clear:138 show_letter:140 -Calls in [show_letter] to rotate:164 rotate:183 bitmap_line:203 spline_8segB:217 bitmap_plot_spline_8seg:219 -Calls in [bitmap_plot_spline_8seg] to bitmap_line:234 -Calls in [bitmap_line] to abs_u16:247 abs_u16:252 sgn_u16:259 sgn_u16:264 bitmap_plot:277 bitmap_plot:294 bitmap_plot:311 bitmap_plot:332 -Calls in [rotate] to mulf16s:412 mulf16s:421 mulf16s:431 mulf16s:441 -Calls in [mulf16s] to mulf16u:455 -Calls in [bitmap_clear] to memset:480 memset:482 +Calls in [show_letter] to rotate:165 rotate:184 bitmap_line:204 spline_8segB:218 bitmap_plot_spline_8seg:220 +Calls in [bitmap_plot_spline_8seg] to bitmap_line:235 +Calls in [bitmap_line] to abs_u16:248 abs_u16:253 sgn_u16:260 sgn_u16:265 bitmap_plot:278 bitmap_plot:295 bitmap_plot:312 bitmap_plot:333 +Calls in [rotate] to mulf16s:413 mulf16s:422 mulf16s:432 mulf16s:442 +Calls in [mulf16s] to mulf16u:456 +Calls in [bitmap_clear] to memset:481 memset:483 Created 64 initial phi equivalence classes Coalesced [148] main::angle#10 ← main::angle#1 -Coalesced [149] main::w#5 ← main::w#1 -Coalesced [161] rotate::angle#5 ← rotate::angle#0 -Coalesced [162] rotate::vector_x#6 ← rotate::vector_x#0 -Coalesced [163] rotate::vector_y#5 ← rotate::vector_y#0 -Coalesced [180] rotate::angle#6 ← rotate::angle#1 -Coalesced [181] rotate::vector_x#7 ← rotate::vector_x#1 -Coalesced [182] rotate::vector_y#6 ← rotate::vector_y#1 -Coalesced [199] bitmap_line::x#21 ← bitmap_line::x1#0 -Coalesced [200] bitmap_line::y#21 ← bitmap_line::y1#0 -Coalesced [201] bitmap_line::x2#14 ← bitmap_line::x2#0 -Coalesced [202] bitmap_line::y2#14 ← bitmap_line::y2#0 -Coalesced [208] show_letter::i#13 ← show_letter::i#1 -Not coalescing [209] show_letter::current_x#11 ← show_letter::current_x#10 -Not coalescing [210] show_letter::current_y#11 ← show_letter::current_y#10 -Coalesced [224] bitmap_plot_spline_8seg::current_x#3 ← bitmap_plot_spline_8seg::current_x#0 -Coalesced [225] bitmap_plot_spline_8seg::current_y#3 ← bitmap_plot_spline_8seg::current_y#0 -Coalesced [230] bitmap_line::x#20 ← bitmap_line::x1#1 -Coalesced [231] bitmap_line::y#20 ← bitmap_line::y1#1 -Coalesced [241] bitmap_plot_spline_8seg::current_x#4 ← bitmap_plot_spline_8seg::current_x#1 -Coalesced [242] bitmap_plot_spline_8seg::current_y#4 ← bitmap_plot_spline_8seg::current_y#1 -Coalesced [243] bitmap_plot_spline_8seg::n#4 ← bitmap_plot_spline_8seg::n#1 -Coalesced [246] abs_u16::w#5 ← abs_u16::w#0 -Coalesced [251] abs_u16::w#6 ← abs_u16::w#1 -Coalesced [258] sgn_u16::w#3 ← sgn_u16::w#0 -Coalesced [263] sgn_u16::w#4 ← sgn_u16::w#1 -Coalesced [269] bitmap_line::y#22 ← bitmap_line::y#0 -Coalesced [270] bitmap_line::x#22 ← bitmap_line::x#0 -Coalesced [271] bitmap_line::e#7 ← bitmap_line::e#0 -Coalesced [275] bitmap_plot::y#8 ← bitmap_plot::y#1 -Coalesced [276] bitmap_plot::x#8 ← bitmap_plot::x#1 -Coalesced [283] bitmap_line::x#25 ← bitmap_line::x#1 -Coalesced [284] bitmap_line::e#10 ← bitmap_line::e#2 -Coalesced [287] bitmap_line::y#25 ← bitmap_line::y#1 -Coalesced [288] bitmap_line::x#27 ← bitmap_line::x#12 -Coalesced [292] bitmap_plot::y#6 ← bitmap_plot::y#2 -Coalesced [293] bitmap_plot::x#6 ← bitmap_plot::x#2 -Coalesced [297] bitmap_line::y#23 ← bitmap_line::y#1 -Coalesced [298] bitmap_line::x#23 ← bitmap_line::x#12 -Coalesced [299] bitmap_line::e#8 ← bitmap_line::e#6 -Coalesced (already) [300] bitmap_line::x#24 ← bitmap_line::x#13 -Coalesced [301] bitmap_line::e#9 ← bitmap_line::e#1 -Coalesced [303] bitmap_line::y#27 ← bitmap_line::y#0 -Coalesced [304] bitmap_line::x#29 ← bitmap_line::x#0 -Coalesced [305] bitmap_line::e1#8 ← bitmap_line::e1#0 -Coalesced [309] bitmap_plot::y#5 ← bitmap_plot::y#3 -Coalesced [310] bitmap_plot::x#5 ← bitmap_plot::x#3 -Coalesced [317] bitmap_line::y#28 ← bitmap_line::y#2 -Coalesced [318] bitmap_line::e1#9 ← bitmap_line::e1#2 -Coalesced [321] bitmap_line::y#24 ← bitmap_line::y#13 -Coalesced [322] bitmap_line::x#26 ← bitmap_line::x#15 -Coalesced (already) [323] bitmap_line::y#26 ← bitmap_line::y#13 -Coalesced (already) [324] bitmap_line::x#28 ← bitmap_line::x#15 -Coalesced [325] bitmap_line::e1#7 ← bitmap_line::e1#6 -Coalesced (already) [326] bitmap_line::y#29 ← bitmap_line::y#15 -Coalesced [327] bitmap_line::e1#10 ← bitmap_line::e1#1 -Coalesced [330] bitmap_plot::y#7 ← bitmap_plot::y#0 -Coalesced [331] bitmap_plot::x#7 ← bitmap_plot::x#0 -Coalesced [353] abs_u16::return#9 ← abs_u16::w#2 -Coalesced [357] abs_u16::return#8 ← abs_u16::return#2 -Coalesced [376] spline_8segB::p_x#4 ← spline_8segB::p_x#0 -Coalesced [377] spline_8segB::p_y#4 ← spline_8segB::p_y#0 -Coalesced [378] spline_8segB::i_x#3 ← spline_8segB::i_x#0 -Coalesced [379] spline_8segB::i_y#3 ← spline_8segB::i_y#0 -Coalesced [401] spline_8segB::p_x#5 ← spline_8segB::p_x#1 -Coalesced [402] spline_8segB::p_y#5 ← spline_8segB::p_y#1 -Coalesced [403] spline_8segB::n#3 ← spline_8segB::n#1 -Coalesced [404] spline_8segB::i_x#4 ← spline_8segB::i_x#1 -Coalesced [405] spline_8segB::i_y#4 ← spline_8segB::i_y#1 -Coalesced [410] mulf16s::a#9 ← mulf16s::a#0 -Coalesced [411] mulf16s::b#8 ← mulf16s::b#0 -Coalesced [419] mulf16s::a#10 ← mulf16s::a#1 -Coalesced [420] mulf16s::b#9 ← mulf16s::b#1 -Coalesced [429] mulf16s::a#11 ← mulf16s::a#2 -Coalesced [430] mulf16s::b#10 ← mulf16s::b#2 -Coalesced [439] mulf16s::a#12 ← mulf16s::a#3 -Coalesced [440] mulf16s::b#11 ← mulf16s::b#3 -Coalesced [462] mulf16s::m#7 ← mulf16s::m#1 -Coalesced [468] mulf16s::m#10 ← mulf16s::m#2 -Coalesced [472] mulf16s::m#9 ← mulf16s::m#5 -Coalesced [473] mulf16s::m#8 ← mulf16s::m#0 -Coalesced [495] memset::dst#4 ← memset::dst#1 -Coalesced [515] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [520] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [521] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [522] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [523] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [524] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [525] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [533] mulf_init::sqr#8 ← mulf_init::sqr#2 -Coalesced [534] mulf_init::x_2#7 ← mulf_init::x_2#1 -Coalesced [558] mulf_init::x_255#5 ← mulf_init::x_255#1 -Coalesced [559] mulf_init::sqr2_lo#5 ← mulf_init::sqr2_lo#1 -Coalesced [560] mulf_init::sqr2_hi#5 ← mulf_init::sqr2_hi#1 -Coalesced [561] mulf_init::dir#4 ← mulf_init::dir#3 -Coalesced (already) [562] mulf_init::dir#5 ← mulf_init::dir#2 -Coalesced [563] mulf_init::c#5 ← mulf_init::c#1 -Coalesced [564] mulf_init::sqr#6 ← mulf_init::sqr#1 -Coalesced [565] mulf_init::sqr1_lo#5 ← mulf_init::sqr1_lo#1 -Coalesced [566] mulf_init::sqr1_hi#5 ← mulf_init::sqr1_hi#1 -Coalesced [567] mulf_init::x_2#5 ← mulf_init::x_2#2 -Coalesced [568] mulf_init::sqr#7 ← mulf_init::sqr#4 -Coalesced (already) [569] mulf_init::x_2#6 ← mulf_init::x_2#3 +Coalesced [149] main::w#6 ← main::w#1 +Coalesced (already) [150] main::w#5 ← main::w#4 +Coalesced [162] rotate::angle#5 ← rotate::angle#0 +Coalesced [163] rotate::vector_x#6 ← rotate::vector_x#0 +Coalesced [164] rotate::vector_y#5 ← rotate::vector_y#0 +Coalesced [181] rotate::angle#6 ← rotate::angle#1 +Coalesced [182] rotate::vector_x#7 ← rotate::vector_x#1 +Coalesced [183] rotate::vector_y#6 ← rotate::vector_y#1 +Coalesced [200] bitmap_line::x#21 ← bitmap_line::x1#0 +Coalesced [201] bitmap_line::y#21 ← bitmap_line::y1#0 +Coalesced [202] bitmap_line::x2#14 ← bitmap_line::x2#0 +Coalesced [203] bitmap_line::y2#14 ← bitmap_line::y2#0 +Coalesced [209] show_letter::i#13 ← show_letter::i#1 +Not coalescing [210] show_letter::current_x#11 ← show_letter::current_x#10 +Not coalescing [211] show_letter::current_y#11 ← show_letter::current_y#10 +Coalesced [225] bitmap_plot_spline_8seg::current_x#3 ← bitmap_plot_spline_8seg::current_x#0 +Coalesced [226] bitmap_plot_spline_8seg::current_y#3 ← bitmap_plot_spline_8seg::current_y#0 +Coalesced [231] bitmap_line::x#20 ← bitmap_line::x1#1 +Coalesced [232] bitmap_line::y#20 ← bitmap_line::y1#1 +Coalesced [242] bitmap_plot_spline_8seg::current_x#4 ← bitmap_plot_spline_8seg::current_x#1 +Coalesced [243] bitmap_plot_spline_8seg::current_y#4 ← bitmap_plot_spline_8seg::current_y#1 +Coalesced [244] bitmap_plot_spline_8seg::n#4 ← bitmap_plot_spline_8seg::n#1 +Coalesced [247] abs_u16::w#5 ← abs_u16::w#0 +Coalesced [252] abs_u16::w#6 ← abs_u16::w#1 +Coalesced [259] sgn_u16::w#3 ← sgn_u16::w#0 +Coalesced [264] sgn_u16::w#4 ← sgn_u16::w#1 +Coalesced [270] bitmap_line::y#22 ← bitmap_line::y#0 +Coalesced [271] bitmap_line::x#22 ← bitmap_line::x#0 +Coalesced [272] bitmap_line::e#7 ← bitmap_line::e#0 +Coalesced [276] bitmap_plot::y#8 ← bitmap_plot::y#1 +Coalesced [277] bitmap_plot::x#8 ← bitmap_plot::x#1 +Coalesced [284] bitmap_line::x#25 ← bitmap_line::x#1 +Coalesced [285] bitmap_line::e#10 ← bitmap_line::e#2 +Coalesced [288] bitmap_line::y#25 ← bitmap_line::y#1 +Coalesced [289] bitmap_line::x#27 ← bitmap_line::x#12 +Coalesced [293] bitmap_plot::y#6 ← bitmap_plot::y#2 +Coalesced [294] bitmap_plot::x#6 ← bitmap_plot::x#2 +Coalesced [298] bitmap_line::y#23 ← bitmap_line::y#1 +Coalesced [299] bitmap_line::x#23 ← bitmap_line::x#12 +Coalesced [300] bitmap_line::e#8 ← bitmap_line::e#6 +Coalesced (already) [301] bitmap_line::x#24 ← bitmap_line::x#13 +Coalesced [302] bitmap_line::e#9 ← bitmap_line::e#1 +Coalesced [304] bitmap_line::y#27 ← bitmap_line::y#0 +Coalesced [305] bitmap_line::x#29 ← bitmap_line::x#0 +Coalesced [306] bitmap_line::e1#8 ← bitmap_line::e1#0 +Coalesced [310] bitmap_plot::y#5 ← bitmap_plot::y#3 +Coalesced [311] bitmap_plot::x#5 ← bitmap_plot::x#3 +Coalesced [318] bitmap_line::y#28 ← bitmap_line::y#2 +Coalesced [319] bitmap_line::e1#9 ← bitmap_line::e1#2 +Coalesced [322] bitmap_line::y#24 ← bitmap_line::y#13 +Coalesced [323] bitmap_line::x#26 ← bitmap_line::x#15 +Coalesced (already) [324] bitmap_line::y#26 ← bitmap_line::y#13 +Coalesced (already) [325] bitmap_line::x#28 ← bitmap_line::x#15 +Coalesced [326] bitmap_line::e1#7 ← bitmap_line::e1#6 +Coalesced (already) [327] bitmap_line::y#29 ← bitmap_line::y#15 +Coalesced [328] bitmap_line::e1#10 ← bitmap_line::e1#1 +Coalesced [331] bitmap_plot::y#7 ← bitmap_plot::y#0 +Coalesced [332] bitmap_plot::x#7 ← bitmap_plot::x#0 +Coalesced [354] abs_u16::return#9 ← abs_u16::w#2 +Coalesced [358] abs_u16::return#8 ← abs_u16::return#2 +Coalesced [377] spline_8segB::p_x#4 ← spline_8segB::p_x#0 +Coalesced [378] spline_8segB::p_y#4 ← spline_8segB::p_y#0 +Coalesced [379] spline_8segB::i_x#3 ← spline_8segB::i_x#0 +Coalesced [380] spline_8segB::i_y#3 ← spline_8segB::i_y#0 +Coalesced [402] spline_8segB::p_x#5 ← spline_8segB::p_x#1 +Coalesced [403] spline_8segB::p_y#5 ← spline_8segB::p_y#1 +Coalesced [404] spline_8segB::n#3 ← spline_8segB::n#1 +Coalesced [405] spline_8segB::i_x#4 ← spline_8segB::i_x#1 +Coalesced [406] spline_8segB::i_y#4 ← spline_8segB::i_y#1 +Coalesced [411] mulf16s::a#9 ← mulf16s::a#0 +Coalesced [412] mulf16s::b#8 ← mulf16s::b#0 +Coalesced [420] mulf16s::a#10 ← mulf16s::a#1 +Coalesced [421] mulf16s::b#9 ← mulf16s::b#1 +Coalesced [430] mulf16s::a#11 ← mulf16s::a#2 +Coalesced [431] mulf16s::b#10 ← mulf16s::b#2 +Coalesced [440] mulf16s::a#12 ← mulf16s::a#3 +Coalesced [441] mulf16s::b#11 ← mulf16s::b#3 +Coalesced [463] mulf16s::m#7 ← mulf16s::m#1 +Coalesced [469] mulf16s::m#10 ← mulf16s::m#2 +Coalesced [473] mulf16s::m#9 ← mulf16s::m#5 +Coalesced [474] mulf16s::m#8 ← mulf16s::m#0 +Coalesced [496] memset::dst#4 ← memset::dst#1 +Coalesced [516] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [521] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [522] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [523] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [524] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [525] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [526] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [534] mulf_init::sqr#8 ← mulf_init::sqr#2 +Coalesced [535] mulf_init::x_2#7 ← mulf_init::x_2#1 +Coalesced [559] mulf_init::x_255#5 ← mulf_init::x_255#1 +Coalesced [560] mulf_init::sqr2_lo#5 ← mulf_init::sqr2_lo#1 +Coalesced [561] mulf_init::sqr2_hi#5 ← mulf_init::sqr2_hi#1 +Coalesced [562] mulf_init::dir#4 ← mulf_init::dir#3 +Coalesced (already) [563] mulf_init::dir#5 ← mulf_init::dir#2 +Coalesced [564] mulf_init::c#5 ← mulf_init::c#1 +Coalesced [565] mulf_init::sqr#6 ← mulf_init::sqr#1 +Coalesced [566] mulf_init::sqr1_lo#5 ← mulf_init::sqr1_lo#1 +Coalesced [567] mulf_init::sqr1_hi#5 ← mulf_init::sqr1_hi#1 +Coalesced [568] mulf_init::x_2#5 ← mulf_init::x_2#2 +Coalesced [569] mulf_init::sqr#7 ← mulf_init::sqr#4 +Coalesced (already) [570] mulf_init::x_2#6 ← mulf_init::x_2#3 Coalesced down to 49 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @7 @@ -6324,6 +6281,7 @@ Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return Culled Empty Block (label) main::@19 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@25 +Culled Empty Block (label) main::@27 Culled Empty Block (label) main::@26 Culled Empty Block (label) show_letter::@15 Culled Empty Block (label) show_letter::@14 @@ -6579,7 +6537,7 @@ main::@10: scope:[main] from main::@2 [129] call show_letter to:main::@3 main::@3: scope:[main] from main::@10 main::@3 main::@5 - [130] (byte) main::w#4 ← phi( main::@10/(byte) 0 main::@5/(byte) main::w#1 ) + [130] (byte) main::w#4 ← phi( main::@10/(byte) 0 main::@3/(byte) main::w#4 main::@5/(byte) main::w#1 ) [131] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 @@ -7288,7 +7246,7 @@ VARIABLE REGISTER WEIGHTS (byte) main::vicSelectGfxBank1_toDd001_return (byte) main::w (byte) main::w#1 151.5 -(byte) main::w#4 67.33333333333333 +(byte) main::w#4 734.6666666666666 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte) memset::c#3 12.625 @@ -8684,12 +8642,10 @@ main: { lda #0 sta w jmp b3 - // [130] phi from main::@3 to main::@3 [phi:main::@3->main::@3] + // [130] phi from main::@3 main::@5 to main::@3 [phi:main::@3/main::@5->main::@3] b3_from_b3: - jmp b3 - // [130] phi from main::@5 to main::@3 [phi:main::@5->main::@3] b3_from_b5: - // [130] phi (byte) main::w#4 = (byte) main::w#1 [phi:main::@5->main::@3#0] -- register_copy + // [130] phi (byte) main::w#4 = (byte) main::w#4 [phi:main::@3/main::@5->main::@3#0] -- register_copy jmp b3 // main::@3 b3: @@ -12029,9 +11985,9 @@ Uplift Scope [bitmap_plot] 4,514.5: zp ZP_WORD:27 [ bitmap_plot::x#4 bitmap_plot Uplift Scope [bitmap_plot_spline_8seg] 1,901.9: zp ZP_BYTE:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] 1,505.5: zp ZP_WORD:9 [ bitmap_plot_spline_8seg::current_x#2 bitmap_plot_spline_8seg::current_x#0 bitmap_plot_spline_8seg::current_x#1 ] 1,501.5: zp ZP_BYTE:144 [ bitmap_plot_spline_8seg::$9 ] 1,172.83: zp ZP_WORD:11 [ bitmap_plot_spline_8seg::current_y#2 bitmap_plot_spline_8seg::current_y#0 bitmap_plot_spline_8seg::current_y#1 ] 500.5: zp ZP_BYTE:143 [ bitmap_plot_spline_8seg::$8 ] Uplift Scope [show_letter] 207.05: zp ZP_WORD:7 [ show_letter::current_y#4 show_letter::current_y#11 ] 202: zp ZP_BYTE:84 [ show_letter::$32 ] 202: zp ZP_BYTE:106 [ show_letter::$34 ] 202: zp ZP_BYTE:128 [ show_letter::$36 ] 202: zp ZP_BYTE:129 [ show_letter::$22 ] 151.5: zp ZP_BYTE:85 [ show_letter::$20 ] 151.5: zp ZP_BYTE:107 [ show_letter::$21 ] 151.5: zp ZP_BYTE:130 [ show_letter::segment_type#0 ] 106.32: zp ZP_WORD:5 [ show_letter::current_x#4 show_letter::current_x#11 ] 101: zp ZP_WORD:86 [ show_letter::to_x#0 ] 101: zp ZP_WORD:88 [ show_letter::to_y#0 ] 101: zp ZP_WORD:90 [ show_letter::to_x#1 ] 101: zp ZP_WORD:92 [ show_letter::to_y#1 ] 101: zp ZP_WORD:98 [ show_letter::to_x#2 ] 101: zp ZP_WORD:100 [ show_letter::to_y#2 ] 101: zp ZP_WORD:108 [ show_letter::via_x#0 ] 101: zp ZP_WORD:110 [ show_letter::via_y#0 ] 101: zp ZP_WORD:112 [ show_letter::via_x#1 ] 101: zp ZP_WORD:114 [ show_letter::via_y#1 ] 101: zp ZP_WORD:120 [ show_letter::via_x#2 ] 101: zp ZP_WORD:122 [ show_letter::via_y#2 ] 91.29: zp ZP_BYTE:4 [ show_letter::i#10 show_letter::i#1 ] 22.44: zp ZP_WORD:124 [ show_letter::segment_via_x#0 ] 22.44: zp ZP_WORD:126 [ show_letter::segment_via_y#0 ] 7.77: zp ZP_WORD:102 [ show_letter::current_x#10 ] 7.77: zp ZP_WORD:104 [ show_letter::current_y#10 ] 3.67: zp ZP_BYTE:83 [ show_letter::angle#0 ] Uplift Scope [rotate] 416.62: zp ZP_BYTE:44 [ rotate::angle#2 rotate::angle#0 rotate::angle#1 ] 213.44: zp ZP_WORD:47 [ rotate::vector_y#2 rotate::vector_y#0 rotate::vector_y#1 ] 142.59: zp ZP_WORD:45 [ rotate::vector_x#2 rotate::vector_x#0 rotate::vector_x#1 ] 101: zp ZP_WORD:94 [ rotate::return_x#0 ] 101: zp ZP_WORD:96 [ rotate::return_y#0 ] 101: zp ZP_WORD:116 [ rotate::return_x#1 ] 101: zp ZP_WORD:118 [ rotate::return_y#1 ] 34: zp ZP_WORD:274 [ rotate::return_x#2 ] 34: zp ZP_WORD:277 [ rotate::return_y#2 ] 4: zp ZP_WORD:227 [ rotate::$2 ] 4: zp ZP_WORD:239 [ rotate::$5 ] 4: zp ZP_WORD:253 [ rotate::$9 ] 4: zp ZP_WORD:255 [ rotate::$10 ] 4: zp ZP_WORD:267 [ rotate::$12 ] 4: zp ZP_WORD:269 [ rotate::$13 ] 2: zp ZP_DWORD:223 [ rotate::$1 ] 2: zp ZP_DWORD:235 [ rotate::$4 ] 2: zp ZP_DWORD:249 [ rotate::$8 ] 2: zp ZP_DWORD:263 [ rotate::$11 ] 2: zp ZP_BYTE:273 [ rotate::$15 ] 2: zp ZP_BYTE:276 [ rotate::$18 ] 1.33: zp ZP_WORD:271 [ rotate::yr#1 ] 0.75: zp ZP_WORD:217 [ rotate::cos_a#0 ] 0.67: zp ZP_WORD:243 [ rotate::sin_a#0 ] 0.44: zp ZP_WORD:257 [ rotate::xr#1 ] 0.25: zp ZP_WORD:229 [ rotate::xr#0 ] 0.24: zp ZP_WORD:241 [ rotate::yr#0 ] +Uplift Scope [main] 886.17: zp ZP_BYTE:3 [ main::w#4 main::w#1 ] 25.3: zp ZP_BYTE:2 [ main::angle#2 main::angle#1 ] Uplift Scope [memset] 308: zp ZP_WORD:62 [ memset::dst#2 memset::dst#3 memset::dst#1 ] 17.17: zp ZP_WORD:303 [ memset::end#0 ] 12.62: zp ZP_BYTE:61 [ memset::c#3 ] 2: zp ZP_WORD:57 [ memset::num#2 ] 0: zp ZP_WORD:59 [ memset::str#3 ] Uplift Scope [mulf_init] 45.1: zp ZP_WORD:75 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 24.36: zp ZP_BYTE:69 [ mulf_init::c#2 mulf_init::c#1 ] 24.14: zp ZP_BYTE:74 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp ZP_BYTE:309 [ mulf_init::$7 ] 22: zp ZP_BYTE:310 [ mulf_init::$10 ] 22: zp ZP_BYTE:311 [ mulf_init::$11 ] 20.62: zp ZP_WORD:78 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 19.04: zp ZP_WORD:70 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 16.5: zp ZP_BYTE:77 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 14.14: zp ZP_WORD:80 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 12.05: zp ZP_BYTE:82 [ mulf_init::dir#2 mulf_init::dir#3 ] 8.5: zp ZP_WORD:72 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Uplift Scope [main] 218.83: zp ZP_BYTE:3 [ main::w#4 main::w#1 ] 25.3: zp ZP_BYTE:2 [ main::angle#2 main::angle#1 ] Uplift Scope [bitmap_init] 39.88: zp ZP_WORD:67 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:64 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp ZP_BYTE:65 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:66 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:306 [ bitmap_init::$4 ] 22: zp ZP_BYTE:307 [ bitmap_init::$5 ] 22: zp ZP_BYTE:308 [ bitmap_init::$6 ] 5.5: zp ZP_BYTE:305 [ bitmap_init::$7 ] Uplift Scope [mulf16s] 16.91: zp ZP_WORD:51 [ mulf16s::b#4 mulf16s::b#0 mulf16s::b#1 mulf16s::b#2 mulf16s::b#3 ] 16.5: zp ZP_DWORD:53 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] 8.77: zp ZP_WORD:49 [ mulf16s::a#4 mulf16s::a#0 mulf16s::a#1 mulf16s::a#2 mulf16s::a#3 ] 4: zp ZP_DWORD:219 [ mulf16s::return#2 ] 4: zp ZP_DWORD:231 [ mulf16s::return#3 ] 4: zp ZP_DWORD:245 [ mulf16s::return#4 ] 4: zp ZP_DWORD:259 [ mulf16s::return#10 ] 4: zp ZP_WORD:287 [ mulf16s::$9 ] 4: zp ZP_WORD:289 [ mulf16s::$16 ] 4: zp ZP_WORD:291 [ mulf16s::$13 ] 4: zp ZP_WORD:293 [ mulf16s::$17 ] 1.67: zp ZP_DWORD:295 [ mulf16s::return#0 ] Uplift Scope [abs_u16] 16.5: zp ZP_WORD:33 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] 4: zp ZP_WORD:145 [ abs_u16::return#0 ] 4: zp ZP_WORD:149 [ abs_u16::return#1 ] 4: zp ZP_BYTE:170 [ abs_u16::$0 ] 4: zp ZP_BYTE:171 [ abs_u16::$1 ] @@ -12045,56 +12001,56 @@ Uplift Scope [Segment] Uplift Scope [Segment::SegmentType] Uplift Scope [] -Uplifting [bitmap_line] best 853271 combination zp ZP_WORD:20 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#0 bitmap_line::y1#1 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] zp ZP_WORD:22 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#0 bitmap_line::x1#1 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] zp ZP_WORD:18 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp ZP_WORD:24 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp ZP_WORD:16 [ bitmap_line::y2#11 bitmap_line::y2#13 bitmap_line::y2#0 ] zp ZP_WORD:14 [ bitmap_line::x2#10 bitmap_line::x2#13 bitmap_line::x2#0 ] zp ZP_WORD:151 [ bitmap_line::dy#0 ] zp ZP_WORD:159 [ bitmap_line::sy#0 ] zp ZP_WORD:147 [ bitmap_line::dx#0 ] zp ZP_WORD:155 [ bitmap_line::sx#0 ] -Uplifting [spline_8segB] best 836271 combination zp ZP_WORD:200 [ spline_8segB::$22 ] zp ZP_WORD:204 [ spline_8segB::$24 ] reg byte y [ spline_8segB::n#2 spline_8segB::n#1 ] reg byte x [ spline_8segB::$31 ] zp ZP_WORD:42 [ spline_8segB::i_y#2 spline_8segB::i_y#0 spline_8segB::i_y#1 ] zp ZP_WORD:40 [ spline_8segB::i_x#2 spline_8segB::i_x#0 spline_8segB::i_x#1 ] zp ZP_WORD:35 [ spline_8segB::p_x#2 spline_8segB::p_x#0 spline_8segB::p_x#1 ] zp ZP_WORD:206 [ spline_8segB::$25 ] zp ZP_WORD:37 [ spline_8segB::p_y#2 spline_8segB::p_y#0 spline_8segB::p_y#1 ] zp ZP_WORD:202 [ spline_8segB::$23 ] zp ZP_WORD:198 [ spline_8segB::j_y#0 ] zp ZP_WORD:196 [ spline_8segB::j_x#0 ] zp ZP_WORD:139 [ spline_8segB::p2_x#0 ] zp ZP_WORD:141 [ spline_8segB::p2_y#0 ] zp ZP_WORD:135 [ spline_8segB::p1_x#0 ] zp ZP_WORD:137 [ spline_8segB::p1_y#0 ] zp ZP_WORD:131 [ spline_8segB::p0_x#0 ] zp ZP_WORD:133 [ spline_8segB::p0_y#0 ] zp ZP_WORD:172 [ spline_8segB::$0 ] zp ZP_WORD:174 [ spline_8segB::$1 ] zp ZP_WORD:178 [ spline_8segB::$3 ] zp ZP_WORD:180 [ spline_8segB::$4 ] zp ZP_WORD:184 [ spline_8segB::$6 ] zp ZP_WORD:188 [ spline_8segB::$8 ] zp ZP_WORD:192 [ spline_8segB::$10 ] zp ZP_WORD:194 [ spline_8segB::$12 ] zp ZP_WORD:209 [ spline_8segB::$18 ] zp ZP_WORD:213 [ spline_8segB::$20 ] zp ZP_WORD:215 [ spline_8segB::$21 ] zp ZP_WORD:186 [ spline_8segB::b_x#0 ] zp ZP_WORD:190 [ spline_8segB::b_y#0 ] zp ZP_WORD:211 [ spline_8segB::$19 ] zp ZP_WORD:182 [ spline_8segB::a_y#0 ] zp ZP_WORD:176 [ spline_8segB::a_x#0 ] -Uplifting [bitmap_plot] best 834262 combination zp ZP_WORD:27 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:163 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:165 [ bitmap_plot::plotter#1 ] zp ZP_WORD:161 [ bitmap_plot::plotter#0 ] -Uplifting [bitmap_plot_spline_8seg] best 820262 combination zp ZP_BYTE:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] zp ZP_WORD:9 [ bitmap_plot_spline_8seg::current_x#2 bitmap_plot_spline_8seg::current_x#0 bitmap_plot_spline_8seg::current_x#1 ] reg byte x [ bitmap_plot_spline_8seg::$9 ] zp ZP_WORD:11 [ bitmap_plot_spline_8seg::current_y#2 bitmap_plot_spline_8seg::current_y#0 bitmap_plot_spline_8seg::current_y#1 ] reg byte x [ bitmap_plot_spline_8seg::$8 ] -Uplifting [show_letter] best 818062 combination zp ZP_WORD:7 [ show_letter::current_y#4 show_letter::current_y#11 ] reg byte a [ show_letter::$32 ] reg byte a [ show_letter::$34 ] reg byte a [ show_letter::$36 ] reg byte a [ show_letter::$22 ] zp ZP_BYTE:85 [ show_letter::$20 ] zp ZP_BYTE:107 [ show_letter::$21 ] zp ZP_BYTE:130 [ show_letter::segment_type#0 ] zp ZP_WORD:5 [ show_letter::current_x#4 show_letter::current_x#11 ] zp ZP_WORD:86 [ show_letter::to_x#0 ] zp ZP_WORD:88 [ show_letter::to_y#0 ] zp ZP_WORD:90 [ show_letter::to_x#1 ] zp ZP_WORD:92 [ show_letter::to_y#1 ] zp ZP_WORD:98 [ show_letter::to_x#2 ] zp ZP_WORD:100 [ show_letter::to_y#2 ] zp ZP_WORD:108 [ show_letter::via_x#0 ] zp ZP_WORD:110 [ show_letter::via_y#0 ] zp ZP_WORD:112 [ show_letter::via_x#1 ] zp ZP_WORD:114 [ show_letter::via_y#1 ] zp ZP_WORD:120 [ show_letter::via_x#2 ] zp ZP_WORD:122 [ show_letter::via_y#2 ] zp ZP_BYTE:4 [ show_letter::i#10 show_letter::i#1 ] zp ZP_WORD:124 [ show_letter::segment_via_x#0 ] zp ZP_WORD:126 [ show_letter::segment_via_y#0 ] zp ZP_WORD:102 [ show_letter::current_x#10 ] zp ZP_WORD:104 [ show_letter::current_y#10 ] zp ZP_BYTE:83 [ show_letter::angle#0 ] +Uplifting [bitmap_line] best 850271 combination zp ZP_WORD:20 [ bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y#0 bitmap_line::y1#1 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ] zp ZP_WORD:22 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#0 bitmap_line::x1#1 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] zp ZP_WORD:18 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ] zp ZP_WORD:24 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ] zp ZP_WORD:16 [ bitmap_line::y2#11 bitmap_line::y2#13 bitmap_line::y2#0 ] zp ZP_WORD:14 [ bitmap_line::x2#10 bitmap_line::x2#13 bitmap_line::x2#0 ] zp ZP_WORD:151 [ bitmap_line::dy#0 ] zp ZP_WORD:159 [ bitmap_line::sy#0 ] zp ZP_WORD:147 [ bitmap_line::dx#0 ] zp ZP_WORD:155 [ bitmap_line::sx#0 ] +Uplifting [spline_8segB] best 833271 combination zp ZP_WORD:200 [ spline_8segB::$22 ] zp ZP_WORD:204 [ spline_8segB::$24 ] reg byte y [ spline_8segB::n#2 spline_8segB::n#1 ] reg byte x [ spline_8segB::$31 ] zp ZP_WORD:42 [ spline_8segB::i_y#2 spline_8segB::i_y#0 spline_8segB::i_y#1 ] zp ZP_WORD:40 [ spline_8segB::i_x#2 spline_8segB::i_x#0 spline_8segB::i_x#1 ] zp ZP_WORD:35 [ spline_8segB::p_x#2 spline_8segB::p_x#0 spline_8segB::p_x#1 ] zp ZP_WORD:206 [ spline_8segB::$25 ] zp ZP_WORD:37 [ spline_8segB::p_y#2 spline_8segB::p_y#0 spline_8segB::p_y#1 ] zp ZP_WORD:202 [ spline_8segB::$23 ] zp ZP_WORD:198 [ spline_8segB::j_y#0 ] zp ZP_WORD:196 [ spline_8segB::j_x#0 ] zp ZP_WORD:139 [ spline_8segB::p2_x#0 ] zp ZP_WORD:141 [ spline_8segB::p2_y#0 ] zp ZP_WORD:135 [ spline_8segB::p1_x#0 ] zp ZP_WORD:137 [ spline_8segB::p1_y#0 ] zp ZP_WORD:131 [ spline_8segB::p0_x#0 ] zp ZP_WORD:133 [ spline_8segB::p0_y#0 ] zp ZP_WORD:172 [ spline_8segB::$0 ] zp ZP_WORD:174 [ spline_8segB::$1 ] zp ZP_WORD:178 [ spline_8segB::$3 ] zp ZP_WORD:180 [ spline_8segB::$4 ] zp ZP_WORD:184 [ spline_8segB::$6 ] zp ZP_WORD:188 [ spline_8segB::$8 ] zp ZP_WORD:192 [ spline_8segB::$10 ] zp ZP_WORD:194 [ spline_8segB::$12 ] zp ZP_WORD:209 [ spline_8segB::$18 ] zp ZP_WORD:213 [ spline_8segB::$20 ] zp ZP_WORD:215 [ spline_8segB::$21 ] zp ZP_WORD:186 [ spline_8segB::b_x#0 ] zp ZP_WORD:190 [ spline_8segB::b_y#0 ] zp ZP_WORD:211 [ spline_8segB::$19 ] zp ZP_WORD:182 [ spline_8segB::a_y#0 ] zp ZP_WORD:176 [ spline_8segB::a_x#0 ] +Uplifting [bitmap_plot] best 831262 combination zp ZP_WORD:27 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp ZP_WORD:163 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:165 [ bitmap_plot::plotter#1 ] zp ZP_WORD:161 [ bitmap_plot::plotter#0 ] +Uplifting [bitmap_plot_spline_8seg] best 817262 combination zp ZP_BYTE:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] zp ZP_WORD:9 [ bitmap_plot_spline_8seg::current_x#2 bitmap_plot_spline_8seg::current_x#0 bitmap_plot_spline_8seg::current_x#1 ] reg byte x [ bitmap_plot_spline_8seg::$9 ] zp ZP_WORD:11 [ bitmap_plot_spline_8seg::current_y#2 bitmap_plot_spline_8seg::current_y#0 bitmap_plot_spline_8seg::current_y#1 ] reg byte x [ bitmap_plot_spline_8seg::$8 ] +Uplifting [show_letter] best 815062 combination zp ZP_WORD:7 [ show_letter::current_y#4 show_letter::current_y#11 ] reg byte a [ show_letter::$32 ] reg byte a [ show_letter::$34 ] reg byte a [ show_letter::$36 ] reg byte a [ show_letter::$22 ] zp ZP_BYTE:85 [ show_letter::$20 ] zp ZP_BYTE:107 [ show_letter::$21 ] zp ZP_BYTE:130 [ show_letter::segment_type#0 ] zp ZP_WORD:5 [ show_letter::current_x#4 show_letter::current_x#11 ] zp ZP_WORD:86 [ show_letter::to_x#0 ] zp ZP_WORD:88 [ show_letter::to_y#0 ] zp ZP_WORD:90 [ show_letter::to_x#1 ] zp ZP_WORD:92 [ show_letter::to_y#1 ] zp ZP_WORD:98 [ show_letter::to_x#2 ] zp ZP_WORD:100 [ show_letter::to_y#2 ] zp ZP_WORD:108 [ show_letter::via_x#0 ] zp ZP_WORD:110 [ show_letter::via_y#0 ] zp ZP_WORD:112 [ show_letter::via_x#1 ] zp ZP_WORD:114 [ show_letter::via_y#1 ] zp ZP_WORD:120 [ show_letter::via_x#2 ] zp ZP_WORD:122 [ show_letter::via_y#2 ] zp ZP_BYTE:4 [ show_letter::i#10 show_letter::i#1 ] zp ZP_WORD:124 [ show_letter::segment_via_x#0 ] zp ZP_WORD:126 [ show_letter::segment_via_y#0 ] zp ZP_WORD:102 [ show_letter::current_x#10 ] zp ZP_WORD:104 [ show_letter::current_y#10 ] zp ZP_BYTE:83 [ show_letter::angle#0 ] Limited combination testing to 100 combinations of 9216 possible. -Uplifting [rotate] best 817444 combination reg byte y [ rotate::angle#2 rotate::angle#0 rotate::angle#1 ] zp ZP_WORD:47 [ rotate::vector_y#2 rotate::vector_y#0 rotate::vector_y#1 ] zp ZP_WORD:45 [ rotate::vector_x#2 rotate::vector_x#0 rotate::vector_x#1 ] zp ZP_WORD:94 [ rotate::return_x#0 ] zp ZP_WORD:96 [ rotate::return_y#0 ] zp ZP_WORD:116 [ rotate::return_x#1 ] zp ZP_WORD:118 [ rotate::return_y#1 ] zp ZP_WORD:274 [ rotate::return_x#2 ] zp ZP_WORD:277 [ rotate::return_y#2 ] zp ZP_WORD:227 [ rotate::$2 ] zp ZP_WORD:239 [ rotate::$5 ] zp ZP_WORD:253 [ rotate::$9 ] zp ZP_WORD:255 [ rotate::$10 ] zp ZP_WORD:267 [ rotate::$12 ] zp ZP_WORD:269 [ rotate::$13 ] zp ZP_DWORD:223 [ rotate::$1 ] zp ZP_DWORD:235 [ rotate::$4 ] zp ZP_DWORD:249 [ rotate::$8 ] zp ZP_DWORD:263 [ rotate::$11 ] reg byte a [ rotate::$15 ] reg byte a [ rotate::$18 ] zp ZP_WORD:271 [ rotate::yr#1 ] zp ZP_WORD:217 [ rotate::cos_a#0 ] zp ZP_WORD:243 [ rotate::sin_a#0 ] zp ZP_WORD:257 [ rotate::xr#1 ] zp ZP_WORD:229 [ rotate::xr#0 ] zp ZP_WORD:241 [ rotate::yr#0 ] -Uplifting [memset] best 817338 combination zp ZP_WORD:62 [ memset::dst#2 memset::dst#3 memset::dst#1 ] zp ZP_WORD:303 [ memset::end#0 ] reg byte x [ memset::c#3 ] zp ZP_WORD:57 [ memset::num#2 ] zp ZP_WORD:59 [ memset::str#3 ] -Uplifting [mulf_init] best 817088 combination zp ZP_WORD:75 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] reg byte x [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_BYTE:74 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$7 ] reg byte a [ mulf_init::$10 ] reg byte a [ mulf_init::$11 ] zp ZP_WORD:78 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:70 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] zp ZP_BYTE:77 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_WORD:80 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_BYTE:82 [ mulf_init::dir#2 mulf_init::dir#3 ] zp ZP_WORD:72 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplifting [rotate] best 814444 combination reg byte y [ rotate::angle#2 rotate::angle#0 rotate::angle#1 ] zp ZP_WORD:47 [ rotate::vector_y#2 rotate::vector_y#0 rotate::vector_y#1 ] zp ZP_WORD:45 [ rotate::vector_x#2 rotate::vector_x#0 rotate::vector_x#1 ] zp ZP_WORD:94 [ rotate::return_x#0 ] zp ZP_WORD:96 [ rotate::return_y#0 ] zp ZP_WORD:116 [ rotate::return_x#1 ] zp ZP_WORD:118 [ rotate::return_y#1 ] zp ZP_WORD:274 [ rotate::return_x#2 ] zp ZP_WORD:277 [ rotate::return_y#2 ] zp ZP_WORD:227 [ rotate::$2 ] zp ZP_WORD:239 [ rotate::$5 ] zp ZP_WORD:253 [ rotate::$9 ] zp ZP_WORD:255 [ rotate::$10 ] zp ZP_WORD:267 [ rotate::$12 ] zp ZP_WORD:269 [ rotate::$13 ] zp ZP_DWORD:223 [ rotate::$1 ] zp ZP_DWORD:235 [ rotate::$4 ] zp ZP_DWORD:249 [ rotate::$8 ] zp ZP_DWORD:263 [ rotate::$11 ] reg byte a [ rotate::$15 ] reg byte a [ rotate::$18 ] zp ZP_WORD:271 [ rotate::yr#1 ] zp ZP_WORD:217 [ rotate::cos_a#0 ] zp ZP_WORD:243 [ rotate::sin_a#0 ] zp ZP_WORD:257 [ rotate::xr#1 ] zp ZP_WORD:229 [ rotate::xr#0 ] zp ZP_WORD:241 [ rotate::yr#0 ] +Uplifting [main] best 810844 combination reg byte x [ main::w#4 main::w#1 ] zp ZP_BYTE:2 [ main::angle#2 main::angle#1 ] +Uplifting [memset] best 810738 combination zp ZP_WORD:62 [ memset::dst#2 memset::dst#3 memset::dst#1 ] zp ZP_WORD:303 [ memset::end#0 ] reg byte x [ memset::c#3 ] zp ZP_WORD:57 [ memset::num#2 ] zp ZP_WORD:59 [ memset::str#3 ] +Uplifting [mulf_init] best 810488 combination zp ZP_WORD:75 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] reg byte x [ mulf_init::c#2 mulf_init::c#1 ] zp ZP_BYTE:74 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$7 ] reg byte a [ mulf_init::$10 ] reg byte a [ mulf_init::$11 ] zp ZP_WORD:78 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp ZP_WORD:70 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] zp ZP_BYTE:77 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp ZP_WORD:80 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_BYTE:82 [ mulf_init::dir#2 mulf_init::dir#3 ] zp ZP_WORD:72 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [main] best 813488 combination reg byte x [ main::w#4 main::w#1 ] zp ZP_BYTE:2 [ main::angle#2 main::angle#1 ] -Uplifting [bitmap_init] best 812978 combination zp ZP_WORD:67 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:307 [ bitmap_init::$5 ] zp ZP_BYTE:308 [ bitmap_init::$6 ] zp ZP_BYTE:305 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 809978 combination zp ZP_WORD:67 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:307 [ bitmap_init::$5 ] zp ZP_BYTE:308 [ bitmap_init::$6 ] zp ZP_BYTE:305 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [mulf16s] best 812978 combination zp ZP_WORD:51 [ mulf16s::b#4 mulf16s::b#0 mulf16s::b#1 mulf16s::b#2 mulf16s::b#3 ] zp ZP_DWORD:53 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp ZP_WORD:49 [ mulf16s::a#4 mulf16s::a#0 mulf16s::a#1 mulf16s::a#2 mulf16s::a#3 ] zp ZP_DWORD:219 [ mulf16s::return#2 ] zp ZP_DWORD:231 [ mulf16s::return#3 ] zp ZP_DWORD:245 [ mulf16s::return#4 ] zp ZP_DWORD:259 [ mulf16s::return#10 ] zp ZP_WORD:287 [ mulf16s::$9 ] zp ZP_WORD:289 [ mulf16s::$16 ] zp ZP_WORD:291 [ mulf16s::$13 ] zp ZP_WORD:293 [ mulf16s::$17 ] zp ZP_DWORD:295 [ mulf16s::return#0 ] -Uplifting [abs_u16] best 812966 combination zp ZP_WORD:33 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] zp ZP_WORD:145 [ abs_u16::return#0 ] zp ZP_WORD:149 [ abs_u16::return#1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] -Uplifting [sgn_u16] best 812954 combination zp ZP_WORD:29 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] zp ZP_WORD:153 [ sgn_u16::return#0 ] zp ZP_WORD:157 [ sgn_u16::return#1 ] reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp ZP_WORD:31 [ sgn_u16::return#4 ] -Uplifting [mulf16u] best 812954 combination zp ZP_DWORD:283 [ mulf16u::return#2 ] zp ZP_WORD:279 [ mulf16u::a#0 ] zp ZP_WORD:281 [ mulf16u::b#0 ] zp ZP_DWORD:299 [ mulf16u::return#0 ] -Uplifting [SplineVector16] best 812954 combination -Uplifting [SplineVector32] best 812954 combination -Uplifting [bitmap_clear] best 812954 combination -Uplifting [RADIX] best 812954 combination -Uplifting [Segment] best 812954 combination -Uplifting [Segment::SegmentType] best 812954 combination -Uplifting [] best 812954 combination +Uplifting [mulf16s] best 809978 combination zp ZP_WORD:51 [ mulf16s::b#4 mulf16s::b#0 mulf16s::b#1 mulf16s::b#2 mulf16s::b#3 ] zp ZP_DWORD:53 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp ZP_WORD:49 [ mulf16s::a#4 mulf16s::a#0 mulf16s::a#1 mulf16s::a#2 mulf16s::a#3 ] zp ZP_DWORD:219 [ mulf16s::return#2 ] zp ZP_DWORD:231 [ mulf16s::return#3 ] zp ZP_DWORD:245 [ mulf16s::return#4 ] zp ZP_DWORD:259 [ mulf16s::return#10 ] zp ZP_WORD:287 [ mulf16s::$9 ] zp ZP_WORD:289 [ mulf16s::$16 ] zp ZP_WORD:291 [ mulf16s::$13 ] zp ZP_WORD:293 [ mulf16s::$17 ] zp ZP_DWORD:295 [ mulf16s::return#0 ] +Uplifting [abs_u16] best 809966 combination zp ZP_WORD:33 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 ] zp ZP_WORD:145 [ abs_u16::return#0 ] zp ZP_WORD:149 [ abs_u16::return#1 ] reg byte a [ abs_u16::$0 ] reg byte a [ abs_u16::$1 ] +Uplifting [sgn_u16] best 809954 combination zp ZP_WORD:29 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ] zp ZP_WORD:153 [ sgn_u16::return#0 ] zp ZP_WORD:157 [ sgn_u16::return#1 ] reg byte a [ sgn_u16::$0 ] reg byte a [ sgn_u16::$1 ] zp ZP_WORD:31 [ sgn_u16::return#4 ] +Uplifting [mulf16u] best 809954 combination zp ZP_DWORD:283 [ mulf16u::return#2 ] zp ZP_WORD:279 [ mulf16u::a#0 ] zp ZP_WORD:281 [ mulf16u::b#0 ] zp ZP_DWORD:299 [ mulf16u::return#0 ] +Uplifting [SplineVector16] best 809954 combination +Uplifting [SplineVector32] best 809954 combination +Uplifting [bitmap_clear] best 809954 combination +Uplifting [RADIX] best 809954 combination +Uplifting [Segment] best 809954 combination +Uplifting [Segment::SegmentType] best 809954 combination +Uplifting [] best 809954 combination Attempting to uplift remaining variables inzp ZP_BYTE:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] -Uplifting [bitmap_plot_spline_8seg] best 812954 combination zp ZP_BYTE:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] +Uplifting [bitmap_plot_spline_8seg] best 809954 combination zp ZP_BYTE:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:85 [ show_letter::$20 ] -Uplifting [show_letter] best 812254 combination reg byte x [ show_letter::$20 ] +Uplifting [show_letter] best 809254 combination reg byte x [ show_letter::$20 ] Attempting to uplift remaining variables inzp ZP_BYTE:107 [ show_letter::$21 ] -Uplifting [show_letter] best 811554 combination reg byte x [ show_letter::$21 ] +Uplifting [show_letter] best 808554 combination reg byte x [ show_letter::$21 ] Attempting to uplift remaining variables inzp ZP_BYTE:130 [ show_letter::segment_type#0 ] -Uplifting [show_letter] best 810654 combination reg byte a [ show_letter::segment_type#0 ] +Uplifting [show_letter] best 807654 combination reg byte a [ show_letter::segment_type#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ show_letter::i#10 show_letter::i#1 ] -Uplifting [show_letter] best 810654 combination zp ZP_BYTE:4 [ show_letter::i#10 show_letter::i#1 ] +Uplifting [show_letter] best 807654 combination zp ZP_BYTE:4 [ show_letter::i#10 show_letter::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::angle#2 main::angle#1 ] -Uplifting [main] best 810654 combination zp ZP_BYTE:2 [ main::angle#2 main::angle#1 ] +Uplifting [main] best 807654 combination zp ZP_BYTE:2 [ main::angle#2 main::angle#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Uplifting [mulf_init] best 810654 combination zp ZP_BYTE:74 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Uplifting [mulf_init] best 807654 combination zp ZP_BYTE:74 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:307 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 810594 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 807594 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp ZP_BYTE:308 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 810534 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 807534 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Uplifting [mulf_init] best 810394 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 807394 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:82 [ mulf_init::dir#2 mulf_init::dir#3 ] -Uplifting [mulf_init] best 810394 combination zp ZP_BYTE:82 [ mulf_init::dir#2 mulf_init::dir#3 ] +Uplifting [mulf_init] best 807394 combination zp ZP_BYTE:82 [ mulf_init::dir#2 mulf_init::dir#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:305 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 810394 combination zp ZP_BYTE:305 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 807394 combination zp ZP_BYTE:305 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:83 [ show_letter::angle#0 ] -Uplifting [show_letter] best 810394 combination zp ZP_BYTE:83 [ show_letter::angle#0 ] +Uplifting [show_letter] best 807394 combination zp ZP_BYTE:83 [ show_letter::angle#0 ] Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#0 bitmap_line::x1#1 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 ] ] with [ zp ZP_WORD:27 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] ] - score: 4 Coalescing zero page register with common assignment [ zp ZP_WORD:49 [ mulf16s::a#4 mulf16s::a#0 mulf16s::a#1 mulf16s::a#2 mulf16s::a#3 ] ] with [ zp ZP_WORD:217 [ rotate::cos_a#0 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:49 [ mulf16s::a#4 mulf16s::a#0 mulf16s::a#1 mulf16s::a#2 mulf16s::a#3 rotate::cos_a#0 ] ] with [ zp ZP_WORD:243 [ rotate::sin_a#0 ] ] - score: 2 @@ -12863,12 +12819,10 @@ main: { // [130] phi (byte) main::w#4 = (byte) 0 [phi:main::@10->main::@3#0] -- vbuxx=vbuc1 ldx #0 jmp b3 - // [130] phi from main::@3 to main::@3 [phi:main::@3->main::@3] + // [130] phi from main::@3 main::@5 to main::@3 [phi:main::@3/main::@5->main::@3] b3_from_b3: - jmp b3 - // [130] phi from main::@5 to main::@3 [phi:main::@5->main::@3] b3_from_b5: - // [130] phi (byte) main::w#4 = (byte) main::w#1 [phi:main::@5->main::@3#0] -- register_copy + // [130] phi (byte) main::w#4 = (byte) main::w#4 [phi:main::@3/main::@5->main::@3#0] -- register_copy jmp b3 // main::@3 b3: @@ -15028,6 +14982,7 @@ Replacing instruction ldx #0 with TAX Removing instruction ldy #0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b3_from_b3 with b3 Replacing label b3_from_b5 with b3 Replacing label b1 with b2 Replacing label b1_from_b2 with b1 @@ -15071,6 +15026,7 @@ Removing instruction b1: Removing instruction b2_from_b1: Removing instruction bitmap_clear_from_b2: Removing instruction show_letter_from_b10: +Removing instruction b3_from_b3: Removing instruction b3_from_b5: Removing instruction b8_from_b2: Removing instruction b1_from_b2: @@ -15195,13 +15151,11 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Skipping double jump to b3 in bne b3_from_b3 Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Replacing jump to rts with rts in jmp breturn Skipping double jump to breturn in jmp breturn_from_b1 Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b3_from_b3 to b1 Relabelling long label breturn_from_b1 to b2 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b3 @@ -15216,16 +15170,12 @@ Removing instruction jmp b4 Removing instruction jmp b5 Succesful ASM optimization Pass5NextJumpElimination Replacing instruction ldy #0 with TAY -Removing instruction b1: -Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bbegin: Removing instruction breturn: Removing instruction breturn: Removing instruction b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp b3 -Succesful ASM optimization Pass5NextJumpElimination Fixing long branch [1161] bne b1 to beq Fixing long branch [699] beq b4 to bne @@ -15494,7 +15444,7 @@ FINAL SYMBOL TABLE (const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3^>(word)(const byte*) BITMAP_SCREEN#0/(byte) $40 (byte) main::w (byte) main::w#1 reg byte x 151.5 -(byte) main::w#4 reg byte x 67.33333333333333 +(byte) main::w#4 reg byte x 734.6666666666666 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -16509,9 +16459,8 @@ main: { // [130] phi from main::@10 to main::@3 [phi:main::@10->main::@3] // [130] phi (byte) main::w#4 = (byte) 0 [phi:main::@10->main::@3#0] -- vbuxx=vbuc1 ldx #0 - // [130] phi from main::@3 to main::@3 [phi:main::@3->main::@3] - // [130] phi from main::@5 to main::@3 [phi:main::@5->main::@3] - // [130] phi (byte) main::w#4 = (byte) main::w#1 [phi:main::@5->main::@3#0] -- register_copy + // [130] phi from main::@3 main::@5 to main::@3 [phi:main::@3/main::@5->main::@3] + // [130] phi (byte) main::w#4 = (byte) main::w#4 [phi:main::@3/main::@5->main::@3#0] -- register_copy // main::@3 b3: // while(*RASTER!=0xfe) diff --git a/src/test/ref/complex/splines/truetype-splines.sym b/src/test/ref/complex/splines/truetype-splines.sym index f7a65ae23..f858c445c 100644 --- a/src/test/ref/complex/splines/truetype-splines.sym +++ b/src/test/ref/complex/splines/truetype-splines.sym @@ -262,7 +262,7 @@ (const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte) 3^>(word)(const byte*) BITMAP_SCREEN#0/(byte) $40 (byte) main::w (byte) main::w#1 reg byte x 151.5 -(byte) main::w#4 reg byte x 67.33333333333333 +(byte) main::w#4 reg byte x 734.6666666666666 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 24981b442..07c3a8eea 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -1312,16 +1312,6 @@ Alias candidate removed (volatile)(byte) irq_sprite_ypos#0 = (byte~) $4 (byte) i Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte~) $6 (byte) irq_sprite_ptr#17 (byte) irq_sprite_ptr#14 Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte~) sprites_irq::$0 Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte~) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#2 (byte) sprites_irq::toSpritePtr2_return#1 (byte) sprites_irq::toSpritePtr2_return#3 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1 -Self Phi Eliminated (byte) sprites_irq::raster_sprite_gfx_modify#1 -Self Phi Eliminated (byte) irq_sprite_ptr#10 -Self Phi Eliminated (byte) render_screen_showing#1 -Self Phi Eliminated (byte) irq_cnt#10 -Self Phi Eliminated (byte) irq_raster_next#11 -Self Phi Eliminated (byte) irq_sprite_ypos#10 -Self Phi Eliminated (byte) sin_idx#12 -Self Phi Eliminated (byte) sin_idx#13 -Self Phi Eliminated (byte) sin_idx#14 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) irq_sprite_ypos#22 (byte) irq_sprite_ypos#0 Identical Phi Values (byte) irq_raster_next#23 (byte) irq_raster_next#0 Identical Phi Values (byte) irq_sprite_ypos#19 (byte) irq_sprite_ypos#22 diff --git a/src/test/ref/complex/tetris/tetris.cfg b/src/test/ref/complex/tetris/tetris.cfg index 83fdf40e2..11d8e9801 100644 --- a/src/test/ref/complex/tetris/tetris.cfg +++ b/src/test/ref/complex/tetris/tetris.cfg @@ -117,8 +117,8 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [40] (byte) current_piece_char#10 ← phi( main::@6/(byte) current_piece_char#16 main::@17/(byte) current_piece_char#5 main::@25/(byte) current_piece_char#16 ) [40] (byte*) current_piece#10 ← phi( main::@6/(byte*) current_piece#15 main::@17/(byte*~) current_piece#102 main::@25/(byte*) current_piece#15 ) [40] (byte) current_movedown_slow#14 ← phi( main::@6/(byte) current_movedown_slow#21 main::@17/(byte) current_movedown_slow#1 main::@25/(byte) current_movedown_slow#21 ) - [40] (byte) render_screen_render#18 ← phi( main::@17/(byte) $20 main::@25/(byte) render_screen_render#11 ) - [40] (byte) render_screen_show#16 ← phi( main::@17/(byte) 0 main::@25/(byte) render_screen_show#13 ) + [40] (byte) render_screen_render#18 ← phi( main::@6/(byte) render_screen_render#18 main::@17/(byte) $20 main::@25/(byte) render_screen_render#11 ) + [40] (byte) render_screen_show#16 ← phi( main::@6/(byte) render_screen_show#16 main::@17/(byte) 0 main::@25/(byte) render_screen_show#13 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [41] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index 165886471..36bdc846b 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -9246,98 +9246,6 @@ Alias candidate removed (volatile)(byte) irq_sprite_ypos#0 = (byte~) $5 (byte) i Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte~) $7 (byte) irq_sprite_ptr#18 (byte) irq_sprite_ptr#17 (byte) irq_sprite_ptr#14 Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte~) sprites_irq::$0 Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte~) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#2 (byte) sprites_irq::toSpritePtr2_return#1 (byte) sprites_irq::toSpritePtr2_return#3 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1 -Self Phi Eliminated (byte) keyboard_event_scan::row_scan#1 -Self Phi Eliminated (byte) keyboard_event_scan::row#10 -Self Phi Eliminated (byte*) render_screen_original::oscr#3 -Self Phi Eliminated (byte*) render_screen_original::ocols#3 -Self Phi Eliminated (byte) render_screen_original::y#5 -Self Phi Eliminated (byte) render_screen_original::y#4 -Self Phi Eliminated (byte) render_screen_original::y#2 -Self Phi Eliminated (byte*) render_screen_original::oscr#5 -Self Phi Eliminated (byte*) render_screen_original::ocols#5 -Self Phi Eliminated (byte) render_playfield::l#3 -Self Phi Eliminated (byte) render_screen_render#23 -Self Phi Eliminated (byte*) current_piece_gfx#15 -Self Phi Eliminated (byte) current_piece_char#12 -Self Phi Eliminated (byte*) render_moving::screen_line#1 -Self Phi Eliminated (byte) render_moving::ypos#5 -Self Phi Eliminated (byte) render_moving::l#3 -Self Phi Eliminated (byte) render_screen_render#41 -Self Phi Eliminated (byte) current_xpos#78 -Self Phi Eliminated (byte) render_next::next_piece_char#1 -Self Phi Eliminated (byte) render_next::l#2 -Self Phi Eliminated (byte) sprites_irq::raster_sprite_gfx_modify#1 -Self Phi Eliminated (byte) irq_sprite_ptr#10 -Self Phi Eliminated (byte) render_screen_showing#11 -Self Phi Eliminated (byte) irq_cnt#10 -Self Phi Eliminated (byte) irq_raster_next#11 -Self Phi Eliminated (byte) irq_sprite_ypos#10 -Self Phi Eliminated (byte) level#13 -Self Phi Eliminated (byte) current_movedown_slow#16 -Self Phi Eliminated (byte*) play_collision::piece_gfx#1 -Self Phi Eliminated (byte) play_collision::yp#3 -Self Phi Eliminated (byte) play_collision::l#2 -Self Phi Eliminated (byte) play_collision::xpos#10 -Self Phi Eliminated (byte*) play_collision::playfield_line#1 -Self Phi Eliminated (byte*) current_piece_gfx#22 -Self Phi Eliminated (byte) current_piece_char#17 -Self Phi Eliminated (byte*) play_lock_current::playfield_line#1 -Self Phi Eliminated (byte) play_lock_current::yp#3 -Self Phi Eliminated (byte) play_lock_current::l#2 -Self Phi Eliminated (byte) current_xpos#53 -Self Phi Eliminated (byte*) current_piece#18 -Self Phi Eliminated (byte) current_piece_char#18 -Self Phi Eliminated (byte) current_orientation#26 -Self Phi Eliminated (byte*) current_piece_gfx#100 -Self Phi Eliminated (byte) current_xpos#10 -Self Phi Eliminated (byte) current_ypos#24 -Self Phi Eliminated (byte) game_over#16 -Self Phi Eliminated (byte) play_remove_lines::y#2 -Self Phi Eliminated (byte) play_remove_lines::removed#10 -Self Phi Eliminated (byte) play_remove_lines::removed#3 -Self Phi Eliminated (byte) level#22 -Self Phi Eliminated (byte) current_movedown_slow#11 -Self Phi Eliminated (byte) level_bcd#22 -Self Phi Eliminated (byte) render_screen_show#18 -Self Phi Eliminated (byte) render_screen_showing#12 -Self Phi Eliminated (byte) keyboard_events_size#26 -Self Phi Eliminated (byte) keyboard_modifiers#22 -Self Phi Eliminated (byte) game_over#19 -Self Phi Eliminated (byte) current_movedown_counter#24 -Self Phi Eliminated (byte) current_ypos#47 -Self Phi Eliminated (word) lines_bcd#30 -Self Phi Eliminated (dword) score_bcd#30 -Self Phi Eliminated (byte) level#39 -Self Phi Eliminated (byte) current_movedown_slow#44 -Self Phi Eliminated (byte) level_bcd#39 -Self Phi Eliminated (byte*) current_piece#37 -Self Phi Eliminated (byte) current_piece_char#34 -Self Phi Eliminated (byte) current_orientation#47 -Self Phi Eliminated (byte*) current_piece_gfx#102 -Self Phi Eliminated (byte) current_xpos#103 -Self Phi Eliminated (byte) next_piece_idx#33 -Self Phi Eliminated (byte) render_screen_render#46 -Self Phi Eliminated (byte) main::render#3 -Self Phi Eliminated (byte) render_screen_show#37 -Self Phi Eliminated (byte) render_screen_render#45 -Self Phi Eliminated (byte) current_movedown_slow#70 -Self Phi Eliminated (byte*) current_piece#67 -Self Phi Eliminated (byte) current_piece_char#66 -Self Phi Eliminated (byte) current_orientation#74 -Self Phi Eliminated (byte*) current_piece_gfx#79 -Self Phi Eliminated (byte) current_xpos#104 -Self Phi Eliminated (byte) current_ypos#75 -Self Phi Eliminated (byte) game_over#57 -Self Phi Eliminated (byte) next_piece_idx#56 -Self Phi Eliminated (byte) render_screen_showing#23 -Self Phi Eliminated (byte) keyboard_events_size#43 -Self Phi Eliminated (byte) keyboard_modifiers#36 -Self Phi Eliminated (byte) current_movedown_counter#40 -Self Phi Eliminated (word) lines_bcd#54 -Self Phi Eliminated (dword) score_bcd#54 -Self Phi Eliminated (byte) level#68 -Self Phi Eliminated (byte) level_bcd#65 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 Identical Phi Values (byte) keyboard_events_size#53 (byte) keyboard_events_size#26 Identical Phi Values (byte) keyboard_event_scan::row_scan#1 (byte) keyboard_event_scan::row_scan#0 @@ -9630,18 +9538,30 @@ Identical Phi Values (byte) level#11 (byte) level#10 Identical Phi Values (byte) level_bcd#12 (byte) level_bcd#11 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte) keyboard_event_scan::row#4 (byte) keyboard_event_scan::row#2 +Identical Phi Values (byte) render_screen_render#13 (byte) render_screen_render#22 Identical Phi Values (byte) render_moving::ypos#4 (byte) render_moving::ypos#2 Identical Phi Values (byte) render_moving::l#2 (byte) render_moving::l#4 Identical Phi Values (byte) render_screen_render#34 (byte) render_screen_render#14 Identical Phi Values (byte) current_xpos#60 (byte) current_xpos#16 Identical Phi Values (byte*) current_piece_gfx#65 (byte*) current_piece_gfx#29 Identical Phi Values (byte) current_piece_char#69 (byte) current_piece_char#37 +Identical Phi Values (byte) render_next::next_piece_char#3 (byte) render_next::next_piece_char#0 +Identical Phi Values (byte) play_collision::xp#0 (byte) play_collision::xpos#6 +Identical Phi Values (byte*) play_collision::piece_gfx#2 (byte*) play_collision::piece_gfx#0 +Identical Phi Values (byte) current_xpos#29 (byte) current_xpos#14 +Identical Phi Values (byte*) current_piece_gfx#39 (byte*) current_piece_gfx#13 +Identical Phi Values (byte) current_piece_char#43 (byte) current_piece_char#10 Identical Phi Values (byte) render_screen_show#21 (byte) render_screen_show#16 Identical Phi Values (byte) render_screen_render#20 (byte) render_screen_render#18 Identical Phi Values (byte) render_screen_showing#16 (byte) render_screen_showing#2 Identical Phi Values (byte) keyboard_events_size#32 (byte) keyboard_events_size#16 Identical Phi Values (byte) keyboard_modifiers#28 (byte) keyboard_modifiers#14 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) render_screen_render#14 (byte) render_screen_render#33 +Identical Phi Values (byte) current_xpos#16 (byte) current_xpos#59 +Identical Phi Values (byte*) current_piece_gfx#29 (byte*) current_piece_gfx#64 +Identical Phi Values (byte) current_piece_char#37 (byte) current_piece_char#68 +Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [279] (byte~) render_init::$13 ← (byte) render_init::i#2 * (const byte) SIZEOF_POINTER Identified duplicate assignment right side [1112] (byte~) play_remove_lines::$2 ← (byte) PLAYFIELD_LINES#0 * (byte) PLAYFIELD_COLS#0 Successful SSA optimization Pass2DuplicateRValueIdentification @@ -9695,14 +9615,14 @@ Simple Condition (bool~) play_move_leftright::$6 [925] if((byte~) play_move_left Simple Condition (bool~) play_move_rotate::$0 [941] if((byte) play_move_rotate::key_event#0==(byte) KEY_Z#0) goto play_move_rotate::@1 Simple Condition (bool~) play_move_rotate::$1 [948] if((byte) play_move_rotate::key_event#0==(byte) KEY_X#0) goto play_move_rotate::@2 Simple Condition (bool~) play_move_rotate::$4 [970] if((byte~) play_move_rotate::$2!=(byte) COLLISION_NONE#0) goto play_move_rotate::@5 -Simple Condition (bool~) play_collision::$2 [999] if(*((byte*) play_collision::piece_gfx#2 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 +Simple Condition (bool~) play_collision::$2 [999] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 Simple Condition (bool~) play_collision::$12 [1004] if((byte) play_collision::c#1!=rangelast(0,3)) goto play_collision::@2 Simple Condition (bool~) play_collision::$4 [1008] if((byte) play_collision::yp#2<(byte) PLAYFIELD_LINES#0) goto play_collision::@4 Simple Condition (bool~) play_collision::$7 [1013] if((byte~) play_collision::$5==(byte) 0) goto play_collision::@5 Simple Condition (bool~) play_collision::$9 [1021] if((byte) play_collision::xp#2<(byte) PLAYFIELD_COLS#0) goto play_collision::@6 Simple Condition (bool~) play_collision::$11 [1026] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 Simple Condition (bool~) play_collision::$13 [1033] if((byte) play_collision::l#1!=rangelast(0,3)) goto play_collision::@1 -Simple Condition (bool~) play_lock_current::$1 [1048] if(*((byte*) current_piece_gfx#39 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 +Simple Condition (bool~) play_lock_current::$1 [1048] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 Simple Condition (bool~) play_lock_current::$2 [1053] if((byte) play_lock_current::c#1!=rangelast(0,3)) goto play_lock_current::@2 Simple Condition (bool~) play_lock_current::$3 [1060] if((byte) play_lock_current::l#1!=rangelast(0,3)) goto play_lock_current::@1 Simple Condition (bool~) play_spawn_current::$3 [1081] if((byte~) play_spawn_current::$1!=(byte) COLLISION_PLAYFIELD#0) goto play_spawn_current::@1 @@ -10149,31 +10069,6 @@ Alias candidate removed (volatile)(byte) irq_sprite_ypos#0 = (byte~) $5 Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte~) $7 Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte~) sprites_irq::$0 Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte~) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#1 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1 -Self Phi Eliminated (byte) render_screen_render#13 -Self Phi Eliminated (byte) render_screen_render#14 -Self Phi Eliminated (byte) current_xpos#16 -Self Phi Eliminated (byte*) current_piece_gfx#29 -Self Phi Eliminated (byte) current_piece_char#37 -Self Phi Eliminated (byte) render_next::next_piece_char#3 -Self Phi Eliminated (byte) play_collision::xp#0 -Self Phi Eliminated (byte*) play_collision::piece_gfx#2 -Self Phi Eliminated (byte) current_xpos#29 -Self Phi Eliminated (byte*) current_piece_gfx#39 -Self Phi Eliminated (byte) current_piece_char#43 -Self Phi Eliminated (byte) render_screen_show#16 -Self Phi Eliminated (byte) render_screen_render#18 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) render_screen_render#13 (byte) render_screen_render#22 -Identical Phi Values (byte) render_screen_render#14 (byte) render_screen_render#33 -Identical Phi Values (byte) current_xpos#16 (byte) current_xpos#59 -Identical Phi Values (byte*) current_piece_gfx#29 (byte*) current_piece_gfx#64 -Identical Phi Values (byte) current_piece_char#37 (byte) current_piece_char#68 -Identical Phi Values (byte) render_next::next_piece_char#3 (byte) render_next::next_piece_char#0 -Identical Phi Values (byte) play_collision::xp#0 (byte) play_collision::xpos#6 -Identical Phi Values (byte*) play_collision::piece_gfx#2 (byte*) play_collision::piece_gfx#0 -Identical Phi Values (byte) current_xpos#29 (byte) current_xpos#14 -Identical Phi Values (byte*) current_piece_gfx#39 (byte*) current_piece_gfx#13 -Identical Phi Values (byte) current_piece_char#43 (byte) current_piece_char#10 Identical Phi Values (byte) current_movedown_slow#55 (byte) current_movedown_slow#21 Identical Phi Values (byte*) current_piece#50 (byte*) current_piece#15 Identical Phi Values (byte) current_piece_char#47 (byte) current_piece_char#16 @@ -10803,15 +10698,15 @@ Adding NOP phi() at start of sprites_irq::toSpritePtr2_@return CALL GRAPH Calls in [] to main:19 Calls in [main] to sid_rnd_init:23 render_init:25 sprites_init:27 sprites_irq_init:29 play_init:31 play_spawn_current:33 play_spawn_current:36 render_playfield:38 render_moving:43 render_next:45 render_show:59 keyboard_event_scan:61 keyboard_event_get:63 play_movement:70 render_playfield:75 render_moving:81 render_next:84 render_score:86 render_screen_swap:88 -Calls in [render_score] to render_bcd:133 render_bcd:138 render_bcd:143 render_bcd:148 render_bcd:153 render_bcd:158 -Calls in [play_movement] to play_move_down:262 play_move_leftright:273 play_move_rotate:278 -Calls in [play_move_rotate] to play_collision:303 -Calls in [play_move_leftright] to play_collision:360 play_collision:376 -Calls in [play_move_down] to keyboard_event_pressed:386 play_collision:406 play_lock_current:411 play_remove_lines:413 play_update_score:417 play_spawn_current:420 -Calls in [play_spawn_current] to play_collision:491 -Calls in [play_update_score] to play_increase_level:519 -Calls in [keyboard_event_scan] to keyboard_matrix_read:642 keyboard_event_pressed:653 keyboard_event_pressed:659 keyboard_event_pressed:665 keyboard_event_pressed:671 -Calls in [render_init] to render_screen_original:784 render_screen_original:786 +Calls in [render_score] to render_bcd:135 render_bcd:140 render_bcd:145 render_bcd:150 render_bcd:155 render_bcd:160 +Calls in [play_movement] to play_move_down:264 play_move_leftright:275 play_move_rotate:280 +Calls in [play_move_rotate] to play_collision:305 +Calls in [play_move_leftright] to play_collision:362 play_collision:378 +Calls in [play_move_down] to keyboard_event_pressed:388 play_collision:408 play_lock_current:413 play_remove_lines:415 play_update_score:419 play_spawn_current:422 +Calls in [play_spawn_current] to play_collision:493 +Calls in [play_update_score] to play_increase_level:521 +Calls in [keyboard_event_scan] to keyboard_matrix_read:644 keyboard_event_pressed:655 keyboard_event_pressed:661 keyboard_event_pressed:667 keyboard_event_pressed:673 +Calls in [render_init] to render_screen_original:786 render_screen_original:788 Created 176 initial phi equivalence classes Coalesced [34] next_piece_idx#83 ← next_piece_idx#18 @@ -10836,8 +10731,8 @@ Not coalescing [79] current_piece_gfx#113 ← current_piece_gfx#18 Not coalescing [80] current_piece_char#101 ← current_piece_char#16 Not coalescing [82] render_screen_render#66 ← render_screen_render#18 Not coalescing [83] next_piece_idx#78 ← next_piece_idx#16 -Coalesced [89] render_screen_show#60 ← render_screen_show#13 -Coalesced [90] render_screen_render#67 ← render_screen_render#11 +Coalesced [89] render_screen_show#61 ← render_screen_show#13 +Coalesced [90] render_screen_render#68 ← render_screen_render#11 Coalesced [91] current_movedown_slow#98 ← current_movedown_slow#21 Coalesced [92] current_piece#103 ← current_piece#15 Coalesced [93] current_piece_char#108 ← current_piece_char#16 @@ -10854,283 +10749,285 @@ Coalesced [103] lines_bcd#96 ← lines_bcd#15 Coalesced [104] score_bcd#93 ← score_bcd#14 Coalesced [105] level#112 ← level#17 Coalesced [106] level_bcd#111 ← level_bcd#17 -Coalesced (already) [107] current_movedown_slow#96 ← current_movedown_slow#21 -Coalesced (already) [108] current_piece#101 ← current_piece#15 -Coalesced (already) [109] current_piece_char#106 ← current_piece_char#16 -Coalesced (already) [110] current_orientation#104 ← current_orientation#17 -Coalesced (already) [111] current_piece_gfx#123 ← current_piece_gfx#18 -Coalesced (already) [112] current_xpos#130 ← current_xpos#19 -Coalesced (already) [113] current_ypos#104 ← current_ypos#19 -Coalesced (already) [114] game_over#93 ← game_over#15 -Coalesced (already) [115] next_piece_idx#85 ← next_piece_idx#16 -Coalesced (already) [116] render_screen_showing#48 ← render_screen_showing#1 -Coalesced (already) [117] keyboard_events_size#92 ← keyboard_events_size#16 -Coalesced (already) [118] current_movedown_counter#60 ← current_movedown_counter#14 -Coalesced (already) [119] lines_bcd#95 ← lines_bcd#15 -Coalesced (already) [120] score_bcd#91 ← score_bcd#14 -Coalesced (already) [121] level#111 ← level#17 -Coalesced (already) [122] level_bcd#110 ← level_bcd#17 -Coalesced [131] render_bcd::screen#7 ← render_bcd::screen#0 -Coalesced [132] render_bcd::bcd#9 ← render_bcd::bcd#0 -Coalesced [136] render_bcd::screen#8 ← render_bcd::screen#1 -Coalesced [137] render_bcd::bcd#10 ← render_bcd::bcd#1 -Coalesced [141] render_bcd::screen#9 ← render_bcd::screen#2 -Coalesced [142] render_bcd::bcd#11 ← render_bcd::bcd#2 -Coalesced [146] render_bcd::screen#10 ← render_bcd::screen#3 -Coalesced [147] render_bcd::bcd#12 ← render_bcd::bcd#3 -Coalesced [151] render_bcd::screen#11 ← render_bcd::screen#4 -Coalesced [152] render_bcd::bcd#13 ← render_bcd::bcd#4 -Coalesced [156] render_bcd::screen#12 ← render_bcd::screen#5 -Coalesced [157] render_bcd::bcd#14 ← render_bcd::bcd#5 -Coalesced [169] render_bcd::screen_pos#6 ← render_bcd::screen_pos#2 -Coalesced [175] render_bcd::screen_pos#5 ← render_bcd::screen_pos#0 -Coalesced [183] render_next::screen_next_area#13 ← render_next::screen_next_area#11 -Coalesced [185] render_next::next_piece_gfx#10 ← render_next::next_piece_gfx#3 -Coalesced [186] render_next::screen_next_area#14 ← render_next::screen_next_area#10 -Coalesced [199] render_next::next_piece_gfx#8 ← render_next::next_piece_gfx#1 -Coalesced [200] render_next::screen_next_area#12 ← render_next::screen_next_area#4 -Coalesced [201] render_next::l#8 ← render_next::l#1 -Coalesced (already) [202] render_next::next_piece_gfx#11 ← render_next::next_piece_gfx#1 -Coalesced [203] render_next::screen_next_area#15 ← render_next::screen_next_area#3 -Coalesced [204] render_next::c#6 ← render_next::c#1 -Coalesced [209] render_moving::ypos#9 ← render_moving::ypos#0 -Coalesced [213] render_moving::i#12 ← render_moving::i#1 -Coalesced [219] render_moving::ypos#10 ← render_moving::ypos#1 -Coalesced [220] render_moving::i#10 ← render_moving::i#8 -Coalesced [221] render_moving::l#9 ← render_moving::l#1 -Coalesced [226] render_moving::i#13 ← render_moving::i#3 -Coalesced [227] render_moving::xpos#5 ← render_moving::xpos#0 -Coalesced [236] render_moving::i#11 ← render_moving::i#2 -Coalesced (already) [237] render_moving::i#14 ← render_moving::i#2 -Coalesced [238] render_moving::xpos#6 ← render_moving::xpos#1 -Coalesced [239] render_moving::c#5 ← render_moving::c#1 -Coalesced [245] render_playfield::i#6 ← render_playfield::i#3 -Coalesced [246] render_playfield::screen_line#3 ← render_playfield::screen_line#0 -Coalesced [256] render_playfield::l#5 ← render_playfield::l#1 -Coalesced [257] render_playfield::i#5 ← render_playfield::i#1 -Coalesced (already) [258] render_playfield::i#7 ← render_playfield::i#1 -Coalesced [259] render_playfield::screen_line#4 ← render_playfield::screen_line#1 -Coalesced [260] render_playfield::c#3 ← render_playfield::c#1 -Coalesced [266] play_movement::return#6 ← play_movement::render#1 -Coalesced [267] current_orientation#96 ← current_orientation#20 -Coalesced [268] current_piece_gfx#114 ← current_piece_gfx#20 -Coalesced [269] current_xpos#121 ← current_xpos#22 -Coalesced [282] play_movement::return#7 ← play_movement::return#0 -Coalesced [283] current_orientation#97 ← current_orientation#25 -Coalesced [284] current_piece_gfx#115 ← current_piece_gfx#21 -Coalesced [285] current_xpos#122 ← current_xpos#26 -Coalesced (already) [288] current_orientation#103 ← current_orientation#20 -Coalesced (already) [289] current_piece_gfx#122 ← current_piece_gfx#20 -Coalesced [294] play_move_rotate::orientation#7 ← play_move_rotate::orientation#2 -Not coalescing [299] current_piece#99 ← current_piece#15 -Coalesced [300] play_collision::orientation#9 ← play_collision::orientation#3 -Coalesced [301] play_collision::yp#13 ← play_collision::ypos#3 -Coalesced [302] play_collision::xpos#17 ← play_collision::xpos#3 -Coalesced [309] current_orientation#101 ← current_orientation#7 -Coalesced [310] current_piece_gfx#120 ← current_piece_gfx#7 -Coalesced (already) [311] current_orientation#102 ← current_orientation#20 -Coalesced (already) [312] current_piece_gfx#121 ← current_piece_gfx#20 -Coalesced [315] play_move_rotate::orientation#6 ← play_move_rotate::orientation#1 -Coalesced [318] play_collision::yp#15 ← play_collision::yp#0 -Coalesced [322] play_collision::i#11 ← play_collision::i#3 -Not coalescing [323] play_collision::xp#8 ← play_collision::xpos#6 -Coalesced [345] play_collision::yp#16 ← play_collision::yp#1 -Not coalescing [346] play_collision::i#10 ← play_collision::i#1 -Coalesced [347] play_collision::l#10 ← play_collision::l#1 -Not coalescing [348] play_collision::i#12 ← play_collision::i#1 -Coalesced [349] play_collision::xp#9 ← play_collision::xp#1 -Coalesced [350] play_collision::c#8 ← play_collision::c#1 -Not coalescing [356] current_piece#98 ← current_piece#15 -Coalesced [357] play_collision::orientation#8 ← play_collision::orientation#2 -Coalesced [358] play_collision::yp#12 ← play_collision::ypos#2 -Coalesced [359] play_collision::xpos#16 ← play_collision::xpos#2 -Coalesced [365] current_xpos#128 ← current_xpos#6 -Coalesced (already) [368] current_xpos#127 ← current_xpos#22 -Not coalescing [372] current_piece#97 ← current_piece#15 -Coalesced [373] play_collision::orientation#7 ← play_collision::orientation#1 -Coalesced [374] play_collision::yp#11 ← play_collision::ypos#1 -Coalesced [375] play_collision::xpos#15 ← play_collision::xpos#1 -Coalesced [381] current_xpos#129 ← current_xpos#8 -Coalesced [392] play_move_down::movedown#14 ← play_move_down::movedown#2 -Coalesced [396] play_move_down::movedown#16 ← play_move_down::movedown#3 -Not coalescing [402] current_piece#96 ← current_piece#10 -Coalesced [403] play_collision::orientation#6 ← play_collision::orientation#0 -Coalesced [404] play_collision::yp#10 ← play_collision::ypos#0 -Coalesced [405] play_collision::xpos#14 ← play_collision::xpos#0 -Coalesced (already) [418] next_piece_idx#84 ← next_piece_idx#10 -Coalesced (already) [419] game_over#91 ← game_over#10 -Coalesced [421] current_ypos#101 ← current_ypos#6 -Coalesced [422] lines_bcd#89 ← lines_bcd#17 -Coalesced [423] score_bcd#85 ← score_bcd#16 -Coalesced [424] level#105 ← level#19 -Coalesced [425] current_movedown_slow#89 ← current_movedown_slow#23 -Coalesced [426] level_bcd#102 ← level_bcd#19 -Coalesced [428] current_piece_char#103 ← current_piece_char#5 -Coalesced [430] current_xpos#124 ← current_xpos#100 -Coalesced [431] game_over#87 ← game_over#52 -Coalesced [432] next_piece_idx#80 ← next_piece_idx#18 -Coalesced (already) [434] current_ypos#102 ← current_ypos#38 -Coalesced [435] lines_bcd#90 ← lines_bcd#26 -Coalesced [436] score_bcd#86 ← score_bcd#26 -Coalesced [437] level#106 ← level#33 -Coalesced [438] current_movedown_slow#90 ← current_movedown_slow#37 -Coalesced [439] level_bcd#103 ← level_bcd#31 -Coalesced [440] current_piece#94 ← current_piece#28 -Coalesced (already) [441] current_piece_char#104 ← current_piece_char#29 -Coalesced [442] current_orientation#99 ← current_orientation#37 -Coalesced [443] current_piece_gfx#118 ← current_piece_gfx#35 -Coalesced (already) [444] current_xpos#125 ← current_xpos#43 -Coalesced (already) [445] game_over#88 ← game_over#27 -Coalesced (already) [446] next_piece_idx#81 ← next_piece_idx#30 -Coalesced [450] current_ypos#100 ← current_ypos#3 -Coalesced (already) [451] lines_bcd#88 ← lines_bcd#19 -Coalesced (already) [452] score_bcd#84 ← score_bcd#18 -Coalesced (already) [453] level#104 ← level#10 -Coalesced (already) [454] current_movedown_slow#88 ← current_movedown_slow#14 -Coalesced (already) [455] level_bcd#101 ← level_bcd#11 -Coalesced (already) [456] current_piece#92 ← current_piece#10 -Coalesced (already) [457] current_piece_char#102 ← current_piece_char#10 -Coalesced (already) [458] current_orientation#98 ← current_orientation#13 -Coalesced (already) [459] current_piece_gfx#116 ← current_piece_gfx#13 -Coalesced (already) [460] current_xpos#123 ← current_xpos#14 -Coalesced (already) [461] game_over#86 ← game_over#10 -Coalesced (already) [462] next_piece_idx#79 ← next_piece_idx#10 -Coalesced [463] current_movedown_counter#59 ← current_movedown_counter#12 -Coalesced (already) [464] current_ypos#103 ← current_ypos#11 -Coalesced (already) [465] lines_bcd#91 ← lines_bcd#19 -Coalesced (already) [466] score_bcd#87 ← score_bcd#18 -Coalesced (already) [467] level#107 ← level#10 -Coalesced (already) [468] current_movedown_slow#91 ← current_movedown_slow#14 -Coalesced (already) [469] level_bcd#104 ← level_bcd#11 -Coalesced (already) [470] current_piece#95 ← current_piece#10 -Coalesced (already) [471] current_piece_char#105 ← current_piece_char#10 -Coalesced (already) [472] current_orientation#100 ← current_orientation#13 -Coalesced (already) [473] current_piece_gfx#119 ← current_piece_gfx#13 -Coalesced (already) [474] current_xpos#126 ← current_xpos#14 -Coalesced (already) [475] game_over#89 ← game_over#10 -Coalesced (already) [476] next_piece_idx#82 ← next_piece_idx#10 -Coalesced [477] play_move_down::movedown#15 ← play_move_down::movedown#7 -Coalesced [478] play_move_down::movedown#13 ← play_move_down::movedown#10 -Coalesced (already) [479] play_move_down::movedown#12 ← play_move_down::movedown#10 -Coalesced [489] play_collision::yp#14 ← play_collision::ypos#4 -Coalesced [490] play_collision::xpos#18 ← play_collision::xpos#4 -Coalesced [499] next_piece_idx#18 ← play_spawn_current::piece_idx#2 -Coalesced [504] play_spawn_current::piece_idx#4 ← play_spawn_current::piece_idx#1 -Coalesced (already) [505] game_over#92 ← game_over#65 -Coalesced [520] lines_bcd#94 ← lines_bcd#29 -Coalesced [521] score_bcd#90 ← score_bcd#29 -Coalesced [522] level#110 ← level#21 -Coalesced [523] current_movedown_slow#94 ← current_movedown_slow#66 -Coalesced [524] level_bcd#107 ← level_bcd#62 -Coalesced (already) [527] lines_bcd#93 ← lines_bcd#29 -Coalesced (already) [528] score_bcd#89 ← score_bcd#29 -Coalesced (already) [529] level#109 ← level#10 -Coalesced (already) [530] current_movedown_slow#93 ← current_movedown_slow#14 -Coalesced (already) [531] level_bcd#106 ← level_bcd#11 -Coalesced (already) [532] lines_bcd#92 ← lines_bcd#19 -Coalesced (already) [533] score_bcd#88 ← score_bcd#18 -Coalesced (already) [534] level#108 ← level#10 -Coalesced (already) [535] current_movedown_slow#92 ← current_movedown_slow#14 -Coalesced (already) [536] level_bcd#105 ← level_bcd#11 -Coalesced [540] current_movedown_slow#95 ← current_movedown_slow#10 -Coalesced [546] level_bcd#109 ← level_bcd#8 -Coalesced [556] play_increase_level::b#3 ← play_increase_level::b#1 -Coalesced [557] level_bcd#108 ← level_bcd#21 -Coalesced [561] play_remove_lines::r#10 ← play_remove_lines::r#3 -Coalesced [562] play_remove_lines::w#14 ← play_remove_lines::w#12 -Coalesced [576] play_remove_lines::w#17 ← play_remove_lines::w#2 -Coalesced [577] play_remove_lines::removed#14 ← play_remove_lines::removed#1 -Coalesced [581] play_remove_lines::w#19 ← play_remove_lines::w#11 -Coalesced [588] play_remove_lines::w#18 ← play_remove_lines::w#3 -Coalesced [589] play_remove_lines::r#9 ← play_remove_lines::r#1 -Coalesced [590] play_remove_lines::w#13 ← play_remove_lines::w#11 -Coalesced [591] play_remove_lines::y#9 ← play_remove_lines::y#1 -Coalesced [592] play_remove_lines::removed#12 ← play_remove_lines::removed#8 -Coalesced [593] play_remove_lines::w#16 ← play_remove_lines::w#1 -Coalesced (already) [594] play_remove_lines::removed#13 ← play_remove_lines::removed#11 -Coalesced (already) [595] play_remove_lines::r#11 ← play_remove_lines::r#1 -Coalesced (already) [596] play_remove_lines::w#15 ← play_remove_lines::w#1 -Coalesced [597] play_remove_lines::x#5 ← play_remove_lines::x#1 -Coalesced [598] play_remove_lines::full#5 ← play_remove_lines::full#2 -Coalesced (already) [599] play_remove_lines::full#6 ← play_remove_lines::full#4 -Coalesced [601] play_lock_current::yp#7 ← play_lock_current::yp#0 -Coalesced [606] play_lock_current::i#8 ← play_lock_current::i#3 -Coalesced [607] play_lock_current::xp#5 ← play_lock_current::xp#0 -Coalesced [619] play_lock_current::yp#8 ← play_lock_current::yp#1 -Not coalescing [620] play_lock_current::i#7 ← play_lock_current::i#1 -Coalesced [621] play_lock_current::l#7 ← play_lock_current::l#1 -Not coalescing [622] play_lock_current::i#9 ← play_lock_current::i#1 -Coalesced [623] play_lock_current::xp#6 ← play_lock_current::xp#1 -Coalesced [624] play_lock_current::c#5 ← play_lock_current::c#1 -Coalesced [634] keyboard_event_get::return#6 ← keyboard_event_get::return#1 -Coalesced [635] keyboard_events_size#91 ← keyboard_events_size#4 -Coalesced [638] keyboard_events_size#90 ← keyboard_events_size#13 -Coalesced [639] keyboard_events_size#80 ← keyboard_events_size#19 -Coalesced [647] keyboard_event_scan::keycode#17 ← keyboard_event_scan::keycode#1 -Coalesced (already) [648] keyboard_events_size#83 ← keyboard_events_size#30 -Coalesced [677] keyboard_event_scan::row#14 ← keyboard_event_scan::row#1 -Coalesced [678] keyboard_event_scan::keycode#15 ← keyboard_event_scan::keycode#13 -Coalesced (already) [679] keyboard_events_size#81 ← keyboard_events_size#13 -Coalesced [680] keyboard_event_scan::keycode#19 ← keyboard_event_scan::keycode#11 -Coalesced [681] keyboard_events_size#85 ← keyboard_events_size#30 -Coalesced [691] keyboard_events_size#89 ← keyboard_events_size#2 -Coalesced [697] keyboard_event_scan::keycode#16 ← keyboard_event_scan::keycode#14 -Coalesced [698] keyboard_events_size#82 ← keyboard_events_size#29 -Coalesced [699] keyboard_event_scan::col#8 ← keyboard_event_scan::col#1 -Coalesced (already) [700] keyboard_event_scan::keycode#18 ← keyboard_event_scan::keycode#14 -Coalesced (already) [701] keyboard_events_size#84 ← keyboard_events_size#29 -Coalesced [705] keyboard_events_size#87 ← keyboard_events_size#1 -Coalesced (already) [706] keyboard_events_size#88 ← keyboard_events_size#10 -Coalesced (already) [707] keyboard_events_size#86 ← keyboard_events_size#10 -Not coalescing [720] render_screen_showing#1 ← render_screen_show#16 -Coalesced [743] play_init::b#3 ← play_init::b#1 -Coalesced [744] play_init::j#3 ← play_init::j#1 -Coalesced [745] play_init::pli#3 ← play_init::pli#1 -Coalesced [746] play_init::idx#3 ← play_init::idx#1 -Coalesced [771] sprites_init::s#3 ← sprites_init::s#1 -Coalesced [772] sprites_init::xpos#3 ← sprites_init::xpos#1 -Coalesced [798] render_init::i#3 ← render_init::i#1 -Coalesced [799] render_init::li_1#3 ← render_init::li_1#1 -Coalesced [800] render_init::li_2#3 ← render_init::li_2#1 -Coalesced [802] render_screen_original::screen#11 ← render_screen_original::screen#9 -Coalesced [804] render_screen_original::screen#13 ← render_screen_original::screen#8 -Coalesced [805] render_screen_original::cols#10 ← render_screen_original::cols#7 -Coalesced [813] render_screen_original::oscr#8 ← render_screen_original::oscr#4 -Coalesced [814] render_screen_original::screen#15 ← render_screen_original::screen#2 -Coalesced [815] render_screen_original::ocols#8 ← render_screen_original::ocols#4 -Coalesced [816] render_screen_original::cols#12 ← render_screen_original::cols#1 -Coalesced [817] render_screen_original::x#8 ← render_screen_original::x#1 -Coalesced [827] render_screen_original::screen#17 ← render_screen_original::screen#3 -Coalesced [828] render_screen_original::cols#14 ← render_screen_original::cols#2 -Coalesced [829] render_screen_original::x#10 ← render_screen_original::x#2 -Coalesced [840] render_screen_original::screen#12 ← render_screen_original::screen#10 -Coalesced [841] render_screen_original::cols#9 ← render_screen_original::cols#3 -Coalesced [842] render_screen_original::oscr#7 ← render_screen_original::oscr#1 -Coalesced [843] render_screen_original::ocols#7 ← render_screen_original::ocols#1 -Coalesced [844] render_screen_original::y#7 ← render_screen_original::y#1 -Coalesced [845] render_screen_original::screen#18 ← render_screen_original::screen#10 -Coalesced [846] render_screen_original::cols#15 ← render_screen_original::cols#3 -Coalesced [847] render_screen_original::x#11 ← render_screen_original::x#3 -Coalesced (already) [848] render_screen_original::oscr#9 ← render_screen_original::oscr#1 -Coalesced [849] render_screen_original::screen#16 ← render_screen_original::screen#3 -Coalesced (already) [850] render_screen_original::ocols#9 ← render_screen_original::ocols#1 -Coalesced [851] render_screen_original::cols#13 ← render_screen_original::cols#2 -Coalesced [852] render_screen_original::x#9 ← render_screen_original::x#2 -Coalesced (already) [853] render_screen_original::screen#14 ← render_screen_original::screen#2 -Coalesced (already) [854] render_screen_original::cols#11 ← render_screen_original::cols#1 -Coalesced [855] render_screen_original::x#7 ← render_screen_original::x#1 -Coalesced [882] irq_raster_next#27 ← irq_raster_next#3 -Coalesced [883] irq_cnt#23 ← irq_cnt#1 -Coalesced [884] irq_sprite_ypos#27 ← irq_sprite_ypos#3 -Coalesced [885] irq_sprite_ptr#21 ← irq_sprite_ptr#3 -Coalesced [894] irq_raster_next#26 ← irq_raster_next#2 -Coalesced [895] irq_cnt#22 ← irq_cnt#2 -Coalesced [896] irq_sprite_ypos#26 ← irq_sprite_ypos#2 -Coalesced [897] irq_sprite_ptr#20 ← irq_sprite_ptr#2 -Coalesced [903] irq_raster_next#25 ← irq_raster_next#1 -Coalesced (already) [904] irq_cnt#21 ← irq_cnt#1 -Coalesced [905] irq_sprite_ypos#25 ← irq_sprite_ypos#1 -Coalesced [906] irq_sprite_ptr#19 ← irq_sprite_ptr#1 +Coalesced (already) [107] render_screen_show#60 ← render_screen_show#16 +Coalesced (already) [108] render_screen_render#67 ← render_screen_render#18 +Coalesced (already) [109] current_movedown_slow#96 ← current_movedown_slow#21 +Coalesced (already) [110] current_piece#101 ← current_piece#15 +Coalesced (already) [111] current_piece_char#106 ← current_piece_char#16 +Coalesced (already) [112] current_orientation#104 ← current_orientation#17 +Coalesced (already) [113] current_piece_gfx#123 ← current_piece_gfx#18 +Coalesced (already) [114] current_xpos#130 ← current_xpos#19 +Coalesced (already) [115] current_ypos#104 ← current_ypos#19 +Coalesced (already) [116] game_over#93 ← game_over#15 +Coalesced (already) [117] next_piece_idx#85 ← next_piece_idx#16 +Coalesced (already) [118] render_screen_showing#48 ← render_screen_showing#1 +Coalesced (already) [119] keyboard_events_size#92 ← keyboard_events_size#16 +Coalesced (already) [120] current_movedown_counter#60 ← current_movedown_counter#14 +Coalesced (already) [121] lines_bcd#95 ← lines_bcd#15 +Coalesced (already) [122] score_bcd#91 ← score_bcd#14 +Coalesced (already) [123] level#111 ← level#17 +Coalesced (already) [124] level_bcd#110 ← level_bcd#17 +Coalesced [133] render_bcd::screen#7 ← render_bcd::screen#0 +Coalesced [134] render_bcd::bcd#9 ← render_bcd::bcd#0 +Coalesced [138] render_bcd::screen#8 ← render_bcd::screen#1 +Coalesced [139] render_bcd::bcd#10 ← render_bcd::bcd#1 +Coalesced [143] render_bcd::screen#9 ← render_bcd::screen#2 +Coalesced [144] render_bcd::bcd#11 ← render_bcd::bcd#2 +Coalesced [148] render_bcd::screen#10 ← render_bcd::screen#3 +Coalesced [149] render_bcd::bcd#12 ← render_bcd::bcd#3 +Coalesced [153] render_bcd::screen#11 ← render_bcd::screen#4 +Coalesced [154] render_bcd::bcd#13 ← render_bcd::bcd#4 +Coalesced [158] render_bcd::screen#12 ← render_bcd::screen#5 +Coalesced [159] render_bcd::bcd#14 ← render_bcd::bcd#5 +Coalesced [171] render_bcd::screen_pos#6 ← render_bcd::screen_pos#2 +Coalesced [177] render_bcd::screen_pos#5 ← render_bcd::screen_pos#0 +Coalesced [185] render_next::screen_next_area#13 ← render_next::screen_next_area#11 +Coalesced [187] render_next::next_piece_gfx#10 ← render_next::next_piece_gfx#3 +Coalesced [188] render_next::screen_next_area#14 ← render_next::screen_next_area#10 +Coalesced [201] render_next::next_piece_gfx#8 ← render_next::next_piece_gfx#1 +Coalesced [202] render_next::screen_next_area#12 ← render_next::screen_next_area#4 +Coalesced [203] render_next::l#8 ← render_next::l#1 +Coalesced (already) [204] render_next::next_piece_gfx#11 ← render_next::next_piece_gfx#1 +Coalesced [205] render_next::screen_next_area#15 ← render_next::screen_next_area#3 +Coalesced [206] render_next::c#6 ← render_next::c#1 +Coalesced [211] render_moving::ypos#9 ← render_moving::ypos#0 +Coalesced [215] render_moving::i#12 ← render_moving::i#1 +Coalesced [221] render_moving::ypos#10 ← render_moving::ypos#1 +Coalesced [222] render_moving::i#10 ← render_moving::i#8 +Coalesced [223] render_moving::l#9 ← render_moving::l#1 +Coalesced [228] render_moving::i#13 ← render_moving::i#3 +Coalesced [229] render_moving::xpos#5 ← render_moving::xpos#0 +Coalesced [238] render_moving::i#11 ← render_moving::i#2 +Coalesced (already) [239] render_moving::i#14 ← render_moving::i#2 +Coalesced [240] render_moving::xpos#6 ← render_moving::xpos#1 +Coalesced [241] render_moving::c#5 ← render_moving::c#1 +Coalesced [247] render_playfield::i#6 ← render_playfield::i#3 +Coalesced [248] render_playfield::screen_line#3 ← render_playfield::screen_line#0 +Coalesced [258] render_playfield::l#5 ← render_playfield::l#1 +Coalesced [259] render_playfield::i#5 ← render_playfield::i#1 +Coalesced (already) [260] render_playfield::i#7 ← render_playfield::i#1 +Coalesced [261] render_playfield::screen_line#4 ← render_playfield::screen_line#1 +Coalesced [262] render_playfield::c#3 ← render_playfield::c#1 +Coalesced [268] play_movement::return#6 ← play_movement::render#1 +Coalesced [269] current_orientation#96 ← current_orientation#20 +Coalesced [270] current_piece_gfx#114 ← current_piece_gfx#20 +Coalesced [271] current_xpos#121 ← current_xpos#22 +Coalesced [284] play_movement::return#7 ← play_movement::return#0 +Coalesced [285] current_orientation#97 ← current_orientation#25 +Coalesced [286] current_piece_gfx#115 ← current_piece_gfx#21 +Coalesced [287] current_xpos#122 ← current_xpos#26 +Coalesced (already) [290] current_orientation#103 ← current_orientation#20 +Coalesced (already) [291] current_piece_gfx#122 ← current_piece_gfx#20 +Coalesced [296] play_move_rotate::orientation#7 ← play_move_rotate::orientation#2 +Not coalescing [301] current_piece#99 ← current_piece#15 +Coalesced [302] play_collision::orientation#9 ← play_collision::orientation#3 +Coalesced [303] play_collision::yp#13 ← play_collision::ypos#3 +Coalesced [304] play_collision::xpos#17 ← play_collision::xpos#3 +Coalesced [311] current_orientation#101 ← current_orientation#7 +Coalesced [312] current_piece_gfx#120 ← current_piece_gfx#7 +Coalesced (already) [313] current_orientation#102 ← current_orientation#20 +Coalesced (already) [314] current_piece_gfx#121 ← current_piece_gfx#20 +Coalesced [317] play_move_rotate::orientation#6 ← play_move_rotate::orientation#1 +Coalesced [320] play_collision::yp#15 ← play_collision::yp#0 +Coalesced [324] play_collision::i#11 ← play_collision::i#3 +Not coalescing [325] play_collision::xp#8 ← play_collision::xpos#6 +Coalesced [347] play_collision::yp#16 ← play_collision::yp#1 +Not coalescing [348] play_collision::i#10 ← play_collision::i#1 +Coalesced [349] play_collision::l#10 ← play_collision::l#1 +Not coalescing [350] play_collision::i#12 ← play_collision::i#1 +Coalesced [351] play_collision::xp#9 ← play_collision::xp#1 +Coalesced [352] play_collision::c#8 ← play_collision::c#1 +Not coalescing [358] current_piece#98 ← current_piece#15 +Coalesced [359] play_collision::orientation#8 ← play_collision::orientation#2 +Coalesced [360] play_collision::yp#12 ← play_collision::ypos#2 +Coalesced [361] play_collision::xpos#16 ← play_collision::xpos#2 +Coalesced [367] current_xpos#128 ← current_xpos#6 +Coalesced (already) [370] current_xpos#127 ← current_xpos#22 +Not coalescing [374] current_piece#97 ← current_piece#15 +Coalesced [375] play_collision::orientation#7 ← play_collision::orientation#1 +Coalesced [376] play_collision::yp#11 ← play_collision::ypos#1 +Coalesced [377] play_collision::xpos#15 ← play_collision::xpos#1 +Coalesced [383] current_xpos#129 ← current_xpos#8 +Coalesced [394] play_move_down::movedown#14 ← play_move_down::movedown#2 +Coalesced [398] play_move_down::movedown#16 ← play_move_down::movedown#3 +Not coalescing [404] current_piece#96 ← current_piece#10 +Coalesced [405] play_collision::orientation#6 ← play_collision::orientation#0 +Coalesced [406] play_collision::yp#10 ← play_collision::ypos#0 +Coalesced [407] play_collision::xpos#14 ← play_collision::xpos#0 +Coalesced (already) [420] next_piece_idx#84 ← next_piece_idx#10 +Coalesced (already) [421] game_over#91 ← game_over#10 +Coalesced [423] current_ypos#101 ← current_ypos#6 +Coalesced [424] lines_bcd#89 ← lines_bcd#17 +Coalesced [425] score_bcd#85 ← score_bcd#16 +Coalesced [426] level#105 ← level#19 +Coalesced [427] current_movedown_slow#89 ← current_movedown_slow#23 +Coalesced [428] level_bcd#102 ← level_bcd#19 +Coalesced [430] current_piece_char#103 ← current_piece_char#5 +Coalesced [432] current_xpos#124 ← current_xpos#100 +Coalesced [433] game_over#87 ← game_over#52 +Coalesced [434] next_piece_idx#80 ← next_piece_idx#18 +Coalesced (already) [436] current_ypos#102 ← current_ypos#38 +Coalesced [437] lines_bcd#90 ← lines_bcd#26 +Coalesced [438] score_bcd#86 ← score_bcd#26 +Coalesced [439] level#106 ← level#33 +Coalesced [440] current_movedown_slow#90 ← current_movedown_slow#37 +Coalesced [441] level_bcd#103 ← level_bcd#31 +Coalesced [442] current_piece#94 ← current_piece#28 +Coalesced (already) [443] current_piece_char#104 ← current_piece_char#29 +Coalesced [444] current_orientation#99 ← current_orientation#37 +Coalesced [445] current_piece_gfx#118 ← current_piece_gfx#35 +Coalesced (already) [446] current_xpos#125 ← current_xpos#43 +Coalesced (already) [447] game_over#88 ← game_over#27 +Coalesced (already) [448] next_piece_idx#81 ← next_piece_idx#30 +Coalesced [452] current_ypos#100 ← current_ypos#3 +Coalesced (already) [453] lines_bcd#88 ← lines_bcd#19 +Coalesced (already) [454] score_bcd#84 ← score_bcd#18 +Coalesced (already) [455] level#104 ← level#10 +Coalesced (already) [456] current_movedown_slow#88 ← current_movedown_slow#14 +Coalesced (already) [457] level_bcd#101 ← level_bcd#11 +Coalesced (already) [458] current_piece#92 ← current_piece#10 +Coalesced (already) [459] current_piece_char#102 ← current_piece_char#10 +Coalesced (already) [460] current_orientation#98 ← current_orientation#13 +Coalesced (already) [461] current_piece_gfx#116 ← current_piece_gfx#13 +Coalesced (already) [462] current_xpos#123 ← current_xpos#14 +Coalesced (already) [463] game_over#86 ← game_over#10 +Coalesced (already) [464] next_piece_idx#79 ← next_piece_idx#10 +Coalesced [465] current_movedown_counter#59 ← current_movedown_counter#12 +Coalesced (already) [466] current_ypos#103 ← current_ypos#11 +Coalesced (already) [467] lines_bcd#91 ← lines_bcd#19 +Coalesced (already) [468] score_bcd#87 ← score_bcd#18 +Coalesced (already) [469] level#107 ← level#10 +Coalesced (already) [470] current_movedown_slow#91 ← current_movedown_slow#14 +Coalesced (already) [471] level_bcd#104 ← level_bcd#11 +Coalesced (already) [472] current_piece#95 ← current_piece#10 +Coalesced (already) [473] current_piece_char#105 ← current_piece_char#10 +Coalesced (already) [474] current_orientation#100 ← current_orientation#13 +Coalesced (already) [475] current_piece_gfx#119 ← current_piece_gfx#13 +Coalesced (already) [476] current_xpos#126 ← current_xpos#14 +Coalesced (already) [477] game_over#89 ← game_over#10 +Coalesced (already) [478] next_piece_idx#82 ← next_piece_idx#10 +Coalesced [479] play_move_down::movedown#15 ← play_move_down::movedown#7 +Coalesced [480] play_move_down::movedown#13 ← play_move_down::movedown#10 +Coalesced (already) [481] play_move_down::movedown#12 ← play_move_down::movedown#10 +Coalesced [491] play_collision::yp#14 ← play_collision::ypos#4 +Coalesced [492] play_collision::xpos#18 ← play_collision::xpos#4 +Coalesced [501] next_piece_idx#18 ← play_spawn_current::piece_idx#2 +Coalesced [506] play_spawn_current::piece_idx#4 ← play_spawn_current::piece_idx#1 +Coalesced (already) [507] game_over#92 ← game_over#65 +Coalesced [522] lines_bcd#94 ← lines_bcd#29 +Coalesced [523] score_bcd#90 ← score_bcd#29 +Coalesced [524] level#110 ← level#21 +Coalesced [525] current_movedown_slow#94 ← current_movedown_slow#66 +Coalesced [526] level_bcd#107 ← level_bcd#62 +Coalesced (already) [529] lines_bcd#93 ← lines_bcd#29 +Coalesced (already) [530] score_bcd#89 ← score_bcd#29 +Coalesced (already) [531] level#109 ← level#10 +Coalesced (already) [532] current_movedown_slow#93 ← current_movedown_slow#14 +Coalesced (already) [533] level_bcd#106 ← level_bcd#11 +Coalesced (already) [534] lines_bcd#92 ← lines_bcd#19 +Coalesced (already) [535] score_bcd#88 ← score_bcd#18 +Coalesced (already) [536] level#108 ← level#10 +Coalesced (already) [537] current_movedown_slow#92 ← current_movedown_slow#14 +Coalesced (already) [538] level_bcd#105 ← level_bcd#11 +Coalesced [542] current_movedown_slow#95 ← current_movedown_slow#10 +Coalesced [548] level_bcd#109 ← level_bcd#8 +Coalesced [558] play_increase_level::b#3 ← play_increase_level::b#1 +Coalesced [559] level_bcd#108 ← level_bcd#21 +Coalesced [563] play_remove_lines::r#10 ← play_remove_lines::r#3 +Coalesced [564] play_remove_lines::w#14 ← play_remove_lines::w#12 +Coalesced [578] play_remove_lines::w#17 ← play_remove_lines::w#2 +Coalesced [579] play_remove_lines::removed#14 ← play_remove_lines::removed#1 +Coalesced [583] play_remove_lines::w#19 ← play_remove_lines::w#11 +Coalesced [590] play_remove_lines::w#18 ← play_remove_lines::w#3 +Coalesced [591] play_remove_lines::r#9 ← play_remove_lines::r#1 +Coalesced [592] play_remove_lines::w#13 ← play_remove_lines::w#11 +Coalesced [593] play_remove_lines::y#9 ← play_remove_lines::y#1 +Coalesced [594] play_remove_lines::removed#12 ← play_remove_lines::removed#8 +Coalesced [595] play_remove_lines::w#16 ← play_remove_lines::w#1 +Coalesced (already) [596] play_remove_lines::removed#13 ← play_remove_lines::removed#11 +Coalesced (already) [597] play_remove_lines::r#11 ← play_remove_lines::r#1 +Coalesced (already) [598] play_remove_lines::w#15 ← play_remove_lines::w#1 +Coalesced [599] play_remove_lines::x#5 ← play_remove_lines::x#1 +Coalesced [600] play_remove_lines::full#5 ← play_remove_lines::full#2 +Coalesced (already) [601] play_remove_lines::full#6 ← play_remove_lines::full#4 +Coalesced [603] play_lock_current::yp#7 ← play_lock_current::yp#0 +Coalesced [608] play_lock_current::i#8 ← play_lock_current::i#3 +Coalesced [609] play_lock_current::xp#5 ← play_lock_current::xp#0 +Coalesced [621] play_lock_current::yp#8 ← play_lock_current::yp#1 +Not coalescing [622] play_lock_current::i#7 ← play_lock_current::i#1 +Coalesced [623] play_lock_current::l#7 ← play_lock_current::l#1 +Not coalescing [624] play_lock_current::i#9 ← play_lock_current::i#1 +Coalesced [625] play_lock_current::xp#6 ← play_lock_current::xp#1 +Coalesced [626] play_lock_current::c#5 ← play_lock_current::c#1 +Coalesced [636] keyboard_event_get::return#6 ← keyboard_event_get::return#1 +Coalesced [637] keyboard_events_size#91 ← keyboard_events_size#4 +Coalesced [640] keyboard_events_size#90 ← keyboard_events_size#13 +Coalesced [641] keyboard_events_size#80 ← keyboard_events_size#19 +Coalesced [649] keyboard_event_scan::keycode#17 ← keyboard_event_scan::keycode#1 +Coalesced (already) [650] keyboard_events_size#83 ← keyboard_events_size#30 +Coalesced [679] keyboard_event_scan::row#14 ← keyboard_event_scan::row#1 +Coalesced [680] keyboard_event_scan::keycode#15 ← keyboard_event_scan::keycode#13 +Coalesced (already) [681] keyboard_events_size#81 ← keyboard_events_size#13 +Coalesced [682] keyboard_event_scan::keycode#19 ← keyboard_event_scan::keycode#11 +Coalesced [683] keyboard_events_size#85 ← keyboard_events_size#30 +Coalesced [693] keyboard_events_size#89 ← keyboard_events_size#2 +Coalesced [699] keyboard_event_scan::keycode#16 ← keyboard_event_scan::keycode#14 +Coalesced [700] keyboard_events_size#82 ← keyboard_events_size#29 +Coalesced [701] keyboard_event_scan::col#8 ← keyboard_event_scan::col#1 +Coalesced (already) [702] keyboard_event_scan::keycode#18 ← keyboard_event_scan::keycode#14 +Coalesced (already) [703] keyboard_events_size#84 ← keyboard_events_size#29 +Coalesced [707] keyboard_events_size#87 ← keyboard_events_size#1 +Coalesced (already) [708] keyboard_events_size#88 ← keyboard_events_size#10 +Coalesced (already) [709] keyboard_events_size#86 ← keyboard_events_size#10 +Not coalescing [722] render_screen_showing#1 ← render_screen_show#16 +Coalesced [745] play_init::b#3 ← play_init::b#1 +Coalesced [746] play_init::j#3 ← play_init::j#1 +Coalesced [747] play_init::pli#3 ← play_init::pli#1 +Coalesced [748] play_init::idx#3 ← play_init::idx#1 +Coalesced [773] sprites_init::s#3 ← sprites_init::s#1 +Coalesced [774] sprites_init::xpos#3 ← sprites_init::xpos#1 +Coalesced [800] render_init::i#3 ← render_init::i#1 +Coalesced [801] render_init::li_1#3 ← render_init::li_1#1 +Coalesced [802] render_init::li_2#3 ← render_init::li_2#1 +Coalesced [804] render_screen_original::screen#11 ← render_screen_original::screen#9 +Coalesced [806] render_screen_original::screen#13 ← render_screen_original::screen#8 +Coalesced [807] render_screen_original::cols#10 ← render_screen_original::cols#7 +Coalesced [815] render_screen_original::oscr#8 ← render_screen_original::oscr#4 +Coalesced [816] render_screen_original::screen#15 ← render_screen_original::screen#2 +Coalesced [817] render_screen_original::ocols#8 ← render_screen_original::ocols#4 +Coalesced [818] render_screen_original::cols#12 ← render_screen_original::cols#1 +Coalesced [819] render_screen_original::x#8 ← render_screen_original::x#1 +Coalesced [829] render_screen_original::screen#17 ← render_screen_original::screen#3 +Coalesced [830] render_screen_original::cols#14 ← render_screen_original::cols#2 +Coalesced [831] render_screen_original::x#10 ← render_screen_original::x#2 +Coalesced [842] render_screen_original::screen#12 ← render_screen_original::screen#10 +Coalesced [843] render_screen_original::cols#9 ← render_screen_original::cols#3 +Coalesced [844] render_screen_original::oscr#7 ← render_screen_original::oscr#1 +Coalesced [845] render_screen_original::ocols#7 ← render_screen_original::ocols#1 +Coalesced [846] render_screen_original::y#7 ← render_screen_original::y#1 +Coalesced [847] render_screen_original::screen#18 ← render_screen_original::screen#10 +Coalesced [848] render_screen_original::cols#15 ← render_screen_original::cols#3 +Coalesced [849] render_screen_original::x#11 ← render_screen_original::x#3 +Coalesced (already) [850] render_screen_original::oscr#9 ← render_screen_original::oscr#1 +Coalesced [851] render_screen_original::screen#16 ← render_screen_original::screen#3 +Coalesced (already) [852] render_screen_original::ocols#9 ← render_screen_original::ocols#1 +Coalesced [853] render_screen_original::cols#13 ← render_screen_original::cols#2 +Coalesced [854] render_screen_original::x#9 ← render_screen_original::x#2 +Coalesced (already) [855] render_screen_original::screen#14 ← render_screen_original::screen#2 +Coalesced (already) [856] render_screen_original::cols#11 ← render_screen_original::cols#1 +Coalesced [857] render_screen_original::x#7 ← render_screen_original::x#1 +Coalesced [884] irq_raster_next#27 ← irq_raster_next#3 +Coalesced [885] irq_cnt#23 ← irq_cnt#1 +Coalesced [886] irq_sprite_ypos#27 ← irq_sprite_ypos#3 +Coalesced [887] irq_sprite_ptr#21 ← irq_sprite_ptr#3 +Coalesced [896] irq_raster_next#26 ← irq_raster_next#2 +Coalesced [897] irq_cnt#22 ← irq_cnt#2 +Coalesced [898] irq_sprite_ypos#26 ← irq_sprite_ypos#2 +Coalesced [899] irq_sprite_ptr#20 ← irq_sprite_ptr#2 +Coalesced [905] irq_raster_next#25 ← irq_raster_next#1 +Coalesced (already) [906] irq_cnt#21 ← irq_cnt#1 +Coalesced [907] irq_sprite_ypos#25 ← irq_sprite_ypos#1 +Coalesced [908] irq_sprite_ptr#19 ← irq_sprite_ptr#1 Coalesced down to 99 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @8 @@ -11496,8 +11393,8 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [40] (byte) current_piece_char#10 ← phi( main::@6/(byte) current_piece_char#16 main::@17/(byte) current_piece_char#5 main::@25/(byte) current_piece_char#16 ) [40] (byte*) current_piece#10 ← phi( main::@6/(byte*) current_piece#15 main::@17/(byte*~) current_piece#102 main::@25/(byte*) current_piece#15 ) [40] (byte) current_movedown_slow#14 ← phi( main::@6/(byte) current_movedown_slow#21 main::@17/(byte) current_movedown_slow#1 main::@25/(byte) current_movedown_slow#21 ) - [40] (byte) render_screen_render#18 ← phi( main::@17/(byte) $20 main::@25/(byte) render_screen_render#11 ) - [40] (byte) render_screen_show#16 ← phi( main::@17/(byte) 0 main::@25/(byte) render_screen_show#13 ) + [40] (byte) render_screen_render#18 ← phi( main::@6/(byte) render_screen_render#18 main::@17/(byte) $20 main::@25/(byte) render_screen_render#11 ) + [40] (byte) render_screen_show#16 ← phi( main::@6/(byte) render_screen_show#16 main::@17/(byte) 0 main::@25/(byte) render_screen_show#13 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [41] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 @@ -13266,7 +13163,7 @@ VARIABLE REGISTER WEIGHTS (byte) render_screen_render (byte) render_screen_render#11 3.25 (byte) render_screen_render#15 13.0 -(byte) render_screen_render#18 0.923076923076923 +(byte) render_screen_render#18 4.8076923076923075 (byte) render_screen_render#22 8.615384615384615 (byte) render_screen_render#33 5.333333333333333 (byte~) render_screen_render#64 22.0 @@ -13274,7 +13171,7 @@ VARIABLE REGISTER WEIGHTS (byte~) render_screen_render#66 11.0 (byte) render_screen_show (byte) render_screen_show#13 4.333333333333333 -(byte) render_screen_show#16 0.425 +(byte) render_screen_show#16 5.474999999999999 (byte) render_screen_showing (byte) render_screen_showing#0 0.1276595744680851 (byte) render_screen_showing#1 3.8000000000000003 @@ -14348,24 +14245,27 @@ main: { lda #0 sta render_screen_show jmp b1 - // [40] phi from main::@6 to main::@1 [phi:main::@6->main::@1] + // [40] phi from main::@25 main::@6 to main::@1 [phi:main::@25/main::@6->main::@1] + b1_from_b25: b1_from_b6: - // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@6->main::@1#0] -- register_copy - // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@6->main::@1#1] -- register_copy - // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@6->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@6->main::@1#3] -- register_copy - // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@6->main::@1#4] -- register_copy - // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@6->main::@1#5] -- register_copy - // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@6->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@6->main::@1#7] -- register_copy - // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@6->main::@1#8] -- register_copy - // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@6->main::@1#9] -- register_copy - // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@6->main::@1#10] -- register_copy - // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@6->main::@1#11] -- register_copy - // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@6->main::@1#12] -- register_copy - // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@6->main::@1#13] -- register_copy - // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@6->main::@1#14] -- register_copy - // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@6->main::@1#15] -- register_copy + // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@25/main::@6->main::@1#0] -- register_copy + // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@25/main::@6->main::@1#1] -- register_copy + // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@25/main::@6->main::@1#2] -- register_copy + // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@25/main::@6->main::@1#3] -- register_copy + // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@25/main::@6->main::@1#4] -- register_copy + // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@25/main::@6->main::@1#5] -- register_copy + // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@25/main::@6->main::@1#6] -- register_copy + // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@25/main::@6->main::@1#7] -- register_copy + // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@25/main::@6->main::@1#8] -- register_copy + // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@25/main::@6->main::@1#9] -- register_copy + // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@25/main::@6->main::@1#10] -- register_copy + // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@25/main::@6->main::@1#11] -- register_copy + // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@25/main::@6->main::@1#12] -- register_copy + // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@25/main::@6->main::@1#13] -- register_copy + // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@25/main::@6->main::@1#14] -- register_copy + // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@25/main::@6->main::@1#15] -- register_copy + // [40] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@25/main::@6->main::@1#16] -- register_copy + // [40] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@25/main::@6->main::@1#17] -- register_copy jmp b1 // main::@1 b1: @@ -14511,27 +14411,7 @@ main: { b25: // [71] call render_screen_swap jsr render_screen_swap - // [40] phi from main::@25 to main::@1 [phi:main::@25->main::@1] - b1_from_b25: - // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@25->main::@1#0] -- register_copy - // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@25->main::@1#1] -- register_copy - // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@25->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@25->main::@1#3] -- register_copy - // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@25->main::@1#4] -- register_copy - // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@25->main::@1#5] -- register_copy - // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@25->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@25->main::@1#7] -- register_copy - // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@25->main::@1#8] -- register_copy - // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@25->main::@1#9] -- register_copy - // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@25->main::@1#10] -- register_copy - // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@25->main::@1#11] -- register_copy - // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@25->main::@1#12] -- register_copy - // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@25->main::@1#13] -- register_copy - // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@25->main::@1#14] -- register_copy - // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@25->main::@1#15] -- register_copy - // [40] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@25->main::@1#16] -- register_copy - // [40] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@25->main::@1#17] -- register_copy - jmp b1 + jmp b1_from_b25 } // render_screen_swap // Swap rendering to the other screen (used for double buffering) @@ -18738,7 +18618,7 @@ Uplift Scope [keyboard_event_scan] 20,002: zp ZP_BYTE:208 [ keyboard_event_scan: Uplift Scope [play_collision] 38,006.5: zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] 20,002: zp ZP_BYTE:160 [ play_collision::$5 ] 13,378.25: zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] 12,223.44: zp ZP_BYTE:52 [ play_collision::c#2 play_collision::c#1 ] 2,002: zp ZP_BYTE:156 [ play_collision::$14 ] 1,615.62: zp ZP_BYTE:159 [ play_collision::i#1 ] 1,326.38: zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] 1,118.76: zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] 785.86: zp ZP_WORD:157 [ play_collision::playfield_line#0 ] 476.33: zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] 51.62: zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] 18: zp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] 4: zp ZP_BYTE:151 [ play_collision::return#14 ] 4: zp ZP_BYTE:161 [ play_collision::return#13 ] 4: zp ZP_BYTE:163 [ play_collision::return#1 ] 4: zp ZP_BYTE:167 [ play_collision::return#0 ] 4: zp ZP_BYTE:174 [ play_collision::return#10 ] 1.43: zp ZP_BYTE:53 [ play_collision::return#15 ] Uplift Scope [play_lock_current] 38,006.5: zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] 14,753.5: zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] 14,001.4: zp ZP_BYTE:87 [ play_lock_current::c#2 play_lock_current::c#1 ] 2,333.67: zp ZP_BYTE:192 [ play_lock_current::i#1 ] 2,002: zp ZP_BYTE:189 [ play_lock_current::$4 ] 1,155: zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] 1,100.2: zp ZP_WORD:190 [ play_lock_current::playfield_line#0 ] 754.92: zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Uplift Scope [play_remove_lines] 19,004.21: zp ZP_BYTE:79 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] 17,938.14: zp ZP_BYTE:82 [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] 17,501.75: zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] 8,201: zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] 6,000.6: zp ZP_BYTE:188 [ play_remove_lines::c#0 ] 2,566.89: zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] 1,634.97: zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] 4: zp ZP_BYTE:169 [ play_remove_lines::return#0 ] -Uplift Scope [] 58,858.91: zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] 2,120.54: zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] 1,143.93: zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] 209.73: zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] 193.66: zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] 74.29: zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] 72.26: zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] 65.61: zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] 62.17: zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] 61.29: zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] 42.02: zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] 32: zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] 30.62: zp ZP_BYTE:35 [ render_screen_render#22 render_screen_render#64 ] 29.4: zp ZP_BYTE:17 [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] 24: zp ZP_BYTE:16 [ render_screen_render#15 render_screen_render#66 ] 20.4: zp ZP_BYTE:24 [ current_ypos#13 current_ypos#98 current_ypos#99 ] 18.41: zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 17.41: zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 16.93: zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] 15.34: zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] 14.83: zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] 14.77: zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] 14.1: zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] 13.64: zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] 12.63: zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] 12.62: zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 12.38: zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 11.97: zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] 10.83: zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] 4.76: zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] 4.17: zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] +Uplift Scope [] 58,858.91: zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] 2,120.54: zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] 1,143.93: zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] 209.73: zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] 193.66: zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] 74.29: zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] 72.26: zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] 65.61: zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] 62.17: zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] 61.29: zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] 42.02: zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] 32: zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] 30.62: zp ZP_BYTE:35 [ render_screen_render#22 render_screen_render#64 ] 29.4: zp ZP_BYTE:17 [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] 24: zp ZP_BYTE:16 [ render_screen_render#15 render_screen_render#66 ] 20.4: zp ZP_BYTE:24 [ current_ypos#13 current_ypos#98 current_ypos#99 ] 18.41: zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 17.41: zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 16.93: zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] 15.34: zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] 14.83: zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] 14.77: zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] 14.1: zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] 13.64: zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] 12.63: zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] 12.62: zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 12.38: zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 11.97: zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] 10.83: zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] 9.81: zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] 8.06: zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] Uplift Scope [render_moving] 2,605.75: zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] 1,835.17: zp ZP_BYTE:34 [ render_moving::c#2 render_moving::c#1 ] 1,490.13: zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] 1,001: zp ZP_BYTE:138 [ render_moving::current_cell#0 ] 202: zp ZP_BYTE:134 [ render_moving::$1 ] 202: zp ZP_BYTE:135 [ render_moving::$6 ] 163.38: zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] 110.2: zp ZP_WORD:136 [ render_moving::screen_line#0 ] 96.71: zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Uplift Scope [render_next] 1,970.3: zp ZP_WORD:19 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] 1,787.5: zp ZP_BYTE:23 [ render_next::c#2 render_next::c#1 ] 1,657: zp ZP_WORD:21 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] 1,001: zp ZP_BYTE:133 [ render_next::cell#0 ] 169.86: zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] 66.87: zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] 1: zp ZP_BYTE:131 [ render_next::$6 ] Uplift Scope [play_increase_level] 4,004: zp ZP_BYTE:187 [ play_increase_level::$5 ] 2,502.5: zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ] 4: zp ZP_BYTE:186 [ play_increase_level::$1 ] @@ -18765,243 +18645,243 @@ Uplift Scope [sid_rnd_init] Uplift Scope [render_screen_swap] Uplift Scope [sprites_irq_init] -Uplifting [keyboard_event_scan] best 4709124 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:201 [ keyboard_event_scan::$0 ] zp ZP_BYTE:203 [ keyboard_event_scan::$3 ] zp ZP_BYTE:205 [ keyboard_event_scan::$6 ] zp ZP_BYTE:207 [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4708854 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:201 [ keyboard_event_scan::$0 ] zp ZP_BYTE:203 [ keyboard_event_scan::$3 ] zp ZP_BYTE:205 [ keyboard_event_scan::$6 ] zp ZP_BYTE:207 [ keyboard_event_scan::$9 ] Limited combination testing to 100 combinations of 524288 possible. -Uplifting [play_collision] best 4559124 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp ZP_BYTE:156 [ play_collision::$14 ] zp ZP_BYTE:159 [ play_collision::i#1 ] zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] zp ZP_WORD:157 [ play_collision::playfield_line#0 ] zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp ZP_BYTE:151 [ play_collision::return#14 ] zp ZP_BYTE:161 [ play_collision::return#13 ] zp ZP_BYTE:163 [ play_collision::return#1 ] zp ZP_BYTE:167 [ play_collision::return#0 ] zp ZP_BYTE:174 [ play_collision::return#10 ] zp ZP_BYTE:53 [ play_collision::return#15 ] +Uplifting [play_collision] best 4558854 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp ZP_BYTE:156 [ play_collision::$14 ] zp ZP_BYTE:159 [ play_collision::i#1 ] zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] zp ZP_WORD:157 [ play_collision::playfield_line#0 ] zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp ZP_BYTE:151 [ play_collision::return#14 ] zp ZP_BYTE:161 [ play_collision::return#13 ] zp ZP_BYTE:163 [ play_collision::return#1 ] zp ZP_BYTE:167 [ play_collision::return#0 ] zp ZP_BYTE:174 [ play_collision::return#10 ] zp ZP_BYTE:53 [ play_collision::return#15 ] Limited combination testing to 100 combinations of 429981696 possible. -Uplifting [play_lock_current] best 4465124 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp ZP_BYTE:192 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] zp ZP_WORD:190 [ play_lock_current::playfield_line#0 ] zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4464854 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp ZP_BYTE:192 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] zp ZP_WORD:190 [ play_lock_current::playfield_line#0 ] zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Limited combination testing to 100 combinations of 2916 possible. -Uplifting [play_remove_lines] best 4326124 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp ZP_BYTE:188 [ play_remove_lines::c#0 ] zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp ZP_BYTE:169 [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4325854 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp ZP_BYTE:188 [ play_remove_lines::c#0 ] zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp ZP_BYTE:169 [ play_remove_lines::return#0 ] Limited combination testing to 100 combinations of 20736 possible. -Uplifting [] best 4325882 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] reg byte x [ render_screen_render#22 render_screen_render#64 ] reg byte x [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] reg byte a [ render_screen_render#15 render_screen_render#66 ] reg byte x [ current_ypos#13 current_ypos#98 current_ypos#99 ] zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] +Uplifting [] best 4325612 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ] zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] zp ZP_WORD:27 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ] zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp ZP_WORD:44 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 ] reg byte x [ render_screen_render#22 render_screen_render#64 ] reg byte x [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ] reg byte a [ render_screen_render#15 render_screen_render#66 ] reg byte x [ current_ypos#13 current_ypos#98 current_ypos#99 ] zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ] zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ] zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] Limited combination testing to 100 combinations of 1944 possible. -Uplifting [render_moving] best 4310882 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp ZP_BYTE:134 [ render_moving::$1 ] zp ZP_BYTE:135 [ render_moving::$6 ] zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] zp ZP_WORD:136 [ render_moving::screen_line#0 ] zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4310612 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp ZP_BYTE:134 [ render_moving::$1 ] zp ZP_BYTE:135 [ render_moving::$6 ] zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] zp ZP_WORD:136 [ render_moving::screen_line#0 ] zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Limited combination testing to 100 combinations of 15552 possible. -Uplifting [render_next] best 4295878 combination zp ZP_WORD:19 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp ZP_WORD:21 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] reg byte y [ render_next::$6 ] +Uplifting [render_next] best 4295608 combination zp ZP_WORD:19 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp ZP_WORD:21 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] reg byte y [ render_next::$6 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [play_increase_level] best 4281872 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] -Uplifting [render_playfield] best 4280872 combination zp ZP_WORD:38 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$2 ] reg byte a [ render_playfield::$6 ] zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [play_increase_level] best 4281602 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] +Uplifting [render_playfield] best 4280602 combination zp ZP_WORD:38 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$2 ] reg byte a [ render_playfield::$6 ] zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [keyboard_matrix_read] best 4268866 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] -Uplifting [render_screen_original] best 4266766 combination zp ZP_WORD:112 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp ZP_WORD:114 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [play_spawn_current] best 4260747 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp ZP_BYTE:173 [ play_spawn_current::$7 ] -Uplifting [main] best 4259547 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] -Uplifting [play_movement] best 4258935 combination reg byte a [ play_movement::return#3 ] zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] zp ZP_BYTE:124 [ play_movement::key_event#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp ZP_BYTE:146 [ play_movement::render#2 ] +Uplifting [keyboard_matrix_read] best 4268596 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [render_screen_original] best 4266496 combination zp ZP_WORD:112 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp ZP_WORD:114 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [play_spawn_current] best 4260477 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp ZP_BYTE:173 [ play_spawn_current::$7 ] +Uplifting [main] best 4259277 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] +Uplifting [play_movement] best 4258665 combination reg byte a [ play_movement::return#3 ] zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] zp ZP_BYTE:124 [ play_movement::key_event#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp ZP_BYTE:146 [ play_movement::render#2 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [keyboard_event_get] best 4258029 combination reg byte x [ keyboard_event_get::return#3 ] reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] -Uplifting [play_init] best 4257819 combination reg byte a [ play_init::$5 ] zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$4 ] zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ] +Uplifting [keyboard_event_get] best 4257759 combination reg byte x [ keyboard_event_get::return#3 ] reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] +Uplifting [play_init] best 4257549 combination reg byte a [ play_init::$5 ] zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$4 ] zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [render_bcd] best 4257789 combination zp ZP_WORD:8 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] zp ZP_WORD:14 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] zp ZP_BYTE:130 [ render_bcd::$4 ] zp ZP_WORD:10 [ render_bcd::offset#6 ] zp ZP_BYTE:12 [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4257519 combination zp ZP_WORD:8 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] zp ZP_WORD:14 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] zp ZP_BYTE:130 [ render_bcd::$4 ] zp ZP_WORD:10 [ render_bcd::offset#6 ] zp ZP_BYTE:12 [ render_bcd::only_low#6 ] Limited combination testing to 100 combinations of 1536 possible. -Uplifting [render_init] best 4257619 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$13 ] zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ] -Uplifting [sprites_init] best 4257449 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [play_move_down] best 4257416 combination reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::return#0 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] zp ZP_BYTE:170 [ play_move_down::removed#0 ] zp ZP_BYTE:141 [ play_move_down::key_event#0 ] zp ZP_BYTE:73 [ play_move_down::return#3 ] +Uplifting [render_init] best 4257349 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$13 ] zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ] +Uplifting [sprites_init] best 4257179 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [play_move_down] best 4257146 combination reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::return#0 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] zp ZP_BYTE:170 [ play_move_down::removed#0 ] zp ZP_BYTE:141 [ play_move_down::key_event#0 ] zp ZP_BYTE:73 [ play_move_down::return#3 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [keyboard_event_pressed] best 4257396 combination reg byte a [ keyboard_event_pressed::return#12 ] reg byte a [ keyboard_event_pressed::$0 ] reg byte a [ keyboard_event_pressed::$1 ] reg byte a [ keyboard_event_pressed::return#0 ] zp ZP_BYTE:202 [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:204 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:206 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:196 [ keyboard_event_pressed::return#11 ] zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] +Uplifting [keyboard_event_pressed] best 4257126 combination reg byte a [ keyboard_event_pressed::return#12 ] reg byte a [ keyboard_event_pressed::$0 ] reg byte a [ keyboard_event_pressed::$1 ] reg byte a [ keyboard_event_pressed::return#0 ] zp ZP_BYTE:202 [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:204 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:206 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:196 [ keyboard_event_pressed::return#11 ] zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] Limited combination testing to 100 combinations of 589824 possible. -Uplifting [sprites_irq] best 4257372 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp ZP_BYTE:222 [ sprites_irq::ptr#1 ] zp ZP_BYTE:217 [ sprites_irq::ypos#0 ] zp ZP_BYTE:219 [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4257102 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp ZP_BYTE:222 [ sprites_irq::ptr#1 ] zp ZP_BYTE:217 [ sprites_irq::ypos#0 ] zp ZP_BYTE:219 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_move_rotate] best 4257354 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte a [ play_move_rotate::return#0 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] zp ZP_BYTE:153 [ play_move_rotate::$7 ] zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] zp ZP_BYTE:42 [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4257084 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte a [ play_move_rotate::return#0 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] zp ZP_BYTE:153 [ play_move_rotate::$7 ] zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] zp ZP_BYTE:42 [ play_move_rotate::return#2 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_update_score] best 4257332 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp ZP_DWORD:180 [ play_update_score::add_bcd#0 ] zp ZP_BYTE:171 [ play_update_score::removed#0 ] zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4257062 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp ZP_DWORD:180 [ play_update_score::add_bcd#0 ] zp ZP_BYTE:171 [ play_update_score::removed#0 ] zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] Limited combination testing to 100 combinations of 2304 possible. -Uplifting [play_move_leftright] best 4257305 combination reg byte a [ play_move_leftright::return#0 ] reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] zp ZP_BYTE:54 [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4257035 combination reg byte a [ play_move_leftright::return#0 ] reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] zp ZP_BYTE:54 [ play_move_leftright::return#2 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [render_show] best 4257296 combination reg byte a [ render_show::d018val#3 ] -Uplifting [render_score] best 4257296 combination zp ZP_WORD:6 [ render_score::screen#3 ] -Uplifting [sid_rnd_init] best 4257296 combination -Uplifting [render_screen_swap] best 4257296 combination -Uplifting [sprites_irq_init] best 4257296 combination +Uplifting [render_show] best 4257026 combination reg byte a [ render_show::d018val#3 ] +Uplifting [render_score] best 4257026 combination zp ZP_WORD:6 [ render_score::screen#3 ] +Uplifting [sid_rnd_init] best 4257026 combination +Uplifting [render_screen_swap] best 4257026 combination +Uplifting [sprites_irq_init] best 4257026 combination Attempting to uplift remaining variables inzp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] -Uplifting [] best 4257296 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] +Uplifting [] best 4257026 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] -Uplifting [play_collision] best 4257296 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] +Uplifting [play_collision] best 4257026 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] -Uplifting [play_lock_current] best 4257296 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] +Uplifting [play_lock_current] best 4257026 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Attempting to uplift remaining variables inzp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] -Uplifting [keyboard_event_scan] best 4107296 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] +Uplifting [keyboard_event_scan] best 4107026 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] -Uplifting [play_remove_lines] best 4107296 combination zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] +Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] -Uplifting [play_lock_current] best 4107296 combination zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] +Uplifting [play_lock_current] best 4107026 combination zp ZP_BYTE:86 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] -Uplifting [play_collision] best 4107296 combination zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] +Uplifting [play_collision] best 4107026 combination zp ZP_BYTE:51 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Uplifting [keyboard_event_scan] best 4107296 combination zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] +Uplifting [keyboard_event_scan] best 4107026 combination zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] -Uplifting [play_remove_lines] best 4107296 combination zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] +Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:188 [ play_remove_lines::c#0 ] -Uplifting [play_remove_lines] best 4107296 combination zp ZP_BYTE:188 [ play_remove_lines::c#0 ] +Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:188 [ play_remove_lines::c#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Uplifting [render_moving] best 4107296 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] +Uplifting [render_moving] best 4107026 combination zp ZP_BYTE:32 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] -Uplifting [play_remove_lines] best 4107296 combination zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] +Uplifting [play_remove_lines] best 4107026 combination zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:192 [ play_lock_current::i#1 ] -Uplifting [play_lock_current] best 4107296 combination zp ZP_BYTE:192 [ play_lock_current::i#1 ] +Uplifting [play_lock_current] best 4107026 combination zp ZP_BYTE:192 [ play_lock_current::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] -Uplifting [] best 4107296 combination zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Uplifting [] best 4107026 combination zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Uplifting [keyboard_event_scan] best 4107296 combination zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] +Uplifting [keyboard_event_scan] best 4107026 combination zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] -Uplifting [render_playfield] best 4107296 combination zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] +Uplifting [render_playfield] best 4107026 combination zp ZP_BYTE:40 [ render_playfield::c#2 render_playfield::c#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:156 [ play_collision::$14 ] -Uplifting [play_collision] best 4103296 combination reg byte a [ play_collision::$14 ] +Uplifting [play_collision] best 4103026 combination reg byte a [ play_collision::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] -Uplifting [play_remove_lines] best 4103296 combination zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] +Uplifting [play_remove_lines] best 4103026 combination zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:159 [ play_collision::i#1 ] -Uplifting [play_collision] best 4103296 combination zp ZP_BYTE:159 [ play_collision::i#1 ] +Uplifting [play_collision] best 4103026 combination zp ZP_BYTE:159 [ play_collision::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] -Uplifting [render_playfield] best 4103296 combination zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] +Uplifting [render_playfield] best 4103026 combination zp ZP_BYTE:37 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] -Uplifting [render_moving] best 4103296 combination zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] +Uplifting [render_moving] best 4103026 combination zp ZP_BYTE:33 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] -Uplifting [play_collision] best 4103296 combination zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] +Uplifting [play_collision] best 4103026 combination zp ZP_BYTE:48 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] -Uplifting [keyboard_event_scan] best 4103296 combination zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] +Uplifting [keyboard_event_scan] best 4103026 combination zp ZP_BYTE:199 [ keyboard_event_scan::row_scan#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] -Uplifting [play_lock_current] best 4103296 combination zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] +Uplifting [play_lock_current] best 4103026 combination zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] -Uplifting [] best 4103296 combination zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] +Uplifting [] best 4103026 combination zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] -Uplifting [play_collision] best 4103296 combination zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] +Uplifting [play_collision] best 4103026 combination zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] -Uplifting [play_lock_current] best 4103296 combination zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4103026 combination zp ZP_BYTE:83 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:134 [ render_moving::$1 ] -Uplifting [render_moving] best 4102696 combination reg byte a [ render_moving::$1 ] +Uplifting [render_moving] best 4102426 combination reg byte a [ render_moving::$1 ] Attempting to uplift remaining variables inzp ZP_BYTE:135 [ render_moving::$6 ] -Uplifting [render_moving] best 4102296 combination reg byte a [ render_moving::$6 ] +Uplifting [render_moving] best 4102026 combination reg byte a [ render_moving::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] -Uplifting [] best 4102296 combination zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] +Uplifting [] best 4102026 combination zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] -Uplifting [render_playfield] best 4102296 combination zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [render_playfield] best 4102026 combination zp ZP_BYTE:36 [ render_playfield::l#2 render_playfield::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] -Uplifting [render_next] best 4102296 combination zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] +Uplifting [render_next] best 4102026 combination zp ZP_BYTE:18 [ render_next::l#7 render_next::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] -Uplifting [render_moving] best 4102296 combination zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] +Uplifting [render_moving] best 4102026 combination zp ZP_BYTE:31 [ render_moving::l#4 render_moving::l#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] -Uplifting [render_moving] best 4102296 combination zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4102026 combination zp ZP_BYTE:30 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] -Uplifting [] best 4102296 combination zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] +Uplifting [] best 4102026 combination zp ZP_BYTE:29 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ] Attempting to uplift remaining variables inzp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] -Uplifting [] best 4102296 combination zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] +Uplifting [] best 4102026 combination zp ZP_BYTE:120 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:132 [ render_next::next_piece_char#0 ] -Uplifting [render_next] best 4102296 combination zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] +Uplifting [render_next] best 4102026 combination zp ZP_BYTE:132 [ render_next::next_piece_char#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] -Uplifting [] best 4102296 combination zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] +Uplifting [] best 4102026 combination zp ZP_BYTE:119 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] -Uplifting [] best 4102296 combination zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] +Uplifting [] best 4102026 combination zp ZP_BYTE:121 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] -Uplifting [play_collision] best 4102296 combination zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] +Uplifting [play_collision] best 4102026 combination zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Attempting to uplift remaining variables inzp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] -Uplifting [] best 4102296 combination zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] +Uplifting [] best 4102026 combination zp ZP_BYTE:72 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Attempting to uplift remaining variables inzp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] -Uplifting [play_movement] best 4102296 combination zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] +Uplifting [play_movement] best 4102026 combination zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] -Uplifting [play_init] best 4102196 combination reg byte x [ play_init::b#2 play_init::b#1 ] +Uplifting [play_init] best 4101926 combination reg byte x [ play_init::b#2 play_init::b#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Uplifting [] best 4102196 combination zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] +Uplifting [] best 4101926 combination zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] -Uplifting [play_collision] best 4102180 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] +Uplifting [play_collision] best 4101910 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [render_screen_original] best 4102180 combination zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [render_screen_original] best 4101910 combination zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] Attempting to uplift remaining variables inzp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [sprites_init] best 4102180 combination zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [sprites_init] best 4101910 combination zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] Attempting to uplift remaining variables inzp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:26 [ current_xpos#59 current_xpos#119 current_xpos#120 ] Attempting to uplift remaining variables inzp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] -Uplifting [play_init] best 4102180 combination zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] +Uplifting [play_init] best 4101910 combination zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Attempting to uplift remaining variables inzp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:118 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] -Attempting to uplift remaining variables inzp ZP_BYTE:124 [ play_movement::key_event#0 ] -Uplifting [play_movement] best 4102180 combination zp ZP_BYTE:124 [ play_movement::key_event#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -Uplifting [play_move_rotate] best 4102180 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] -Uplifting [sprites_irq] best 4102180 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:25 [ render_screen_render#33 render_screen_render#65 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] +Attempting to uplift remaining variables inzp ZP_BYTE:124 [ play_movement::key_event#0 ] +Uplifting [play_movement] best 4101910 combination zp ZP_BYTE:124 [ play_movement::key_event#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] +Uplifting [play_move_rotate] best 4101910 combination zp ZP_BYTE:43 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] -Uplifting [] best 4102180 combination zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] +Uplifting [] best 4101910 combination zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] +Attempting to uplift remaining variables inzp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] +Uplifting [sprites_irq] best 4101910 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:130 [ render_bcd::$4 ] -Uplifting [render_bcd] best 4102174 combination reg byte a [ render_bcd::$4 ] +Uplifting [render_bcd] best 4101904 combination reg byte a [ render_bcd::$4 ] Attempting to uplift remaining variables inzp ZP_BYTE:151 [ play_collision::return#14 ] -Uplifting [play_collision] best 4102168 combination reg byte a [ play_collision::return#14 ] +Uplifting [play_collision] best 4101898 combination reg byte a [ play_collision::return#14 ] Attempting to uplift remaining variables inzp ZP_BYTE:153 [ play_move_rotate::$7 ] -Uplifting [play_move_rotate] best 4102162 combination reg byte x [ play_move_rotate::$7 ] +Uplifting [play_move_rotate] best 4101892 combination reg byte x [ play_move_rotate::$7 ] Attempting to uplift remaining variables inzp ZP_BYTE:161 [ play_collision::return#13 ] -Uplifting [play_collision] best 4102156 combination reg byte a [ play_collision::return#13 ] +Uplifting [play_collision] best 4101886 combination reg byte a [ play_collision::return#13 ] Attempting to uplift remaining variables inzp ZP_BYTE:163 [ play_collision::return#1 ] -Uplifting [play_collision] best 4102150 combination reg byte a [ play_collision::return#1 ] +Uplifting [play_collision] best 4101880 combination reg byte a [ play_collision::return#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:167 [ play_collision::return#0 ] -Uplifting [play_collision] best 4102144 combination reg byte a [ play_collision::return#0 ] +Uplifting [play_collision] best 4101874 combination reg byte a [ play_collision::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:169 [ play_remove_lines::return#0 ] -Uplifting [play_remove_lines] best 4102138 combination reg byte a [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4101868 combination reg byte a [ play_remove_lines::return#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:170 [ play_move_down::removed#0 ] -Uplifting [play_move_down] best 4102132 combination reg byte a [ play_move_down::removed#0 ] +Uplifting [play_move_down] best 4101862 combination reg byte a [ play_move_down::removed#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:174 [ play_collision::return#10 ] -Uplifting [play_collision] best 4102126 combination reg byte a [ play_collision::return#10 ] +Uplifting [play_collision] best 4101856 combination reg byte a [ play_collision::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:201 [ keyboard_event_scan::$0 ] -Uplifting [keyboard_event_scan] best 4102120 combination reg byte a [ keyboard_event_scan::$0 ] +Uplifting [keyboard_event_scan] best 4101850 combination reg byte a [ keyboard_event_scan::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:202 [ keyboard_event_pressed::return#1 ] -Uplifting [keyboard_event_pressed] best 4102114 combination reg byte a [ keyboard_event_pressed::return#1 ] +Uplifting [keyboard_event_pressed] best 4101844 combination reg byte a [ keyboard_event_pressed::return#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:203 [ keyboard_event_scan::$3 ] -Uplifting [keyboard_event_scan] best 4102108 combination reg byte a [ keyboard_event_scan::$3 ] +Uplifting [keyboard_event_scan] best 4101838 combination reg byte a [ keyboard_event_scan::$3 ] Attempting to uplift remaining variables inzp ZP_BYTE:204 [ keyboard_event_pressed::return#2 ] -Uplifting [keyboard_event_pressed] best 4102102 combination reg byte a [ keyboard_event_pressed::return#2 ] +Uplifting [keyboard_event_pressed] best 4101832 combination reg byte a [ keyboard_event_pressed::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:205 [ keyboard_event_scan::$6 ] -Uplifting [keyboard_event_scan] best 4102096 combination reg byte a [ keyboard_event_scan::$6 ] +Uplifting [keyboard_event_scan] best 4101826 combination reg byte a [ keyboard_event_scan::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:206 [ keyboard_event_pressed::return#10 ] -Uplifting [keyboard_event_pressed] best 4102090 combination reg byte a [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 4101820 combination reg byte a [ keyboard_event_pressed::return#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:207 [ keyboard_event_scan::$9 ] -Uplifting [keyboard_event_scan] best 4102084 combination reg byte a [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4101814 combination reg byte a [ keyboard_event_scan::$9 ] Attempting to uplift remaining variables inzp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] -Uplifting [play_move_rotate] best 4102075 combination reg byte a [ play_move_rotate::key_event#0 ] +Uplifting [play_move_rotate] best 4101805 combination reg byte a [ play_move_rotate::key_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:222 [ sprites_irq::ptr#1 ] -Uplifting [sprites_irq] best 4102063 combination reg byte x [ sprites_irq::ptr#1 ] +Uplifting [sprites_irq] best 4101793 combination reg byte x [ sprites_irq::ptr#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:217 [ sprites_irq::ypos#0 ] -Uplifting [sprites_irq] best 4102048 combination reg byte a [ sprites_irq::ypos#0 ] +Uplifting [sprites_irq] best 4101778 combination reg byte a [ sprites_irq::ypos#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:219 [ sprites_irq::ptr#0 ] -Uplifting [sprites_irq] best 4102033 combination reg byte x [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4101763 combination reg byte x [ sprites_irq::ptr#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:141 [ play_move_down::key_event#0 ] -Uplifting [play_move_down] best 4102027 combination reg byte a [ play_move_down::key_event#0 ] +Uplifting [play_move_down] best 4101757 combination reg byte a [ play_move_down::key_event#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] -Uplifting [keyboard_event_pressed] best 4102027 combination zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] +Uplifting [keyboard_event_pressed] best 4101757 combination zp ZP_BYTE:194 [ keyboard_event_pressed::row_bits#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:196 [ keyboard_event_pressed::return#11 ] -Uplifting [keyboard_event_pressed] best 4102009 combination reg byte a [ keyboard_event_pressed::return#11 ] +Uplifting [keyboard_event_pressed] best 4101739 combination reg byte a [ keyboard_event_pressed::return#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:53 [ play_collision::return#15 ] -Uplifting [play_collision] best 4101979 combination reg byte a [ play_collision::return#15 ] +Uplifting [play_collision] best 4101709 combination reg byte a [ play_collision::return#15 ] Attempting to uplift remaining variables inzp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] -Uplifting [keyboard_event_pressed] best 4101979 combination zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] +Uplifting [keyboard_event_pressed] best 4101709 combination zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:171 [ play_update_score::removed#0 ] -Uplifting [play_update_score] best 4101973 combination reg byte x [ play_update_score::removed#0 ] +Uplifting [play_update_score] best 4101703 combination reg byte x [ play_update_score::removed#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:12 [ render_bcd::only_low#6 ] -Uplifting [render_bcd] best 4101952 combination reg byte y [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4101682 combination reg byte y [ render_bcd::only_low#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:146 [ play_movement::render#2 ] -Uplifting [play_movement] best 4101952 combination zp ZP_BYTE:146 [ play_movement::render#2 ] +Uplifting [play_movement] best 4101682 combination zp ZP_BYTE:146 [ play_movement::render#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:42 [ play_move_rotate::return#2 ] -Uplifting [play_move_rotate] best 4101943 combination reg byte a [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4101673 combination reg byte a [ play_move_rotate::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ play_move_leftright::return#2 ] -Uplifting [play_move_leftright] best 4101934 combination reg byte a [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4101664 combination reg byte a [ play_move_leftright::return#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:73 [ play_move_down::return#3 ] -Uplifting [play_move_down] best 4101927 combination reg byte x [ play_move_down::return#3 ] +Uplifting [play_move_down] best 4101657 combination reg byte x [ play_move_down::return#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:178 [ play_update_score::lines_before#0 ] -Uplifting [play_update_score] best 4101927 combination zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4101657 combination zp ZP_BYTE:178 [ play_update_score::lines_before#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:173 [ play_spawn_current::$7 ] -Uplifting [play_spawn_current] best 4101927 combination zp ZP_BYTE:173 [ play_spawn_current::$7 ] +Uplifting [play_spawn_current] best 4101657 combination zp ZP_BYTE:173 [ play_spawn_current::$7 ] Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ render_score::screen#3 ] ] with [ zp ZP_WORD:8 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] ] - score: 6 Coalescing zero page register with common assignment [ zp ZP_BYTE:41 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] ] with [ zp ZP_BYTE:146 [ play_movement::render#2 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:10 [ render_bcd::offset#6 ] ] with [ zp ZP_WORD:14 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] - score: 1 @@ -19084,9 +18964,9 @@ Allocated (was zp ZP_BYTE:192) zp ZP_BYTE:106 [ play_lock_current::i#1 ] Allocated (was zp ZP_BYTE:194) zp ZP_BYTE:107 [ keyboard_event_pressed::row_bits#0 ] Allocated (was zp ZP_BYTE:199) zp ZP_BYTE:108 [ keyboard_event_scan::row_scan#0 ] Interrupt procedure sprites_irq clobbers AXCNZV -Removing interrupt register storage sty regy+1 in SEG1211 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in SEG1250 [577] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in SEG1250 [577] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage sty regy+1 in SEG1194 entry interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage regy: in SEG1233 [577] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage ldy #00 in SEG1233 [577] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -19484,24 +19364,27 @@ main: { lda #0 sta render_screen_show jmp b1 - // [40] phi from main::@6 to main::@1 [phi:main::@6->main::@1] + // [40] phi from main::@25 main::@6 to main::@1 [phi:main::@25/main::@6->main::@1] + b1_from_b25: b1_from_b6: - // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@6->main::@1#0] -- register_copy - // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@6->main::@1#1] -- register_copy - // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@6->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@6->main::@1#3] -- register_copy - // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@6->main::@1#4] -- register_copy - // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@6->main::@1#5] -- register_copy - // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@6->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@6->main::@1#7] -- register_copy - // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@6->main::@1#8] -- register_copy - // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@6->main::@1#9] -- register_copy - // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@6->main::@1#10] -- register_copy - // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@6->main::@1#11] -- register_copy - // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@6->main::@1#12] -- register_copy - // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@6->main::@1#13] -- register_copy - // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@6->main::@1#14] -- register_copy - // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@6->main::@1#15] -- register_copy + // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@25/main::@6->main::@1#0] -- register_copy + // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@25/main::@6->main::@1#1] -- register_copy + // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@25/main::@6->main::@1#2] -- register_copy + // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@25/main::@6->main::@1#3] -- register_copy + // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@25/main::@6->main::@1#4] -- register_copy + // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@25/main::@6->main::@1#5] -- register_copy + // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@25/main::@6->main::@1#6] -- register_copy + // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@25/main::@6->main::@1#7] -- register_copy + // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@25/main::@6->main::@1#8] -- register_copy + // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@25/main::@6->main::@1#9] -- register_copy + // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@25/main::@6->main::@1#10] -- register_copy + // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@25/main::@6->main::@1#11] -- register_copy + // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@25/main::@6->main::@1#12] -- register_copy + // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@25/main::@6->main::@1#13] -- register_copy + // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@25/main::@6->main::@1#14] -- register_copy + // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@25/main::@6->main::@1#15] -- register_copy + // [40] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@25/main::@6->main::@1#16] -- register_copy + // [40] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@25/main::@6->main::@1#17] -- register_copy jmp b1 // main::@1 b1: @@ -19634,27 +19517,7 @@ main: { b25: // [71] call render_screen_swap jsr render_screen_swap - // [40] phi from main::@25 to main::@1 [phi:main::@25->main::@1] - b1_from_b25: - // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@25->main::@1#0] -- register_copy - // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@25->main::@1#1] -- register_copy - // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@25->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@25->main::@1#3] -- register_copy - // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@25->main::@1#4] -- register_copy - // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@25->main::@1#5] -- register_copy - // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@25->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@25->main::@1#7] -- register_copy - // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@25->main::@1#8] -- register_copy - // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@25->main::@1#9] -- register_copy - // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@25->main::@1#10] -- register_copy - // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@25->main::@1#11] -- register_copy - // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@25->main::@1#12] -- register_copy - // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@25->main::@1#13] -- register_copy - // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@25->main::@1#14] -- register_copy - // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@25->main::@1#15] -- register_copy - // [40] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@25->main::@1#16] -- register_copy - // [40] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@25->main::@1#17] -- register_copy - jmp b1 + jmp b1_from_b25 } // render_screen_swap // Swap rendering to the other screen (used for double buffering) @@ -22895,6 +22758,7 @@ Removing instruction ldy #0 Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b6 with b1 +Replacing label b1_from_b25 with b1 Replacing label b1_from_render_score with b1 Replacing label b1_from_render_bcd with b1 Replacing label b1_from_render_next with b1 @@ -22958,6 +22822,7 @@ Removing instruction b13_from_b12: Removing instruction play_spawn_current_from_b13: Removing instruction b14_from_b13: Removing instruction render_playfield_from_b14: +Removing instruction b1_from_b25: Removing instruction b1_from_b6: Removing instruction b3_from_b2: Removing instruction b18_from_b3: @@ -23106,7 +22971,6 @@ Removing instruction b23: Removing instruction render_next_from_b23: Removing instruction b24: Removing instruction b25: -Removing instruction b1_from_b25: Removing instruction breturn: Removing instruction b2_from_render_score: Removing instruction render_bcd_from_b2: @@ -24278,7 +24142,7 @@ FINAL SYMBOL TABLE (byte) render_screen_render (byte) render_screen_render#11 render_screen_render zp ZP_BYTE:3 3.25 (byte) render_screen_render#15 reg byte a 13.0 -(byte) render_screen_render#18 render_screen_render zp ZP_BYTE:3 0.923076923076923 +(byte) render_screen_render#18 render_screen_render zp ZP_BYTE:3 4.8076923076923075 (byte) render_screen_render#22 reg byte x 8.615384615384615 (byte) render_screen_render#33 render_screen_render#33 zp ZP_BYTE:15 5.333333333333333 (byte~) render_screen_render#64 reg byte x 22.0 @@ -24286,7 +24150,7 @@ FINAL SYMBOL TABLE (byte~) render_screen_render#66 reg byte a 11.0 (byte) render_screen_show (byte) render_screen_show#13 render_screen_show zp ZP_BYTE:2 4.333333333333333 -(byte) render_screen_show#16 render_screen_show zp ZP_BYTE:2 0.425 +(byte) render_screen_show#16 render_screen_show zp ZP_BYTE:2 5.474999999999999 (byte) render_screen_showing (byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:4 0.1276595744680851 (byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:4 3.8000000000000003 @@ -24584,7 +24448,7 @@ reg byte a [ sprites_irq::ptr#2 ] FINAL ASSEMBLER -Score: 3354122 +Score: 3353852 // File Comments // Tetris Game for the Commodore 64 @@ -24937,23 +24801,25 @@ main: { // [40] phi (byte) render_screen_show#16 = (byte) 0 [phi:main::@17->main::@1#17] -- vbuz1=vbuc1 lda #0 sta render_screen_show - // [40] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@6->main::@1#0] -- register_copy - // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@6->main::@1#1] -- register_copy - // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@6->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@6->main::@1#3] -- register_copy - // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@6->main::@1#4] -- register_copy - // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@6->main::@1#5] -- register_copy - // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@6->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@6->main::@1#7] -- register_copy - // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@6->main::@1#8] -- register_copy - // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@6->main::@1#9] -- register_copy - // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@6->main::@1#10] -- register_copy - // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@6->main::@1#11] -- register_copy - // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@6->main::@1#12] -- register_copy - // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@6->main::@1#13] -- register_copy - // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@6->main::@1#14] -- register_copy - // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@6->main::@1#15] -- register_copy + // [40] phi from main::@25 main::@6 to main::@1 [phi:main::@25/main::@6->main::@1] + // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@25/main::@6->main::@1#0] -- register_copy + // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@25/main::@6->main::@1#1] -- register_copy + // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@25/main::@6->main::@1#2] -- register_copy + // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@25/main::@6->main::@1#3] -- register_copy + // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@25/main::@6->main::@1#4] -- register_copy + // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@25/main::@6->main::@1#5] -- register_copy + // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@25/main::@6->main::@1#6] -- register_copy + // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@25/main::@6->main::@1#7] -- register_copy + // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@25/main::@6->main::@1#8] -- register_copy + // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@25/main::@6->main::@1#9] -- register_copy + // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@25/main::@6->main::@1#10] -- register_copy + // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@25/main::@6->main::@1#11] -- register_copy + // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@25/main::@6->main::@1#12] -- register_copy + // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@25/main::@6->main::@1#13] -- register_copy + // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@25/main::@6->main::@1#14] -- register_copy + // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@25/main::@6->main::@1#15] -- register_copy + // [40] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@25/main::@6->main::@1#16] -- register_copy + // [40] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@25/main::@6->main::@1#17] -- register_copy // main::@1 b1: // Wait for a frame to pass @@ -25067,25 +24933,6 @@ main: { // render_screen_swap() // [71] call render_screen_swap jsr render_screen_swap - // [40] phi from main::@25 to main::@1 [phi:main::@25->main::@1] - // [40] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@25->main::@1#0] -- register_copy - // [40] phi (byte) level#10 = (byte) level#17 [phi:main::@25->main::@1#1] -- register_copy - // [40] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@25->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@25->main::@1#3] -- register_copy - // [40] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@25->main::@1#4] -- register_copy - // [40] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@25->main::@1#5] -- register_copy - // [40] phi (byte) render_screen_showing#13 = (byte) render_screen_showing#1 [phi:main::@25->main::@1#6] -- register_copy - // [40] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@25->main::@1#7] -- register_copy - // [40] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@25->main::@1#8] -- register_copy - // [40] phi (byte) current_ypos#11 = (byte) current_ypos#19 [phi:main::@25->main::@1#9] -- register_copy - // [40] phi (byte) current_xpos#14 = (byte) current_xpos#19 [phi:main::@25->main::@1#10] -- register_copy - // [40] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#18 [phi:main::@25->main::@1#11] -- register_copy - // [40] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@25->main::@1#12] -- register_copy - // [40] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@25->main::@1#13] -- register_copy - // [40] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@25->main::@1#14] -- register_copy - // [40] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@25->main::@1#15] -- register_copy - // [40] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@25->main::@1#16] -- register_copy - // [40] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@25->main::@1#17] -- register_copy jmp b1 } // render_screen_swap diff --git a/src/test/ref/complex/tetris/tetris.sym b/src/test/ref/complex/tetris/tetris.sym index 350ad72fb..cd6eb3f54 100644 --- a/src/test/ref/complex/tetris/tetris.sym +++ b/src/test/ref/complex/tetris/tetris.sym @@ -963,7 +963,7 @@ (byte) render_screen_render (byte) render_screen_render#11 render_screen_render zp ZP_BYTE:3 3.25 (byte) render_screen_render#15 reg byte a 13.0 -(byte) render_screen_render#18 render_screen_render zp ZP_BYTE:3 0.923076923076923 +(byte) render_screen_render#18 render_screen_render zp ZP_BYTE:3 4.8076923076923075 (byte) render_screen_render#22 reg byte x 8.615384615384615 (byte) render_screen_render#33 render_screen_render#33 zp ZP_BYTE:15 5.333333333333333 (byte~) render_screen_render#64 reg byte x 22.0 @@ -971,7 +971,7 @@ (byte~) render_screen_render#66 reg byte a 11.0 (byte) render_screen_show (byte) render_screen_show#13 render_screen_show zp ZP_BYTE:2 4.333333333333333 -(byte) render_screen_show#16 render_screen_show zp ZP_BYTE:2 0.425 +(byte) render_screen_show#16 render_screen_show zp ZP_BYTE:2 5.474999999999999 (byte) render_screen_showing (byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:4 0.1276595744680851 (byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:4 3.8000000000000003 diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index 1e7cb75c2..4a1c520dc 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -167,8 +167,6 @@ Alias (byte) line::x1#1 = (byte) line::x1#4 Alias (byte) line::x#2 = (byte) line::x#3 Alias (byte) line::x1#2 = (byte) line::x1#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) line::x1#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) line::x0#1 (byte) line::x0#0 Identical Phi Values (byte) line::x1#1 (byte) line::x1#0 Identical Phi Values (byte) line::x1#2 (byte) line::x1#1 diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index 6fa93c56e..c3d9255eb 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -996,11 +996,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte*) print_line_cursor#50 = (byte*) print_line_cursor#54 Alias (byte*) print_line_cursor#52 = (byte*) print_line_cursor#56 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#36 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log index 21f74c858..c47a91898 100644 --- a/src/test/ref/cordic-atan2-16-ref.log +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -1471,22 +1471,6 @@ Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 -Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 -Self Phi Eliminated (byte*) init_font_hex::charset#3 -Self Phi Eliminated (byte) init_font_hex::c1#2 -Self Phi Eliminated (byte) init_font_hex::c#2 -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (signed byte) main::y#2 -Self Phi Eliminated (byte*) print_char_cursor#25 -Self Phi Eliminated (byte*) main::col00#1 -Self Phi Eliminated (byte*) print_char_cursor#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 @@ -1517,8 +1501,13 @@ Identical Phi Values (byte) diff::bb1#1 (byte) diff::bb1#0 Identical Phi Values (byte) diff::bb2#1 (byte) diff::bb2#0 Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#10 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 +Identical Phi Values (byte*) print_char_cursor#35 (byte*) print_char_cursor#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) init_font_hex::$3 [19] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 Simple Condition (bool~) init_font_hex::$4 [29] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 @@ -1526,12 +1515,12 @@ Simple Condition (bool~) init_font_hex::$5 [34] if((byte) init_font_hex::c#1!=ra Simple Condition (bool~) atan2_16::$0 [41] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [50] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [64] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [73] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [73] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [76] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [84] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [87] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [104] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [108] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [108] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$16 [227] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2 Simple Condition (bool~) main::$17 [231] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1 Simple Condition (bool~) diff::$0 [249] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 @@ -1582,7 +1571,7 @@ Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 Resolved ranged next value [27] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ Resolved ranged comparison value [29] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 -Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++ Resolved ranged comparison value [34] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 Resolved ranged next value [225] main::x#1 ← ++ main::x#2 to ++ Resolved ranged comparison value [227] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 @@ -1616,18 +1605,6 @@ Finalized unsigned number type (byte) $10 Finalized signed number type (signed byte) $15 Finalized signed number type (signed byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 -Self Phi Eliminated (byte) init_font_hex::c#5 -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Self Phi Eliminated (byte*) print_char_cursor#35 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 -Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Identical Phi Values (byte*) print_char_cursor#35 (const byte*) print_char_cursor#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [29] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Constant right-side identified [121] (byte*~) main::$3 ← (const byte*) COLS#0 + (word)(number) $c*(number) $28 diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index 86f2e4442..7ae7ed32d 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1100,20 +1100,6 @@ Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 -Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 -Self Phi Eliminated (byte*) init_font_hex::charset#3 -Self Phi Eliminated (byte) init_font_hex::c1#2 -Self Phi Eliminated (byte) init_font_hex::c#2 -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (signed byte) main::y#2 -Self Phi Eliminated (byte*) main::col00#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 @@ -1131,6 +1117,10 @@ Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#19 Identical Phi Values (signed byte) main::y#2 (signed byte) main::y#4 Identical Phi Values (byte*) main::col00#1 (byte*) main::col00#0 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 Successful SSA optimization Pass2IdenticalPhiElimination @@ -1140,12 +1130,12 @@ Simple Condition (bool~) init_font_hex::$5 [34] if((byte) init_font_hex::c#1!=ra Simple Condition (bool~) atan2_16::$0 [41] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [50] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [64] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [73] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [73] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [76] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [84] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [87] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [104] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [108] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [108] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$13 [173] if((signed byte) main::x#1!=rangelast(-$13,$14)) goto main::@2 Simple Condition (bool~) main::$14 [177] if((signed byte) main::y#1!=rangelast(-$c,$c)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -1187,7 +1177,7 @@ Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 Resolved ranged next value [27] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ Resolved ranged comparison value [29] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 -Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++ Resolved ranged comparison value [34] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 Resolved ranged next value [171] main::x#1 ← ++ main::x#2 to ++ Resolved ranged comparison value [173] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 @@ -1221,16 +1211,6 @@ Finalized unsigned number type (byte) $10 Finalized signed number type (signed byte) $15 Finalized signed number type (signed byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 -Self Phi Eliminated (byte) init_font_hex::c#5 -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 -Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [29] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Constant right-side identified [94] (byte*~) main::$2 ← (const byte*) COLS#0 + (word)(number) $c*(number) $28 diff --git a/src/test/ref/cordic-atan2-clear.cfg b/src/test/ref/cordic-atan2-clear.cfg index c7aff768f..a941dddf6 100644 --- a/src/test/ref/cordic-atan2-clear.cfg +++ b/src/test/ref/cordic-atan2-clear.cfg @@ -19,7 +19,7 @@ main::@5: scope:[main] from main::toD0181 [8] call init_angle_screen to:main::@1 main::@1: scope:[main] from main::@3 main::@4 main::@5 - [9] (byte*) main::clear_char#5 ← phi( main::@5/(const byte*) CHARSET#0 main::@4/(byte*) main::clear_char#1 ) + [9] (byte*) main::clear_char#5 ← phi( main::@5/(const byte*) CHARSET#0 main::@3/(byte*) main::clear_char#5 main::@4/(byte*) main::clear_char#1 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [10] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index af608ef98..0fe64b59e 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -1221,22 +1221,6 @@ Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 -Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 -Self Phi Eliminated (byte*) init_font_hex::charset#3 -Self Phi Eliminated (byte) init_font_hex::c1#2 -Self Phi Eliminated (byte) init_font_hex::c#2 -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (byte*) main::clear_char#2 -Self Phi Eliminated (byte) init_angle_screen::y#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 @@ -1257,6 +1241,10 @@ Identical Phi Values (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#4 Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#5 Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#5 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 Successful SSA optimization Pass2IdenticalPhiElimination @@ -1266,12 +1254,12 @@ Simple Condition (bool~) init_font_hex::$5 [34] if((byte) init_font_hex::c#1!=ra Simple Condition (bool~) atan2_16::$0 [41] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [50] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [64] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [73] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [73] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [76] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [84] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [87] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [104] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [108] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [108] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$3 [151] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4 Simple Condition (bool~) main::$6 [156] if((byte*) main::clear_char#5>=(byte*~) main::$4) goto main::@1 Simple Condition (bool~) init_angle_screen::$15 [202] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 @@ -1317,7 +1305,7 @@ Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 Resolved ranged next value [27] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ Resolved ranged comparison value [29] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 -Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++ Resolved ranged comparison value [34] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 Resolved ranged next value [206] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++ Resolved ranged comparison value [208] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d @@ -1350,17 +1338,6 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 -Self Phi Eliminated (byte) init_font_hex::c#5 -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Self Phi Eliminated (byte*) main::clear_char#5 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 -Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [29] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Constant right-side identified [76] (byte*~) main::$4 ← (const byte*) CHARSET#0 + (word) $800 @@ -1475,6 +1452,7 @@ Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2 Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25) Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7) Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8) +Added new block during phi lifting main::@14(between main::@5 and main::@1) Added new block during phi lifting init_angle_screen::@6(between init_angle_screen::@3 and init_angle_screen::@1) Added new block during phi lifting init_angle_screen::@7(between init_angle_screen::@5 and init_angle_screen::@2) Adding NOP phi() at start of @begin @@ -1494,56 +1472,57 @@ Adding NOP phi() at start of init_font_hex CALL GRAPH Calls in [] to main:5 Calls in [main] to init_font_hex:9 init_angle_screen:14 -Calls in [init_angle_screen] to atan2_16:32 +Calls in [init_angle_screen] to atan2_16:33 Created 31 initial phi equivalence classes -Coalesced [21] main::clear_char#6 ← main::clear_char#1 -Coalesced [52] init_angle_screen::y#6 ← init_angle_screen::y#1 -Coalesced [53] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#1 -Coalesced [54] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#1 -Coalesced [55] init_angle_screen::x#4 ← init_angle_screen::x#1 -Coalesced [56] init_angle_screen::xb#4 ← init_angle_screen::xb#1 -Coalesced [59] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [63] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [65] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [66] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [69] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [74] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [78] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [81] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [82] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [83] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [84] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [85] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [91] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [92] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [99] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [100] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [101] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [105] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [106] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [107] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [108] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [109] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [114] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [115] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [116] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [117] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [118] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [122] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [123] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [124] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [125] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [126] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [129] init_font_hex::charset#9 ← init_font_hex::charset#5 -Coalesced [151] init_font_hex::charset#8 ← init_font_hex::charset#0 -Coalesced [152] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 -Coalesced [153] init_font_hex::c#7 ← init_font_hex::c#1 -Coalesced (already) [154] init_font_hex::charset#10 ← init_font_hex::charset#0 -Coalesced [155] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 -Coalesced [156] init_font_hex::c1#5 ← init_font_hex::c1#1 -Coalesced [157] init_font_hex::i#3 ← init_font_hex::i#1 -Coalesced [158] init_font_hex::idx#7 ← init_font_hex::idx#2 +Coalesced [21] main::clear_char#7 ← main::clear_char#1 +Coalesced (already) [22] main::clear_char#6 ← main::clear_char#5 +Coalesced [53] init_angle_screen::y#6 ← init_angle_screen::y#1 +Coalesced [54] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#1 +Coalesced [55] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#1 +Coalesced [56] init_angle_screen::x#4 ← init_angle_screen::x#1 +Coalesced [57] init_angle_screen::xb#4 ← init_angle_screen::xb#1 +Coalesced [60] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [64] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [66] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [67] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [70] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [75] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [79] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [82] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [83] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [84] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [85] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [86] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [92] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [93] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [100] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [101] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [102] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [106] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [107] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [108] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [109] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [110] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [115] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [116] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [117] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [118] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [119] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [123] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [124] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [125] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [126] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [127] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [130] init_font_hex::charset#9 ← init_font_hex::charset#5 +Coalesced [152] init_font_hex::charset#8 ← init_font_hex::charset#0 +Coalesced [153] init_font_hex::proto_hi#7 ← init_font_hex::proto_hi#1 +Coalesced [154] init_font_hex::c#7 ← init_font_hex::c#1 +Coalesced (already) [155] init_font_hex::charset#10 ← init_font_hex::charset#0 +Coalesced [156] init_font_hex::proto_lo#5 ← init_font_hex::proto_lo#1 +Coalesced [157] init_font_hex::c1#5 ← init_font_hex::c1#1 +Coalesced [158] init_font_hex::i#3 ← init_font_hex::i#1 +Coalesced [159] init_font_hex::idx#7 ← init_font_hex::idx#2 Coalesced down to 23 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @3 @@ -1552,6 +1531,7 @@ Culled Empty Block (label) @10 Culled Empty Block (label) main::@12 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@13 +Culled Empty Block (label) main::@14 Culled Empty Block (label) init_angle_screen::@6 Culled Empty Block (label) init_angle_screen::@7 Culled Empty Block (label) atan2_16::@35 @@ -1612,7 +1592,7 @@ main::@5: scope:[main] from main::toD0181 [8] call init_angle_screen to:main::@1 main::@1: scope:[main] from main::@3 main::@4 main::@5 - [9] (byte*) main::clear_char#5 ← phi( main::@5/(const byte*) CHARSET#0 main::@4/(byte*) main::clear_char#1 ) + [9] (byte*) main::clear_char#5 ← phi( main::@5/(const byte*) CHARSET#0 main::@3/(byte*) main::clear_char#5 main::@4/(byte*) main::clear_char#1 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [10] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 @@ -1935,7 +1915,7 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte*) main::clear_char (byte*) main::clear_char#1 22.0 -(byte*) main::clear_char#5 33.5 +(byte*) main::clear_char#5 84.0 (word~) main::toD0181_$0 (number~) main::toD0181_$1 (number~) main::toD0181_$2 @@ -2137,8 +2117,10 @@ main: { lda #>CHARSET sta clear_char+1 jmp b1 - // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + // [9] phi from main::@3 main::@4 to main::@1 [phi:main::@3/main::@4->main::@1] b1_from_b3: + b1_from_b4: + // [9] phi (byte*) main::clear_char#5 = (byte*) main::clear_char#5 [phi:main::@3/main::@4->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -2173,10 +2155,7 @@ main: { bne !+ inc clear_char+1 !: - // [9] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [9] phi (byte*) main::clear_char#5 = (byte*) main::clear_char#1 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 + jmp b1_from_b4 } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. @@ -3060,39 +3039,39 @@ REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:20 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:56 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:57 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:15 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:46 [ atan2_16::return#2 ] 50: zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:42 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:44 [ atan2_16::y#0 ] Uplift Scope [init_font_hex] 2,168.83: zp ZP_BYTE:33 [ init_font_hex::i#2 init_font_hex::i#1 ] 2,002: zp ZP_BYTE:59 [ init_font_hex::$1 ] 2,002: zp ZP_BYTE:60 [ init_font_hex::$2 ] 1,151.6: zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 1,001: zp ZP_BYTE:58 [ init_font_hex::$0 ] 202: zp ZP_BYTE:61 [ init_font_hex::idx#3 ] 165.86: zp ZP_WORD:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 164.97: zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 143.04: zp ZP_WORD:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 64.17: zp ZP_WORD:25 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 17.66: zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:35 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:36 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:39 [ init_angle_screen::$6 ] 202: zp ZP_WORD:48 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:50 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:53 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:54 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:55 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 72.14: zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:40 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:37 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:4 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:5 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] -Uplift Scope [main] 55.5: zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] +Uplift Scope [main] 106: zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] Uplift Scope [] -Uplifting [atan2_16] best 1174941 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:46 [ atan2_16::return#2 ] zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:42 [ atan2_16::x#0 ] zp ZP_WORD:44 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1174671 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:46 [ atan2_16::return#2 ] zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:42 [ atan2_16::x#0 ] zp ZP_WORD:44 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [init_font_hex] best 1155941 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:58 [ init_font_hex::$0 ] zp ZP_BYTE:61 [ init_font_hex::idx#3 ] zp ZP_WORD:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:25 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 1155671 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp ZP_BYTE:58 [ init_font_hex::$0 ] zp ZP_BYTE:61 [ init_font_hex::idx#3 ] zp ZP_WORD:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp ZP_WORD:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp ZP_WORD:25 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. -Uplifting [init_angle_screen] best 1153941 combination reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$6 ] zp ZP_WORD:48 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:50 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:54 [ init_angle_screen::$13 ] zp ZP_BYTE:55 [ init_angle_screen::$14 ] zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:40 [ init_angle_screen::yw#0 ] zp ZP_WORD:37 [ init_angle_screen::xw#0 ] zp ZP_BYTE:4 [ init_angle_screen::y#4 init_angle_screen::y#1 ] zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:5 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +Uplifting [init_angle_screen] best 1153671 combination reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$6 ] zp ZP_WORD:48 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:50 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:54 [ init_angle_screen::$13 ] zp ZP_BYTE:55 [ init_angle_screen::$14 ] zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:40 [ init_angle_screen::yw#0 ] zp ZP_WORD:37 [ init_angle_screen::xw#0 ] zp ZP_BYTE:4 [ init_angle_screen::y#4 init_angle_screen::y#1 ] zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:5 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [main] best 1153941 combination zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] -Uplifting [] best 1153941 combination +Uplifting [main] best 1153671 combination zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ] +Uplifting [] best 1153671 combination Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] -Uplifting [init_font_hex] best 1153941 combination zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] +Uplifting [init_font_hex] best 1153671 combination zp ZP_BYTE:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:58 [ init_font_hex::$0 ] -Uplifting [init_font_hex] best 1153941 combination zp ZP_BYTE:58 [ init_font_hex::$0 ] +Uplifting [init_font_hex] best 1153671 combination zp ZP_BYTE:58 [ init_font_hex::$0 ] Attempting to uplift remaining variables inzp ZP_BYTE:54 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1153341 combination reg byte a [ init_angle_screen::$13 ] +Uplifting [init_angle_screen] best 1153071 combination reg byte a [ init_angle_screen::$13 ] Attempting to uplift remaining variables inzp ZP_BYTE:55 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1152741 combination reg byte a [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1152471 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:61 [ init_font_hex::idx#3 ] -Uplifting [init_font_hex] best 1152141 combination reg byte y [ init_font_hex::idx#3 ] +Uplifting [init_font_hex] best 1151871 combination reg byte y [ init_font_hex::idx#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] -Uplifting [init_font_hex] best 1152141 combination zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] +Uplifting [init_font_hex] best 1151871 combination zp ZP_BYTE:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1152141 combination zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1151871 combination zp ZP_BYTE:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1152141 combination zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1151871 combination zp ZP_BYTE:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1152141 combination zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1151871 combination zp ZP_BYTE:52 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1152141 combination zp ZP_BYTE:4 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1151871 combination zp ZP_BYTE:4 [ init_angle_screen::y#4 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] -Uplifting [init_font_hex] best 1152141 combination zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] +Uplifting [init_font_hex] best 1151871 combination zp ZP_BYTE:27 [ init_font_hex::c#6 init_font_hex::c#1 ] Coalescing zero page register with common assignment [ zp ZP_WORD:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:18 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:42 [ atan2_16::x#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:40 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:44 [ atan2_16::y#0 ] ] - score: 1 @@ -3175,8 +3154,10 @@ main: { lda #>CHARSET sta clear_char+1 jmp b1 - // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + // [9] phi from main::@3 main::@4 to main::@1 [phi:main::@3/main::@4->main::@1] b1_from_b3: + b1_from_b4: + // [9] phi (byte*) main::clear_char#5 = (byte*) main::clear_char#5 [phi:main::@3/main::@4->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -3211,10 +3192,7 @@ main: { bne !+ inc clear_char+1 !: - // [9] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [9] phi (byte*) main::clear_char#5 = (byte*) main::clear_char#1 [phi:main::@4->main::@1#0] -- register_copy - jmp b1 + jmp b1_from_b4 } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. @@ -3906,7 +3884,7 @@ Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1 with b2 Replacing label b1_from_b3 with b2 Replacing label b1_from_b3 with b2 -Replacing label b1 with b2 +Replacing label b1_from_b4 with b2 Replacing label b2_from_b4 with b2 Replacing label b1_from_b3 with b1 Replacing label b7_from_b12 with b7 @@ -3927,6 +3905,7 @@ Removing instruction bend_from_b1: Removing instruction toD0181_from_main: Removing instruction toD0181: Removing instruction b1_from_b3: +Removing instruction b1_from_b4: Removing instruction b1: Removing instruction b1_from_b3: Removing instruction b2_from_b1: @@ -3961,7 +3940,6 @@ Removing instruction init_angle_screen_from_b5: Removing instruction b1_from_b5: Removing instruction b3: Removing instruction b4: -Removing instruction b1_from_b4: Removing instruction b1_from_init_angle_screen: Removing instruction b4: Removing instruction b3: @@ -4171,7 +4149,7 @@ FINAL SYMBOL TABLE (label) main::@5 (byte*) main::clear_char (byte*) main::clear_char#1 clear_char zp ZP_WORD:2 22.0 -(byte*) main::clear_char#5 clear_char zp ZP_WORD:2 33.5 +(byte*) main::clear_char#5 clear_char zp ZP_WORD:2 84.0 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 @@ -4225,7 +4203,7 @@ reg byte y [ init_font_hex::idx#3 ] FINAL ASSEMBLER -Score: 1056679 +Score: 1056409 // File Comments // Find atan2(x, y) using the CORDIC method @@ -4273,7 +4251,8 @@ main: { sta clear_char lda #>CHARSET sta clear_char+1 - // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + // [9] phi from main::@3 main::@4 to main::@1 [phi:main::@3/main::@4->main::@1] + // [9] phi (byte*) main::clear_char#5 = (byte*) main::clear_char#5 [phi:main::@3/main::@4->main::@1#0] -- register_copy // main::@1 // main::@2 b2: @@ -4305,8 +4284,6 @@ main: { bne !+ inc clear_char+1 !: - // [9] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [9] phi (byte*) main::clear_char#5 = (byte*) main::clear_char#1 [phi:main::@4->main::@1#0] -- register_copy jmp b2 } // init_angle_screen diff --git a/src/test/ref/cordic-atan2-clear.sym b/src/test/ref/cordic-atan2-clear.sym index c79d95a9b..a8d91d6f4 100644 --- a/src/test/ref/cordic-atan2-clear.sym +++ b/src/test/ref/cordic-atan2-clear.sym @@ -172,7 +172,7 @@ (label) main::@5 (byte*) main::clear_char (byte*) main::clear_char#1 clear_char zp ZP_WORD:2 22.0 -(byte*) main::clear_char#5 clear_char zp ZP_WORD:2 33.5 +(byte*) main::clear_char#5 clear_char zp ZP_WORD:2 84.0 (label) main::toD0181 (word~) main::toD0181_$0 (number~) main::toD0181_$1 diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index 31ae6f833..28b992c8c 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -892,16 +892,6 @@ Successful SSA optimization Pass2AliasElimination Alias (signed byte) atan2_8::x#11 = (signed byte) atan2_8::x#4 Alias (signed byte) atan2_8::y#10 = (signed byte) atan2_8::y#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 -Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 -Self Phi Eliminated (byte*) init_font_hex::charset#3 -Self Phi Eliminated (byte) init_font_hex::c1#2 -Self Phi Eliminated (byte) init_font_hex::c#2 -Self Phi Eliminated (signed byte) atan2_8::x#11 -Self Phi Eliminated (signed byte) atan2_8::y#10 -Self Phi Eliminated (signed byte) main::y#2 -Self Phi Eliminated (byte*) main::col00#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 @@ -915,6 +905,9 @@ Identical Phi Values (signed byte) atan2_8::y#10 (signed byte) atan2_8::y#1 Identical Phi Values (signed byte) main::y#2 (signed byte) main::y#4 Identical Phi Values (byte*) main::col00#1 (byte*) main::col00#0 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) init_font_hex::$3 [19] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 Simple Condition (bool~) init_font_hex::$4 [29] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 Simple Condition (bool~) init_font_hex::$5 [34] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 @@ -965,7 +958,7 @@ Resolved ranged next value [17] init_font_hex::i#1 ← ++ init_font_hex::i#2 to Resolved ranged comparison value [19] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 Resolved ranged next value [27] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ Resolved ranged comparison value [29] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 -Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged next value [32] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++ Resolved ranged comparison value [34] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 Resolved ranged next value [143] main::x#1 ← ++ main::x#2 to ++ Resolved ranged comparison value [145] if(main::x#1!=rangelast(-$13,$14)) goto main::@2 to (number) $15 @@ -999,12 +992,6 @@ Finalized unsigned number type (byte) $10 Finalized signed number type (signed byte) $15 Finalized signed number type (signed byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 -Self Phi Eliminated (byte) init_font_hex::c#5 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 -Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [29] (byte~) atan2_8::$17 ← (const byte) CORDIC_ITERATIONS_8#0 - (byte) 1 Constant right-side identified [77] (byte*~) main::$2 ← (const byte*) COLS#0 + (word)(number) $c*(number) $28 diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index 352d65d5e..0e035b163 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -217,11 +217,6 @@ Alias (byte*) main::screen#1 = (byte*) main::screen#4 Alias (byte) main::x#2 = (byte) main::x#3 Alias (byte) main::ch#1 = (byte) main::ch#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte) main::x#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/euclid-problem-2.asm b/src/test/ref/euclid-problem-2.asm new file mode 100644 index 000000000..52d6baff0 --- /dev/null +++ b/src/test/ref/euclid-problem-2.asm @@ -0,0 +1,57 @@ +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + ldx #2 + lda #$80 + sta euclid.a + jsr euclid + lda euclid.a + sta SCREEN + ldx #$45 + lda #$a9 + sta euclid.a + jsr euclid + lda euclid.a + sta SCREEN+1 + ldx #$9b + lda #$ff + sta euclid.a + jsr euclid + lda euclid.a + sta SCREEN+2 + ldx #3 + lda #$63 + sta euclid.a + jsr euclid + lda euclid.a + sta SCREEN+3 + rts +} +// Calculate least common denominator using euclids subtraction method +// euclid(byte zeropage(2) a, byte register(X) b) +euclid: { + .label a = 2 + b1: + cpx a + bne b2 + rts + b2: + cpx a + bcc b3 + txa + sec + sbc a + tax + jmp b1 + b3: + txa + eor #$ff + sec + adc a + sta a + jmp b1 +} diff --git a/src/test/ref/euclid-problem-2.cfg b/src/test/ref/euclid-problem-2.cfg new file mode 100644 index 000000000..52582cdbe --- /dev/null +++ b/src/test/ref/euclid-problem-2.cfg @@ -0,0 +1,60 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + [5] call euclid + [6] (byte) euclid::return#0 ← (byte) euclid::a#5 + to:main::@1 +main::@1: scope:[main] from main + [7] (byte~) main::$0 ← (byte) euclid::return#0 + [8] *((const byte*) SCREEN#0) ← (byte~) main::$0 + [9] call euclid + [10] (byte) euclid::return#1 ← (byte) euclid::a#5 + to:main::@2 +main::@2: scope:[main] from main::@1 + [11] (byte~) main::$1 ← (byte) euclid::return#1 + [12] *((const byte*) SCREEN#0+(byte) 1) ← (byte~) main::$1 + [13] call euclid + [14] (byte) euclid::return#2 ← (byte) euclid::a#5 + to:main::@3 +main::@3: scope:[main] from main::@2 + [15] (byte~) main::$2 ← (byte) euclid::return#2 + [16] *((const byte*) SCREEN#0+(byte) 2) ← (byte~) main::$2 + [17] call euclid + [18] (byte) euclid::return#3 ← (byte) euclid::a#5 + to:main::@4 +main::@4: scope:[main] from main::@3 + [19] (byte~) main::$3 ← (byte) euclid::return#3 + [20] *((const byte*) SCREEN#0+(byte) 3) ← (byte~) main::$3 + to:main::@return +main::@return: scope:[main] from main::@4 + [21] return + to:@return +euclid: scope:[euclid] from main main::@1 main::@2 main::@3 + [22] (byte) euclid::b#9 ← phi( main/(byte) 2 main::@1/(byte) $45 main::@2/(byte) $9b main::@3/(byte) 3 ) + [22] (byte) euclid::a#10 ← phi( main/(byte) $80 main::@1/(byte) $a9 main::@2/(byte) $ff main::@3/(byte) $63 ) + to:euclid::@1 +euclid::@1: scope:[euclid] from euclid euclid::@3 euclid::@4 + [23] (byte) euclid::b#5 ← phi( euclid/(byte) euclid::b#9 euclid::@3/(byte) euclid::b#5 euclid::@4/(byte) euclid::b#4 ) + [23] (byte) euclid::a#5 ← phi( euclid/(byte) euclid::a#10 euclid::@3/(byte) euclid::a#4 euclid::@4/(byte) euclid::a#5 ) + [24] if((byte) euclid::a#5!=(byte) euclid::b#5) goto euclid::@2 + to:euclid::@return +euclid::@return: scope:[euclid] from euclid::@1 + [25] return + to:@return +euclid::@2: scope:[euclid] from euclid::@1 + [26] if((byte) euclid::a#5>(byte) euclid::b#5) goto euclid::@3 + to:euclid::@4 +euclid::@4: scope:[euclid] from euclid::@2 + [27] (byte) euclid::b#4 ← (byte) euclid::b#5 - (byte) euclid::a#5 + to:euclid::@1 +euclid::@3: scope:[euclid] from euclid::@2 + [28] (byte) euclid::a#4 ← (byte) euclid::a#5 - (byte) euclid::b#5 + to:euclid::@1 diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log new file mode 100644 index 000000000..32268805a --- /dev/null +++ b/src/test/ref/euclid-problem-2.log @@ -0,0 +1,1060 @@ +Culled Empty Block (label) @1 +Culled Empty Block (label) euclid::@6 +Culled Empty Block (label) euclid::@7 +Culled Empty Block (label) euclid::@5 +Culled Empty Block (label) euclid::@9 +Culled Empty Block (label) euclid::@10 +Culled Empty Block (label) euclid::@11 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + (byte) idx#0 ← (number) 0 + to:@2 +main: scope:[main] from @2 + (byte) idx#13 ← phi( @2/(byte) idx#14 ) + (byte) euclid::a#0 ← (number) $80 + (byte) euclid::b#0 ← (number) 2 + call euclid + (byte) euclid::return#0 ← (byte) euclid::return#5 + to:main::@1 +main::@1: scope:[main] from main + (byte) idx#7 ← phi( main/(byte) idx#13 ) + (byte) euclid::return#6 ← phi( main/(byte) euclid::return#0 ) + (byte~) main::$0 ← (byte) euclid::return#6 + *((byte*) SCREEN#0 + (byte) idx#7) ← (byte~) main::$0 + (byte) idx#1 ← ++ (byte) idx#7 + (byte) euclid::a#1 ← (number) $a9 + (byte) euclid::b#1 ← (number) $45 + call euclid + (byte) euclid::return#1 ← (byte) euclid::return#5 + to:main::@2 +main::@2: scope:[main] from main::@1 + (byte) idx#8 ← phi( main::@1/(byte) idx#1 ) + (byte) euclid::return#7 ← phi( main::@1/(byte) euclid::return#1 ) + (byte~) main::$1 ← (byte) euclid::return#7 + *((byte*) SCREEN#0 + (byte) idx#8) ← (byte~) main::$1 + (byte) idx#2 ← ++ (byte) idx#8 + (byte) euclid::a#2 ← (number) $ff + (byte) euclid::b#2 ← (number) $9b + call euclid + (byte) euclid::return#2 ← (byte) euclid::return#5 + to:main::@3 +main::@3: scope:[main] from main::@2 + (byte) idx#9 ← phi( main::@2/(byte) idx#2 ) + (byte) euclid::return#8 ← phi( main::@2/(byte) euclid::return#2 ) + (byte~) main::$2 ← (byte) euclid::return#8 + *((byte*) SCREEN#0 + (byte) idx#9) ← (byte~) main::$2 + (byte) idx#3 ← ++ (byte) idx#9 + (byte) euclid::a#3 ← (number) $63 + (byte) euclid::b#3 ← (number) 3 + call euclid + (byte) euclid::return#3 ← (byte) euclid::return#5 + to:main::@4 +main::@4: scope:[main] from main::@3 + (byte) idx#10 ← phi( main::@3/(byte) idx#3 ) + (byte) euclid::return#9 ← phi( main::@3/(byte) euclid::return#3 ) + (byte~) main::$3 ← (byte) euclid::return#9 + *((byte*) SCREEN#0 + (byte) idx#10) ← (byte~) main::$3 + (byte) idx#4 ← ++ (byte) idx#10 + to:main::@return +main::@return: scope:[main] from main::@4 + (byte) idx#11 ← phi( main::@4/(byte) idx#4 ) + (byte) idx#5 ← (byte) idx#11 + return + to:@return +euclid: scope:[euclid] from main main::@1 main::@2 main::@3 + (byte) euclid::b#9 ← phi( main/(byte) euclid::b#0 main::@1/(byte) euclid::b#1 main::@2/(byte) euclid::b#2 main::@3/(byte) euclid::b#3 ) + (byte) euclid::a#10 ← phi( main/(byte) euclid::a#0 main::@1/(byte) euclid::a#1 main::@2/(byte) euclid::a#2 main::@3/(byte) euclid::a#3 ) + to:euclid::@1 +euclid::@1: scope:[euclid] from euclid euclid::@4 euclid::@8 + (byte) euclid::b#5 ← phi( euclid/(byte) euclid::b#9 euclid::@4/(byte) euclid::b#7 euclid::@8/(byte) euclid::b#4 ) + (byte) euclid::a#5 ← phi( euclid/(byte) euclid::a#10 euclid::@4/(byte) euclid::a#4 euclid::@8/(byte) euclid::a#9 ) + (bool~) euclid::$0 ← (byte) euclid::a#5 != (byte) euclid::b#5 + if((bool~) euclid::$0) goto euclid::@2 + to:euclid::@3 +euclid::@2: scope:[euclid] from euclid::@1 + (byte) euclid::b#6 ← phi( euclid::@1/(byte) euclid::b#5 ) + (byte) euclid::a#6 ← phi( euclid::@1/(byte) euclid::a#5 ) + (bool~) euclid::$1 ← (byte) euclid::a#6 > (byte) euclid::b#6 + if((bool~) euclid::$1) goto euclid::@4 + to:euclid::@8 +euclid::@3: scope:[euclid] from euclid::@1 + (byte) euclid::a#7 ← phi( euclid::@1/(byte) euclid::a#5 ) + (byte) euclid::return#4 ← (byte) euclid::a#7 + to:euclid::@return +euclid::@4: scope:[euclid] from euclid::@2 + (byte) euclid::b#7 ← phi( euclid::@2/(byte) euclid::b#6 ) + (byte) euclid::a#8 ← phi( euclid::@2/(byte) euclid::a#6 ) + (byte~) euclid::$3 ← (byte) euclid::a#8 - (byte) euclid::b#7 + (byte) euclid::a#4 ← (byte~) euclid::$3 + to:euclid::@1 +euclid::@8: scope:[euclid] from euclid::@2 + (byte) euclid::a#9 ← phi( euclid::@2/(byte) euclid::a#6 ) + (byte) euclid::b#8 ← phi( euclid::@2/(byte) euclid::b#6 ) + (byte~) euclid::$2 ← (byte) euclid::b#8 - (byte) euclid::a#9 + (byte) euclid::b#4 ← (byte~) euclid::$2 + to:euclid::@1 +euclid::@return: scope:[euclid] from euclid::@3 + (byte) euclid::return#10 ← phi( euclid::@3/(byte) euclid::return#4 ) + (byte) euclid::return#5 ← (byte) euclid::return#10 + return + to:@return +@2: scope:[] from @begin + (byte) idx#14 ← phi( @begin/(byte) idx#0 ) + call main + to:@3 +@3: scope:[] from @2 + (byte) idx#12 ← phi( @2/(byte) idx#5 ) + (byte) idx#6 ← (byte) idx#12 + to:@end +@end: scope:[] from @3 + +SYMBOL TABLE SSA +(label) @2 +(label) @3 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(byte()) euclid((byte) euclid::a , (byte) euclid::b) +(bool~) euclid::$0 +(bool~) euclid::$1 +(byte~) euclid::$2 +(byte~) euclid::$3 +(label) euclid::@1 +(label) euclid::@2 +(label) euclid::@3 +(label) euclid::@4 +(label) euclid::@8 +(label) euclid::@return +(byte) euclid::a +(byte) euclid::a#0 +(byte) euclid::a#1 +(byte) euclid::a#10 +(byte) euclid::a#2 +(byte) euclid::a#3 +(byte) euclid::a#4 +(byte) euclid::a#5 +(byte) euclid::a#6 +(byte) euclid::a#7 +(byte) euclid::a#8 +(byte) euclid::a#9 +(byte) euclid::b +(byte) euclid::b#0 +(byte) euclid::b#1 +(byte) euclid::b#2 +(byte) euclid::b#3 +(byte) euclid::b#4 +(byte) euclid::b#5 +(byte) euclid::b#6 +(byte) euclid::b#7 +(byte) euclid::b#8 +(byte) euclid::b#9 +(byte) euclid::return +(byte) euclid::return#0 +(byte) euclid::return#1 +(byte) euclid::return#10 +(byte) euclid::return#2 +(byte) euclid::return#3 +(byte) euclid::return#4 +(byte) euclid::return#5 +(byte) euclid::return#6 +(byte) euclid::return#7 +(byte) euclid::return#8 +(byte) euclid::return#9 +(byte) idx +(byte) idx#0 +(byte) idx#1 +(byte) idx#10 +(byte) idx#11 +(byte) idx#12 +(byte) idx#13 +(byte) idx#14 +(byte) idx#2 +(byte) idx#3 +(byte) idx#4 +(byte) idx#5 +(byte) idx#6 +(byte) idx#7 +(byte) idx#8 +(byte) idx#9 +(void()) main() +(byte~) main::$0 +(byte~) main::$1 +(byte~) main::$2 +(byte~) main::$3 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return + +Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 +Adding number conversion cast (unumber) $80 in (byte) euclid::a#0 ← (number) $80 +Adding number conversion cast (unumber) 2 in (byte) euclid::b#0 ← (number) 2 +Adding number conversion cast (unumber) $a9 in (byte) euclid::a#1 ← (number) $a9 +Adding number conversion cast (unumber) $45 in (byte) euclid::b#1 ← (number) $45 +Adding number conversion cast (unumber) $ff in (byte) euclid::a#2 ← (number) $ff +Adding number conversion cast (unumber) $9b in (byte) euclid::b#2 ← (number) $9b +Adding number conversion cast (unumber) $63 in (byte) euclid::a#3 ← (number) $63 +Adding number conversion cast (unumber) 3 in (byte) euclid::b#3 ← (number) 3 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Inlining cast (byte) idx#0 ← (unumber)(number) 0 +Inlining cast (byte) euclid::a#0 ← (unumber)(number) $80 +Inlining cast (byte) euclid::b#0 ← (unumber)(number) 2 +Inlining cast (byte) euclid::a#1 ← (unumber)(number) $a9 +Inlining cast (byte) euclid::b#1 ← (unumber)(number) $45 +Inlining cast (byte) euclid::a#2 ← (unumber)(number) $ff +Inlining cast (byte) euclid::b#2 ← (unumber)(number) $9b +Inlining cast (byte) euclid::a#3 ← (unumber)(number) $63 +Inlining cast (byte) euclid::b#3 ← (unumber)(number) 3 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast $80 +Simplifying constant integer cast 2 +Simplifying constant integer cast $a9 +Simplifying constant integer cast $45 +Simplifying constant integer cast $ff +Simplifying constant integer cast $9b +Simplifying constant integer cast $63 +Simplifying constant integer cast 3 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $80 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) $a9 +Finalized unsigned number type (byte) $45 +Finalized unsigned number type (byte) $ff +Finalized unsigned number type (byte) $9b +Finalized unsigned number type (byte) $63 +Finalized unsigned number type (byte) 3 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) euclid::return#0 = (byte) euclid::return#6 +Alias (byte) idx#13 = (byte) idx#7 +Alias (byte) euclid::return#1 = (byte) euclid::return#7 +Alias (byte) idx#1 = (byte) idx#8 +Alias (byte) euclid::return#2 = (byte) euclid::return#8 +Alias (byte) idx#2 = (byte) idx#9 +Alias (byte) euclid::return#3 = (byte) euclid::return#9 +Alias (byte) idx#10 = (byte) idx#3 +Alias (byte) idx#11 = (byte) idx#4 (byte) idx#5 +Alias (byte) euclid::a#5 = (byte) euclid::a#6 (byte) euclid::a#7 (byte) euclid::return#4 (byte) euclid::a#8 (byte) euclid::a#9 (byte) euclid::return#10 (byte) euclid::return#5 +Alias (byte) euclid::b#5 = (byte) euclid::b#6 (byte) euclid::b#7 (byte) euclid::b#8 +Alias (byte) euclid::a#4 = (byte~) euclid::$3 +Alias (byte) euclid::b#4 = (byte~) euclid::$2 +Alias (byte) idx#0 = (byte) idx#14 +Alias (byte) idx#12 = (byte) idx#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) idx#13 (byte) idx#0 +Identical Phi Values (byte) idx#12 (byte) idx#11 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) euclid::$0 [41] if((byte) euclid::a#5!=(byte) euclid::b#5) goto euclid::@2 +Simple Condition (bool~) euclid::$1 [44] if((byte) euclid::a#5>(byte) euclid::b#5) goto euclid::@4 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) idx#0 = 0 +Constant (const byte) euclid::a#0 = $80 +Constant (const byte) euclid::b#0 = 2 +Constant (const byte) euclid::a#1 = $a9 +Constant (const byte) euclid::b#1 = $45 +Constant (const byte) euclid::a#2 = $ff +Constant (const byte) euclid::b#2 = $9b +Constant (const byte) euclid::a#3 = $63 +Constant (const byte) euclid::b#3 = 3 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN#0 in [9] *((const byte*) SCREEN#0 + (const byte) idx#0) ← (byte~) main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable (byte) idx#11 and assignment [19] (byte) idx#11 ← ++ (byte) idx#10 +Successful SSA optimization PassNEliminateUnusedVars +Constant right-side identified [4] (byte) idx#1 ← ++ (const byte) idx#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) idx#1 = ++idx#0 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [8] (byte) idx#2 ← ++ (const byte) idx#1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) idx#2 = ++idx#1 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [12] (byte) idx#10 ← ++ (const byte) idx#2 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) idx#10 = ++idx#2 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const byte) euclid::a#0 +Inlining constant with var siblings (const byte) euclid::b#0 +Inlining constant with var siblings (const byte) euclid::a#1 +Inlining constant with var siblings (const byte) euclid::b#1 +Inlining constant with var siblings (const byte) euclid::a#2 +Inlining constant with var siblings (const byte) euclid::b#2 +Inlining constant with var siblings (const byte) euclid::a#3 +Inlining constant with var siblings (const byte) euclid::b#3 +Inlining constant with different constant siblings (const byte) idx#0 +Inlining constant with different constant siblings (const byte) idx#1 +Inlining constant with different constant siblings (const byte) idx#2 +Inlining constant with different constant siblings (const byte) idx#10 +Constant inlined idx#10 = ++++++(byte) 0 +Constant inlined euclid::b#0 = (byte) 2 +Constant inlined euclid::a#1 = (byte) $a9 +Constant inlined idx#2 = ++++(byte) 0 +Constant inlined euclid::a#0 = (byte) $80 +Constant inlined euclid::b#2 = (byte) $9b +Constant inlined euclid::a#3 = (byte) $63 +Constant inlined idx#0 = (byte) 0 +Constant inlined euclid::b#1 = (byte) $45 +Constant inlined euclid::a#2 = (byte) $ff +Constant inlined idx#1 = ++(byte) 0 +Constant inlined euclid::b#3 = (byte) 3 +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN#0+++0) +Consolidated array index constant in *(SCREEN#0+++++0) +Consolidated array index constant in *(SCREEN#0+++++++0) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++0 +Simplifying constant integer increment ++0 +Simplifying constant integer increment ++1 +Successful SSA optimization Pass2ConstantSimplification +Simplifying constant integer increment ++1 +Simplifying constant integer increment ++2 +Successful SSA optimization Pass2ConstantSimplification +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @2 +Adding NOP phi() at start of @3 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of euclid::@3 +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to euclid:6 euclid:10 euclid:14 euclid:18 + +Created 4 initial phi equivalence classes +Coalesced [24] euclid::a#11 ← euclid::a#10 +Coalesced [25] euclid::b#10 ← euclid::b#9 +Coalesced (already) [32] euclid::a#13 ← euclid::a#5 +Coalesced [33] euclid::b#12 ← euclid::b#4 +Coalesced [35] euclid::a#12 ← euclid::a#4 +Coalesced (already) [36] euclid::b#11 ← euclid::b#5 +Coalesced down to 2 phi equivalence classes +Culled Empty Block (label) @3 +Culled Empty Block (label) euclid::@3 +Renumbering block @2 to @1 +Renumbering block euclid::@4 to euclid::@3 +Renumbering block euclid::@8 to euclid::@4 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + [5] call euclid + [6] (byte) euclid::return#0 ← (byte) euclid::a#5 + to:main::@1 +main::@1: scope:[main] from main + [7] (byte~) main::$0 ← (byte) euclid::return#0 + [8] *((const byte*) SCREEN#0) ← (byte~) main::$0 + [9] call euclid + [10] (byte) euclid::return#1 ← (byte) euclid::a#5 + to:main::@2 +main::@2: scope:[main] from main::@1 + [11] (byte~) main::$1 ← (byte) euclid::return#1 + [12] *((const byte*) SCREEN#0+(byte) 1) ← (byte~) main::$1 + [13] call euclid + [14] (byte) euclid::return#2 ← (byte) euclid::a#5 + to:main::@3 +main::@3: scope:[main] from main::@2 + [15] (byte~) main::$2 ← (byte) euclid::return#2 + [16] *((const byte*) SCREEN#0+(byte) 2) ← (byte~) main::$2 + [17] call euclid + [18] (byte) euclid::return#3 ← (byte) euclid::a#5 + to:main::@4 +main::@4: scope:[main] from main::@3 + [19] (byte~) main::$3 ← (byte) euclid::return#3 + [20] *((const byte*) SCREEN#0+(byte) 3) ← (byte~) main::$3 + to:main::@return +main::@return: scope:[main] from main::@4 + [21] return + to:@return +euclid: scope:[euclid] from main main::@1 main::@2 main::@3 + [22] (byte) euclid::b#9 ← phi( main/(byte) 2 main::@1/(byte) $45 main::@2/(byte) $9b main::@3/(byte) 3 ) + [22] (byte) euclid::a#10 ← phi( main/(byte) $80 main::@1/(byte) $a9 main::@2/(byte) $ff main::@3/(byte) $63 ) + to:euclid::@1 +euclid::@1: scope:[euclid] from euclid euclid::@3 euclid::@4 + [23] (byte) euclid::b#5 ← phi( euclid/(byte) euclid::b#9 euclid::@3/(byte) euclid::b#5 euclid::@4/(byte) euclid::b#4 ) + [23] (byte) euclid::a#5 ← phi( euclid/(byte) euclid::a#10 euclid::@3/(byte) euclid::a#4 euclid::@4/(byte) euclid::a#5 ) + [24] if((byte) euclid::a#5!=(byte) euclid::b#5) goto euclid::@2 + to:euclid::@return +euclid::@return: scope:[euclid] from euclid::@1 + [25] return + to:@return +euclid::@2: scope:[euclid] from euclid::@1 + [26] if((byte) euclid::a#5>(byte) euclid::b#5) goto euclid::@3 + to:euclid::@4 +euclid::@4: scope:[euclid] from euclid::@2 + [27] (byte) euclid::b#4 ← (byte) euclid::b#5 - (byte) euclid::a#5 + to:euclid::@1 +euclid::@3: scope:[euclid] from euclid::@2 + [28] (byte) euclid::a#4 ← (byte) euclid::a#5 - (byte) euclid::b#5 + to:euclid::@1 + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(byte()) euclid((byte) euclid::a , (byte) euclid::b) +(byte) euclid::a +(byte) euclid::a#10 2.0 +(byte) euclid::a#4 22.0 +(byte) euclid::a#5 9.666666666666668 +(byte) euclid::b +(byte) euclid::b#4 22.0 +(byte) euclid::b#5 19.75 +(byte) euclid::b#9 2.0 +(byte) euclid::return +(byte) euclid::return#0 4.0 +(byte) euclid::return#1 4.0 +(byte) euclid::return#2 4.0 +(byte) euclid::return#3 4.0 +(byte) idx +(void()) main() +(byte~) main::$0 4.0 +(byte~) main::$1 4.0 +(byte~) main::$2 4.0 +(byte~) main::$3 4.0 + +Initial phi equivalence classes +[ euclid::a#5 euclid::a#10 euclid::a#4 ] +[ euclid::b#5 euclid::b#9 euclid::b#4 ] +Added variable euclid::return#0 to zero page equivalence class [ euclid::return#0 ] +Added variable main::$0 to zero page equivalence class [ main::$0 ] +Added variable euclid::return#1 to zero page equivalence class [ euclid::return#1 ] +Added variable main::$1 to zero page equivalence class [ main::$1 ] +Added variable euclid::return#2 to zero page equivalence class [ euclid::return#2 ] +Added variable main::$2 to zero page equivalence class [ main::$2 ] +Added variable euclid::return#3 to zero page equivalence class [ euclid::return#3 ] +Added variable main::$3 to zero page equivalence class [ main::$3 ] +Complete equivalence classes +[ euclid::a#5 euclid::a#10 euclid::a#4 ] +[ euclid::b#5 euclid::b#9 euclid::b#4 ] +[ euclid::return#0 ] +[ main::$0 ] +[ euclid::return#1 ] +[ main::$1 ] +[ euclid::return#2 ] +[ main::$2 ] +[ euclid::return#3 ] +[ main::$3 ] +Allocated zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] +Allocated zp ZP_BYTE:3 [ euclid::b#5 euclid::b#9 euclid::b#4 ] +Allocated zp ZP_BYTE:4 [ euclid::return#0 ] +Allocated zp ZP_BYTE:5 [ main::$0 ] +Allocated zp ZP_BYTE:6 [ euclid::return#1 ] +Allocated zp ZP_BYTE:7 [ main::$1 ] +Allocated zp ZP_BYTE:8 [ euclid::return#2 ] +Allocated zp ZP_BYTE:9 [ main::$2 ] +Allocated zp ZP_BYTE:10 [ euclid::return#3 ] +Allocated zp ZP_BYTE:11 [ main::$3 ] + +INITIAL ASM + // File Comments +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + .label _0 = 5 + .label _1 = 7 + .label _2 = 9 + .label _3 = $b + // [5] call euclid + // [22] phi from main to euclid [phi:main->euclid] + euclid_from_main: + // [22] phi (byte) euclid::b#9 = (byte) 2 [phi:main->euclid#0] -- vbuz1=vbuc1 + lda #2 + sta euclid.b + // [22] phi (byte) euclid::a#10 = (byte) $80 [phi:main->euclid#1] -- vbuz1=vbuc1 + lda #$80 + sta euclid.a + jsr euclid + // [6] (byte) euclid::return#0 ← (byte) euclid::a#5 -- vbuz1=vbuz2 + lda euclid.a + sta euclid.return + jmp b1 + // main::@1 + b1: + // [7] (byte~) main::$0 ← (byte) euclid::return#0 -- vbuz1=vbuz2 + lda euclid.return + sta _0 + // [8] *((const byte*) SCREEN#0) ← (byte~) main::$0 -- _deref_pbuc1=vbuz1 + lda _0 + sta SCREEN + // [9] call euclid + // [22] phi from main::@1 to euclid [phi:main::@1->euclid] + euclid_from_b1: + // [22] phi (byte) euclid::b#9 = (byte) $45 [phi:main::@1->euclid#0] -- vbuz1=vbuc1 + lda #$45 + sta euclid.b + // [22] phi (byte) euclid::a#10 = (byte) $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 + lda #$a9 + sta euclid.a + jsr euclid + // [10] (byte) euclid::return#1 ← (byte) euclid::a#5 -- vbuz1=vbuz2 + lda euclid.a + sta euclid.return_1 + jmp b2 + // main::@2 + b2: + // [11] (byte~) main::$1 ← (byte) euclid::return#1 -- vbuz1=vbuz2 + lda euclid.return_1 + sta _1 + // [12] *((const byte*) SCREEN#0+(byte) 1) ← (byte~) main::$1 -- _deref_pbuc1=vbuz1 + lda _1 + sta SCREEN+1 + // [13] call euclid + // [22] phi from main::@2 to euclid [phi:main::@2->euclid] + euclid_from_b2: + // [22] phi (byte) euclid::b#9 = (byte) $9b [phi:main::@2->euclid#0] -- vbuz1=vbuc1 + lda #$9b + sta euclid.b + // [22] phi (byte) euclid::a#10 = (byte) $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 + lda #$ff + sta euclid.a + jsr euclid + // [14] (byte) euclid::return#2 ← (byte) euclid::a#5 -- vbuz1=vbuz2 + lda euclid.a + sta euclid.return_2 + jmp b3 + // main::@3 + b3: + // [15] (byte~) main::$2 ← (byte) euclid::return#2 -- vbuz1=vbuz2 + lda euclid.return_2 + sta _2 + // [16] *((const byte*) SCREEN#0+(byte) 2) ← (byte~) main::$2 -- _deref_pbuc1=vbuz1 + lda _2 + sta SCREEN+2 + // [17] call euclid + // [22] phi from main::@3 to euclid [phi:main::@3->euclid] + euclid_from_b3: + // [22] phi (byte) euclid::b#9 = (byte) 3 [phi:main::@3->euclid#0] -- vbuz1=vbuc1 + lda #3 + sta euclid.b + // [22] phi (byte) euclid::a#10 = (byte) $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 + lda #$63 + sta euclid.a + jsr euclid + // [18] (byte) euclid::return#3 ← (byte) euclid::a#5 -- vbuz1=vbuz2 + lda euclid.a + sta euclid.return_3 + jmp b4 + // main::@4 + b4: + // [19] (byte~) main::$3 ← (byte) euclid::return#3 -- vbuz1=vbuz2 + lda euclid.return_3 + sta _3 + // [20] *((const byte*) SCREEN#0+(byte) 3) ← (byte~) main::$3 -- _deref_pbuc1=vbuz1 + lda _3 + sta SCREEN+3 + jmp breturn + // main::@return + breturn: + // [21] return + rts +} + // euclid +// Calculate least common denominator using euclids subtraction method +// euclid(byte zeropage(2) a, byte zeropage(3) b) +euclid: { + .label return = 4 + .label return_1 = 6 + .label return_2 = 8 + .label return_3 = $a + .label a = 2 + .label b = 3 + // [23] phi from euclid euclid::@3 euclid::@4 to euclid::@1 [phi:euclid/euclid::@3/euclid::@4->euclid::@1] + b1_from_euclid: + b1_from_b3: + b1_from_b4: + // [23] phi (byte) euclid::b#5 = (byte) euclid::b#9 [phi:euclid/euclid::@3/euclid::@4->euclid::@1#0] -- register_copy + // [23] phi (byte) euclid::a#5 = (byte) euclid::a#10 [phi:euclid/euclid::@3/euclid::@4->euclid::@1#1] -- register_copy + jmp b1 + // euclid::@1 + b1: + // [24] if((byte) euclid::a#5!=(byte) euclid::b#5) goto euclid::@2 -- vbuz1_neq_vbuz2_then_la1 + lda a + cmp b + bne b2 + jmp breturn + // euclid::@return + breturn: + // [25] return + rts + // euclid::@2 + b2: + // [26] if((byte) euclid::a#5>(byte) euclid::b#5) goto euclid::@3 -- vbuz1_gt_vbuz2_then_la1 + lda b + cmp a + bcc b3 + jmp b4 + // euclid::@4 + b4: + // [27] (byte) euclid::b#4 ← (byte) euclid::b#5 - (byte) euclid::a#5 -- vbuz1=vbuz1_minus_vbuz2 + lda b + sec + sbc a + sta b + jmp b1_from_b4 + // euclid::@3 + b3: + // [28] (byte) euclid::a#4 ← (byte) euclid::a#5 - (byte) euclid::b#5 -- vbuz1=vbuz1_minus_vbuz2 + lda a + sec + sbc b + sta a + jmp b1_from_b3 +} + // File Data + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [27] (byte) euclid::b#4 ← (byte) euclid::b#5 - (byte) euclid::a#5 [ euclid::a#5 euclid::b#4 ] ( main:2::euclid:5 [ euclid::a#5 euclid::b#4 ] main:2::euclid:9 [ euclid::a#5 euclid::b#4 ] main:2::euclid:13 [ euclid::a#5 euclid::b#4 ] main:2::euclid:17 [ euclid::a#5 euclid::b#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] +Statement [28] (byte) euclid::a#4 ← (byte) euclid::a#5 - (byte) euclid::b#5 [ euclid::b#5 euclid::a#4 ] ( main:2::euclid:5 [ euclid::b#5 euclid::a#4 ] main:2::euclid:9 [ euclid::b#5 euclid::a#4 ] main:2::euclid:13 [ euclid::b#5 euclid::a#4 ] main:2::euclid:17 [ euclid::b#5 euclid::a#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ euclid::b#5 euclid::b#9 euclid::b#4 ] +Statement [27] (byte) euclid::b#4 ← (byte) euclid::b#5 - (byte) euclid::a#5 [ euclid::a#5 euclid::b#4 ] ( main:2::euclid:5 [ euclid::a#5 euclid::b#4 ] main:2::euclid:9 [ euclid::a#5 euclid::b#4 ] main:2::euclid:13 [ euclid::a#5 euclid::b#4 ] main:2::euclid:17 [ euclid::a#5 euclid::b#4 ] ) always clobbers reg byte a +Statement [28] (byte) euclid::a#4 ← (byte) euclid::a#5 - (byte) euclid::b#5 [ euclid::b#5 euclid::a#4 ] ( main:2::euclid:5 [ euclid::b#5 euclid::a#4 ] main:2::euclid:9 [ euclid::b#5 euclid::a#4 ] main:2::euclid:13 [ euclid::b#5 euclid::a#4 ] main:2::euclid:17 [ euclid::b#5 euclid::a#4 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ euclid::b#5 euclid::b#9 euclid::b#4 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ euclid::return#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ main::$0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ euclid::return#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ main::$1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ euclid::return#2 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ main::$2 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ euclid::return#3 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ main::$3 ] : zp ZP_BYTE:11 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [euclid] 43.75: zp ZP_BYTE:3 [ euclid::b#5 euclid::b#9 euclid::b#4 ] 33.67: zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] 4: zp ZP_BYTE:4 [ euclid::return#0 ] 4: zp ZP_BYTE:6 [ euclid::return#1 ] 4: zp ZP_BYTE:8 [ euclid::return#2 ] 4: zp ZP_BYTE:10 [ euclid::return#3 ] +Uplift Scope [main] 4: zp ZP_BYTE:5 [ main::$0 ] 4: zp ZP_BYTE:7 [ main::$1 ] 4: zp ZP_BYTE:9 [ main::$2 ] 4: zp ZP_BYTE:11 [ main::$3 ] +Uplift Scope [] + +Uplifting [euclid] best 625 combination reg byte x [ euclid::b#5 euclid::b#9 euclid::b#4 ] zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] reg byte a [ euclid::return#0 ] reg byte a [ euclid::return#1 ] zp ZP_BYTE:8 [ euclid::return#2 ] zp ZP_BYTE:10 [ euclid::return#3 ] +Limited combination testing to 100 combinations of 2304 possible. +Uplifting [main] best 601 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [] best 601 combination +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] +Uplifting [euclid] best 601 combination zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ euclid::return#2 ] +Uplifting [euclid] best 595 combination reg byte a [ euclid::return#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ euclid::return#3 ] +Uplifting [euclid] best 589 combination reg byte a [ euclid::return#3 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + // [5] call euclid + // [22] phi from main to euclid [phi:main->euclid] + euclid_from_main: + // [22] phi (byte) euclid::b#9 = (byte) 2 [phi:main->euclid#0] -- vbuxx=vbuc1 + ldx #2 + // [22] phi (byte) euclid::a#10 = (byte) $80 [phi:main->euclid#1] -- vbuz1=vbuc1 + lda #$80 + sta euclid.a + jsr euclid + // [6] (byte) euclid::return#0 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + jmp b1 + // main::@1 + b1: + // [7] (byte~) main::$0 ← (byte) euclid::return#0 + // [8] *((const byte*) SCREEN#0) ← (byte~) main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // [9] call euclid + // [22] phi from main::@1 to euclid [phi:main::@1->euclid] + euclid_from_b1: + // [22] phi (byte) euclid::b#9 = (byte) $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 + ldx #$45 + // [22] phi (byte) euclid::a#10 = (byte) $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 + lda #$a9 + sta euclid.a + jsr euclid + // [10] (byte) euclid::return#1 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + jmp b2 + // main::@2 + b2: + // [11] (byte~) main::$1 ← (byte) euclid::return#1 + // [12] *((const byte*) SCREEN#0+(byte) 1) ← (byte~) main::$1 -- _deref_pbuc1=vbuaa + sta SCREEN+1 + // [13] call euclid + // [22] phi from main::@2 to euclid [phi:main::@2->euclid] + euclid_from_b2: + // [22] phi (byte) euclid::b#9 = (byte) $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 + ldx #$9b + // [22] phi (byte) euclid::a#10 = (byte) $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 + lda #$ff + sta euclid.a + jsr euclid + // [14] (byte) euclid::return#2 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + jmp b3 + // main::@3 + b3: + // [15] (byte~) main::$2 ← (byte) euclid::return#2 + // [16] *((const byte*) SCREEN#0+(byte) 2) ← (byte~) main::$2 -- _deref_pbuc1=vbuaa + sta SCREEN+2 + // [17] call euclid + // [22] phi from main::@3 to euclid [phi:main::@3->euclid] + euclid_from_b3: + // [22] phi (byte) euclid::b#9 = (byte) 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 + ldx #3 + // [22] phi (byte) euclid::a#10 = (byte) $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 + lda #$63 + sta euclid.a + jsr euclid + // [18] (byte) euclid::return#3 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + jmp b4 + // main::@4 + b4: + // [19] (byte~) main::$3 ← (byte) euclid::return#3 + // [20] *((const byte*) SCREEN#0+(byte) 3) ← (byte~) main::$3 -- _deref_pbuc1=vbuaa + sta SCREEN+3 + jmp breturn + // main::@return + breturn: + // [21] return + rts +} + // euclid +// Calculate least common denominator using euclids subtraction method +// euclid(byte zeropage(2) a, byte register(X) b) +euclid: { + .label a = 2 + // [23] phi from euclid euclid::@3 euclid::@4 to euclid::@1 [phi:euclid/euclid::@3/euclid::@4->euclid::@1] + b1_from_euclid: + b1_from_b3: + b1_from_b4: + // [23] phi (byte) euclid::b#5 = (byte) euclid::b#9 [phi:euclid/euclid::@3/euclid::@4->euclid::@1#0] -- register_copy + // [23] phi (byte) euclid::a#5 = (byte) euclid::a#10 [phi:euclid/euclid::@3/euclid::@4->euclid::@1#1] -- register_copy + jmp b1 + // euclid::@1 + b1: + // [24] if((byte) euclid::a#5!=(byte) euclid::b#5) goto euclid::@2 -- vbuz1_neq_vbuxx_then_la1 + cpx a + bne b2 + jmp breturn + // euclid::@return + breturn: + // [25] return + rts + // euclid::@2 + b2: + // [26] if((byte) euclid::a#5>(byte) euclid::b#5) goto euclid::@3 -- vbuz1_gt_vbuxx_then_la1 + cpx a + bcc b3 + jmp b4 + // euclid::@4 + b4: + // [27] (byte) euclid::b#4 ← (byte) euclid::b#5 - (byte) euclid::a#5 -- vbuxx=vbuxx_minus_vbuz1 + txa + sec + sbc a + tax + jmp b1_from_b4 + // euclid::@3 + b3: + // [28] (byte) euclid::a#4 ← (byte) euclid::a#5 - (byte) euclid::b#5 -- vbuz1=vbuz1_minus_vbuxx + txa + eor #$ff + sec + adc a + sta a + jmp b1_from_b3 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b4 +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b4 with b1 +Replacing label b1_from_b3 with b1 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_euclid: +Removing instruction b1_from_b3: +Removing instruction b1_from_b4: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction euclid_from_main: +Removing instruction b1: +Removing instruction euclid_from_b1: +Removing instruction b2: +Removing instruction euclid_from_b2: +Removing instruction b3: +Removing instruction euclid_from_b3: +Removing instruction b4: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction b4: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(byte()) euclid((byte) euclid::a , (byte) euclid::b) +(label) euclid::@1 +(label) euclid::@2 +(label) euclid::@3 +(label) euclid::@4 +(label) euclid::@return +(byte) euclid::a +(byte) euclid::a#10 a zp ZP_BYTE:2 2.0 +(byte) euclid::a#4 a zp ZP_BYTE:2 22.0 +(byte) euclid::a#5 a zp ZP_BYTE:2 9.666666666666668 +(byte) euclid::b +(byte) euclid::b#4 reg byte x 22.0 +(byte) euclid::b#5 reg byte x 19.75 +(byte) euclid::b#9 reg byte x 2.0 +(byte) euclid::return +(byte) euclid::return#0 reg byte a 4.0 +(byte) euclid::return#1 reg byte a 4.0 +(byte) euclid::return#2 reg byte a 4.0 +(byte) euclid::return#3 reg byte a 4.0 +(byte) idx +(void()) main() +(byte~) main::$0 reg byte a 4.0 +(byte~) main::$1 reg byte a 4.0 +(byte~) main::$2 reg byte a 4.0 +(byte~) main::$3 reg byte a 4.0 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return + +zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] +reg byte x [ euclid::b#5 euclid::b#9 euclid::b#4 ] +reg byte a [ euclid::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ euclid::return#1 ] +reg byte a [ main::$1 ] +reg byte a [ euclid::return#2 ] +reg byte a [ main::$2 ] +reg byte a [ euclid::return#3 ] +reg byte a [ main::$3 ] + + +FINAL ASSEMBLER +Score: 472 + + // File Comments +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin + // [1] phi from @begin to @1 [phi:@begin->@1] + // @1 + // [2] call main + // [4] phi from @1 to main [phi:@1->main] + // [3] phi from @1 to @end [phi:@1->@end] + // @end + // main +main: { + // euclid(128,2) + // [5] call euclid + // [22] phi from main to euclid [phi:main->euclid] + // [22] phi (byte) euclid::b#9 = (byte) 2 [phi:main->euclid#0] -- vbuxx=vbuc1 + ldx #2 + // [22] phi (byte) euclid::a#10 = (byte) $80 [phi:main->euclid#1] -- vbuz1=vbuc1 + lda #$80 + sta euclid.a + jsr euclid + // euclid(128,2) + // [6] (byte) euclid::return#0 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + // main::@1 + // [7] (byte~) main::$0 ← (byte) euclid::return#0 + // SCREEN[idx++] = euclid(128,2) + // [8] *((const byte*) SCREEN#0) ← (byte~) main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // euclid(169,69) + // [9] call euclid + // [22] phi from main::@1 to euclid [phi:main::@1->euclid] + // [22] phi (byte) euclid::b#9 = (byte) $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 + ldx #$45 + // [22] phi (byte) euclid::a#10 = (byte) $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 + lda #$a9 + sta euclid.a + jsr euclid + // euclid(169,69) + // [10] (byte) euclid::return#1 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + // main::@2 + // [11] (byte~) main::$1 ← (byte) euclid::return#1 + // SCREEN[idx++] = euclid(169,69) + // [12] *((const byte*) SCREEN#0+(byte) 1) ← (byte~) main::$1 -- _deref_pbuc1=vbuaa + sta SCREEN+1 + // euclid(255,155) + // [13] call euclid + // [22] phi from main::@2 to euclid [phi:main::@2->euclid] + // [22] phi (byte) euclid::b#9 = (byte) $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 + ldx #$9b + // [22] phi (byte) euclid::a#10 = (byte) $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 + lda #$ff + sta euclid.a + jsr euclid + // euclid(255,155) + // [14] (byte) euclid::return#2 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + // main::@3 + // [15] (byte~) main::$2 ← (byte) euclid::return#2 + // SCREEN[idx++] = euclid(255,155) + // [16] *((const byte*) SCREEN#0+(byte) 2) ← (byte~) main::$2 -- _deref_pbuc1=vbuaa + sta SCREEN+2 + // euclid(99,3) + // [17] call euclid + // [22] phi from main::@3 to euclid [phi:main::@3->euclid] + // [22] phi (byte) euclid::b#9 = (byte) 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 + ldx #3 + // [22] phi (byte) euclid::a#10 = (byte) $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 + lda #$63 + sta euclid.a + jsr euclid + // euclid(99,3) + // [18] (byte) euclid::return#3 ← (byte) euclid::a#5 -- vbuaa=vbuz1 + lda euclid.a + // main::@4 + // [19] (byte~) main::$3 ← (byte) euclid::return#3 + // SCREEN[idx++] = euclid(99,3) + // [20] *((const byte*) SCREEN#0+(byte) 3) ← (byte~) main::$3 -- _deref_pbuc1=vbuaa + sta SCREEN+3 + // main::@return + // } + // [21] return + rts +} + // euclid +// Calculate least common denominator using euclids subtraction method +// euclid(byte zeropage(2) a, byte register(X) b) +euclid: { + .label a = 2 + // [23] phi from euclid euclid::@3 euclid::@4 to euclid::@1 [phi:euclid/euclid::@3/euclid::@4->euclid::@1] + // [23] phi (byte) euclid::b#5 = (byte) euclid::b#9 [phi:euclid/euclid::@3/euclid::@4->euclid::@1#0] -- register_copy + // [23] phi (byte) euclid::a#5 = (byte) euclid::a#10 [phi:euclid/euclid::@3/euclid::@4->euclid::@1#1] -- register_copy + // euclid::@1 + b1: + // while (a!=b) + // [24] if((byte) euclid::a#5!=(byte) euclid::b#5) goto euclid::@2 -- vbuz1_neq_vbuxx_then_la1 + cpx a + bne b2 + // euclid::@return + // } + // [25] return + rts + // euclid::@2 + b2: + // if(a>b) + // [26] if((byte) euclid::a#5>(byte) euclid::b#5) goto euclid::@3 -- vbuz1_gt_vbuxx_then_la1 + cpx a + bcc b3 + // euclid::@4 + // b = b-a + // [27] (byte) euclid::b#4 ← (byte) euclid::b#5 - (byte) euclid::a#5 -- vbuxx=vbuxx_minus_vbuz1 + txa + sec + sbc a + tax + jmp b1 + // euclid::@3 + b3: + // a = a-b + // [28] (byte) euclid::a#4 ← (byte) euclid::a#5 - (byte) euclid::b#5 -- vbuz1=vbuz1_minus_vbuxx + txa + eor #$ff + sec + adc a + sta a + jmp b1 +} + // File Data + diff --git a/src/test/ref/euclid-problem-2.sym b/src/test/ref/euclid-problem-2.sym new file mode 100644 index 000000000..bbd627b33 --- /dev/null +++ b/src/test/ref/euclid-problem-2.sym @@ -0,0 +1,46 @@ +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(byte()) euclid((byte) euclid::a , (byte) euclid::b) +(label) euclid::@1 +(label) euclid::@2 +(label) euclid::@3 +(label) euclid::@4 +(label) euclid::@return +(byte) euclid::a +(byte) euclid::a#10 a zp ZP_BYTE:2 2.0 +(byte) euclid::a#4 a zp ZP_BYTE:2 22.0 +(byte) euclid::a#5 a zp ZP_BYTE:2 9.666666666666668 +(byte) euclid::b +(byte) euclid::b#4 reg byte x 22.0 +(byte) euclid::b#5 reg byte x 19.75 +(byte) euclid::b#9 reg byte x 2.0 +(byte) euclid::return +(byte) euclid::return#0 reg byte a 4.0 +(byte) euclid::return#1 reg byte a 4.0 +(byte) euclid::return#2 reg byte a 4.0 +(byte) euclid::return#3 reg byte a 4.0 +(byte) idx +(void()) main() +(byte~) main::$0 reg byte a 4.0 +(byte~) main::$1 reg byte a 4.0 +(byte~) main::$2 reg byte a 4.0 +(byte~) main::$3 reg byte a 4.0 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return + +zp ZP_BYTE:2 [ euclid::a#5 euclid::a#10 euclid::a#4 ] +reg byte x [ euclid::b#5 euclid::b#9 euclid::b#4 ] +reg byte a [ euclid::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ euclid::return#1 ] +reg byte a [ main::$1 ] +reg byte a [ euclid::return#2 ] +reg byte a [ main::$2 ] +reg byte a [ euclid::return#3 ] +reg byte a [ main::$3 ] diff --git a/src/test/ref/euclid-problem.asm b/src/test/ref/euclid-problem.asm new file mode 100644 index 000000000..3b87d9ebf --- /dev/null +++ b/src/test/ref/euclid-problem.asm @@ -0,0 +1,33 @@ +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + .label a = 2 + ldx #2 + lda #$80 + sta a + b1: + cpx a + bne b2 + lda a + sta SCREEN + rts + b2: + cpx a + bcc b4 + txa + sec + sbc a + tax + jmp b1 + b4: + txa + eor #$ff + sec + adc a + sta a + jmp b1 +} diff --git a/src/test/ref/euclid-problem.cfg b/src/test/ref/euclid-problem.cfg new file mode 100644 index 000000000..3a48bae1c --- /dev/null +++ b/src/test/ref/euclid-problem.cfg @@ -0,0 +1,32 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 main::@5 + [5] (byte) main::b#2 ← phi( main/(byte) 2 main::@4/(byte) main::b#2 main::@5/(byte) main::b#1 ) + [5] (byte) main::a#2 ← phi( main/(byte) $80 main::@4/(byte) main::a#1 main::@5/(byte) main::a#2 ) + [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 + to:main::@return +main::@return: scope:[main] from main::@3 + [8] return + to:@return +main::@2: scope:[main] from main::@1 + [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@2 + [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 + to:main::@1 +main::@4: scope:[main] from main::@2 + [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 + to:main::@1 diff --git a/src/test/ref/euclid-problem.log b/src/test/ref/euclid-problem.log new file mode 100644 index 000000000..3578b491c --- /dev/null +++ b/src/test/ref/euclid-problem.log @@ -0,0 +1,512 @@ +Identified constant variable (byte*) SCREEN +Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@5 +Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@10 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + to:@1 +main: scope:[main] from @1 + (byte) main::a#0 ← (number) $80 + (byte) main::b#0 ← (number) 2 + to:main::@1 +main::@1: scope:[main] from main main::@4 main::@8 + (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@4/(byte) main::b#4 main::@8/(byte) main::b#1 ) + (byte) main::a#2 ← phi( main/(byte) main::a#0 main::@4/(byte) main::a#1 main::@8/(byte) main::a#6 ) + (bool~) main::$0 ← (byte) main::a#2 != (byte) main::b#2 + if((bool~) main::$0) goto main::@2 + to:main::@3 +main::@2: scope:[main] from main::@1 + (byte) main::b#3 ← phi( main::@1/(byte) main::b#2 ) + (byte) main::a#3 ← phi( main::@1/(byte) main::a#2 ) + (bool~) main::$1 ← (byte) main::a#3 > (byte) main::b#3 + if((bool~) main::$1) goto main::@4 + to:main::@8 +main::@3: scope:[main] from main::@1 + (byte) main::a#4 ← phi( main::@1/(byte) main::a#2 ) + *((byte*) SCREEN#0) ← (byte) main::a#4 + to:main::@return +main::@4: scope:[main] from main::@2 + (byte) main::b#4 ← phi( main::@2/(byte) main::b#3 ) + (byte) main::a#5 ← phi( main::@2/(byte) main::a#3 ) + (byte~) main::$3 ← (byte) main::a#5 - (byte) main::b#4 + (byte) main::a#1 ← (byte~) main::$3 + to:main::@1 +main::@8: scope:[main] from main::@2 + (byte) main::a#6 ← phi( main::@2/(byte) main::a#3 ) + (byte) main::b#5 ← phi( main::@2/(byte) main::b#3 ) + (byte~) main::$2 ← (byte) main::b#5 - (byte) main::a#6 + (byte) main::b#1 ← (byte~) main::$2 + to:main::@1 +main::@return: scope:[main] from main::@3 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(void()) main() +(bool~) main::$0 +(bool~) main::$1 +(byte~) main::$2 +(byte~) main::$3 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@8 +(label) main::@return +(byte) main::a +(byte) main::a#0 +(byte) main::a#1 +(byte) main::a#2 +(byte) main::a#3 +(byte) main::a#4 +(byte) main::a#5 +(byte) main::a#6 +(byte) main::b +(byte) main::b#0 +(byte) main::b#1 +(byte) main::b#2 +(byte) main::b#3 +(byte) main::b#4 +(byte) main::b#5 + +Adding number conversion cast (unumber) $80 in (byte) main::a#0 ← (number) $80 +Adding number conversion cast (unumber) 2 in (byte) main::b#0 ← (number) 2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Inlining cast (byte) main::a#0 ← (unumber)(number) $80 +Inlining cast (byte) main::b#0 ← (unumber)(number) 2 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast $80 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) $80 +Finalized unsigned number type (byte) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::a#2 = (byte) main::a#3 (byte) main::a#4 (byte) main::a#5 (byte) main::a#6 +Alias (byte) main::b#2 = (byte) main::b#3 (byte) main::b#4 (byte) main::b#5 +Alias (byte) main::a#1 = (byte~) main::$3 +Alias (byte) main::b#1 = (byte~) main::$2 +Successful SSA optimization Pass2AliasElimination +Simple Condition (bool~) main::$0 [5] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 +Simple Condition (bool~) main::$1 [8] if((byte) main::a#2>(byte) main::b#2) goto main::@4 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) main::a#0 = $80 +Constant (const byte) main::b#0 = 2 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const byte) main::a#0 +Inlining constant with var siblings (const byte) main::b#0 +Constant inlined main::a#0 = (byte) $80 +Constant inlined main::b#0 = (byte) 2 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @2 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +CALL GRAPH +Calls in [] to main:2 + +Created 2 initial phi equivalence classes +Coalesced (already) [12] main::a#8 ← main::a#2 +Coalesced [13] main::b#7 ← main::b#1 +Coalesced [15] main::a#7 ← main::a#1 +Coalesced (already) [16] main::b#6 ← main::b#2 +Coalesced down to 2 phi equivalence classes +Culled Empty Block (label) @2 +Renumbering block main::@8 to main::@5 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 main::@5 + [5] (byte) main::b#2 ← phi( main/(byte) 2 main::@4/(byte) main::b#2 main::@5/(byte) main::b#1 ) + [5] (byte) main::a#2 ← phi( main/(byte) $80 main::@4/(byte) main::a#1 main::@5/(byte) main::a#2 ) + [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 + [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 + to:main::@return +main::@return: scope:[main] from main::@3 + [8] return + to:@return +main::@2: scope:[main] from main::@1 + [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@2 + [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 + to:main::@1 +main::@4: scope:[main] from main::@2 + [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 + to:main::@1 + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(void()) main() +(byte) main::a +(byte) main::a#1 22.0 +(byte) main::a#2 19.75 +(byte) main::b +(byte) main::b#1 22.0 +(byte) main::b#2 19.25 + +Initial phi equivalence classes +[ main::a#2 main::a#1 ] +[ main::b#2 main::b#1 ] +Complete equivalence classes +[ main::a#2 main::a#1 ] +[ main::b#2 main::b#1 ] +Allocated zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +Allocated zp ZP_BYTE:3 [ main::b#2 main::b#1 ] + +INITIAL ASM + // File Comments +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + .label a = 2 + .label b = 3 + // [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + // [5] phi (byte) main::b#2 = (byte) 2 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #2 + sta b + // [5] phi (byte) main::a#2 = (byte) $80 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #$80 + sta a + jmp b1 + // main::@1 + b1: + // [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 -- vbuz1_neq_vbuz2_then_la1 + lda a + cmp b + bne b2 + jmp b3 + // main::@3 + b3: + // [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 -- _deref_pbuc1=vbuz1 + lda a + sta SCREEN + jmp breturn + // main::@return + breturn: + // [8] return + rts + // main::@2 + b2: + // [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 -- vbuz1_gt_vbuz2_then_la1 + lda b + cmp a + bcc b4 + jmp b5 + // main::@5 + b5: + // [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 -- vbuz1=vbuz1_minus_vbuz2 + lda b + sec + sbc a + sta b + // [5] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] + b1_from_b4: + b1_from_b5: + // [5] phi (byte) main::b#2 = (byte) main::b#2 [phi:main::@4/main::@5->main::@1#0] -- register_copy + // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@4/main::@5->main::@1#1] -- register_copy + jmp b1 + // main::@4 + b4: + // [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 -- vbuz1=vbuz1_minus_vbuz2 + lda a + sec + sbc b + sta a + jmp b1_from_b4 +} + // File Data + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 [ main::a#2 main::b#1 ] ( main:2 [ main::a#2 main::b#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +Statement [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 [ main::b#2 main::a#1 ] ( main:2 [ main::b#2 main::a#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::b#2 main::b#1 ] +Statement [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 [ main::a#2 main::b#1 ] ( main:2 [ main::a#2 main::b#1 ] ) always clobbers reg byte a +Statement [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 [ main::b#2 main::a#1 ] ( main:2 [ main::b#2 main::a#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::a#2 main::a#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::b#2 main::b#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 41.75: zp ZP_BYTE:2 [ main::a#2 main::a#1 ] 41.25: zp ZP_BYTE:3 [ main::b#2 main::b#1 ] +Uplift Scope [] + +Uplifting [main] best 568 combination zp ZP_BYTE:2 [ main::a#2 main::a#1 ] reg byte x [ main::b#2 main::b#1 ] +Uplifting [] best 568 combination +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::a#2 main::a#1 ] +Uplifting [main] best 568 combination zp ZP_BYTE:2 [ main::a#2 main::a#1 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + .label a = 2 + // [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + // [5] phi (byte) main::b#2 = (byte) 2 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #2 + // [5] phi (byte) main::a#2 = (byte) $80 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #$80 + sta a + jmp b1 + // main::@1 + b1: + // [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 -- vbuz1_neq_vbuxx_then_la1 + cpx a + bne b2 + jmp b3 + // main::@3 + b3: + // [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 -- _deref_pbuc1=vbuz1 + lda a + sta SCREEN + jmp breturn + // main::@return + breturn: + // [8] return + rts + // main::@2 + b2: + // [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 -- vbuz1_gt_vbuxx_then_la1 + cpx a + bcc b4 + jmp b5 + // main::@5 + b5: + // [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 -- vbuxx=vbuxx_minus_vbuz1 + txa + sec + sbc a + tax + // [5] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] + b1_from_b4: + b1_from_b5: + // [5] phi (byte) main::b#2 = (byte) main::b#2 [phi:main::@4/main::@5->main::@1#0] -- register_copy + // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@4/main::@5->main::@1#1] -- register_copy + jmp b1 + // main::@4 + b4: + // [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 -- vbuz1=vbuz1_minus_vbuxx + txa + eor #$ff + sec + adc a + sta a + jmp b1_from_b4 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp breturn +Removing instruction jmp b5 +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b4 with b1_from_b5 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_b4: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction b3: +Removing instruction breturn: +Removing instruction b5: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Skipping double jump to b1 in jmp b1_from_b5 +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label b1_from_b5 to b3 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction bbegin: +Removing instruction b3: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@return +(byte) main::a +(byte) main::a#1 a zp ZP_BYTE:2 22.0 +(byte) main::a#2 a zp ZP_BYTE:2 19.75 +(byte) main::b +(byte) main::b#1 reg byte x 22.0 +(byte) main::b#2 reg byte x 19.25 + +zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +reg byte x [ main::b#2 main::b#1 ] + + +FINAL ASSEMBLER +Score: 463 + + // File Comments +// Demonstrates a problem where wrong alive ranges result in clobbering an alive variable +// The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin + // [1] phi from @begin to @1 [phi:@begin->@1] + // @1 + // [2] call main + // [4] phi from @1 to main [phi:@1->main] + // [3] phi from @1 to @end [phi:@1->@end] + // @end + // main +main: { + .label a = 2 + // [5] phi from main to main::@1 [phi:main->main::@1] + // [5] phi (byte) main::b#2 = (byte) 2 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #2 + // [5] phi (byte) main::a#2 = (byte) $80 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #$80 + sta a + // main::@1 + b1: + // while (a!=b) + // [6] if((byte) main::a#2!=(byte) main::b#2) goto main::@2 -- vbuz1_neq_vbuxx_then_la1 + cpx a + bne b2 + // main::@3 + // *SCREEN = a + // [7] *((const byte*) SCREEN#0) ← (byte) main::a#2 -- _deref_pbuc1=vbuz1 + lda a + sta SCREEN + // main::@return + // } + // [8] return + rts + // main::@2 + b2: + // if(a>b) + // [9] if((byte) main::a#2>(byte) main::b#2) goto main::@4 -- vbuz1_gt_vbuxx_then_la1 + cpx a + bcc b4 + // main::@5 + // b = b-a + // [10] (byte) main::b#1 ← (byte) main::b#2 - (byte) main::a#2 -- vbuxx=vbuxx_minus_vbuz1 + txa + sec + sbc a + tax + // [5] phi from main::@4 main::@5 to main::@1 [phi:main::@4/main::@5->main::@1] + // [5] phi (byte) main::b#2 = (byte) main::b#2 [phi:main::@4/main::@5->main::@1#0] -- register_copy + // [5] phi (byte) main::a#2 = (byte) main::a#1 [phi:main::@4/main::@5->main::@1#1] -- register_copy + jmp b1 + // main::@4 + b4: + // a = a-b + // [11] (byte) main::a#1 ← (byte) main::a#2 - (byte) main::b#2 -- vbuz1=vbuz1_minus_vbuxx + txa + eor #$ff + sec + adc a + sta a + jmp b1 +} + // File Data + diff --git a/src/test/ref/euclid-problem.sym b/src/test/ref/euclid-problem.sym new file mode 100644 index 000000000..5acfef455 --- /dev/null +++ b/src/test/ref/euclid-problem.sym @@ -0,0 +1,21 @@ +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@return +(byte) main::a +(byte) main::a#1 a zp ZP_BYTE:2 22.0 +(byte) main::a#2 a zp ZP_BYTE:2 19.75 +(byte) main::b +(byte) main::b#1 reg byte x 22.0 +(byte) main::b#2 reg byte x 19.25 + +zp ZP_BYTE:2 [ main::a#2 main::a#1 ] +reg byte x [ main::b#2 main::b#1 ] diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index 45f73eca3..1ebe023c1 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -2811,36 +2811,6 @@ Alias (signed byte) sy#12 = (signed byte) sy#5 Successful SSA optimization Pass2AliasElimination Alias (byte*) print_sbyte_at::at#21 = (byte*) print_sbyte_at::at#23 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (signed byte) sx#24 -Self Phi Eliminated (signed byte) sy#26 -Self Phi Eliminated (signed byte*) COSH#5 -Self Phi Eliminated (signed byte*) COSQ#5 -Self Phi Eliminated (byte*) print_screen#53 -Self Phi Eliminated (signed byte) sx#20 -Self Phi Eliminated (signed byte) sy#21 -Self Phi Eliminated (signed byte*) COSH#4 -Self Phi Eliminated (signed byte*) COSQ#4 -Self Phi Eliminated (byte*) print_screen#52 -Self Phi Eliminated (signed byte) sx#14 -Self Phi Eliminated (signed byte) sy#14 -Self Phi Eliminated (signed byte*) COSH#15 -Self Phi Eliminated (signed byte*) COSQ#15 -Self Phi Eliminated (byte*) print_screen#44 -Self Phi Eliminated (signed byte) sx#15 -Self Phi Eliminated (signed byte) sy#15 -Self Phi Eliminated (byte*) print_screen#28 -Self Phi Eliminated (signed byte*) COSH#10 -Self Phi Eliminated (signed byte*) COSQ#10 -Self Phi Eliminated (byte) debug_print_init::i#5 -Self Phi Eliminated (byte*) debug_print_init::at_cols#1 -Self Phi Eliminated (byte) debug_print_init::c#5 -Self Phi Eliminated (byte*) debug_print_init::at_line#4 -Self Phi Eliminated (byte*) debug_print::at_line#1 -Self Phi Eliminated (byte*) sprites_init::sprites_ptr#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -2904,6 +2874,11 @@ Identical Phi Values (signed byte) sx#12 (signed byte) sx#0 Identical Phi Values (signed byte) sy#12 (signed byte) sy#0 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 +Identical Phi Values (signed byte*) COSH#6 (signed byte*) COSH#0 +Identical Phi Values (signed byte*) COSQ#6 (signed byte*) COSQ#0 +Identical Phi Values (byte*) print_screen#54 (byte*) print_screen#0 +Identical Phi Values (byte*) debug_print_init::at_line#1 (byte*) debug_print_init::at_line#0 +Identical Phi Values (byte*) debug_print_init::at_cols#2 (byte*) debug_print_init::at_cols#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [12] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [24] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4 @@ -3091,13 +3066,13 @@ Converting *(pointer+n) to pointer[n] [296] *((byte*~) debug_print_init::$63) Converting *(pointer+n) to pointer[n] [300] *((byte*~) debug_print_init::$66) ← (byte) debug_print_init::col#0 -- *(debug_print_init::$65 + debug_print_init::j#2) Successful SSA optimization Pass2InlineDerefIdx Simplifying constant evaluating to zero (byte)(number) $28*(number) 0 in [184] (byte*~) debug_print_init::$1 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 0 -Simplifying constant evaluating to zero (byte)(number) $28*(number) 0 in [243] (byte*~) debug_print_init::$30 ← (byte*) debug_print_init::at_line#1 + (byte)(number) $28*(number) 0 -Simplifying constant evaluating to zero (byte)(number) $28*(number) 0 in [265] (byte*~) debug_print_init::$40 ← (byte*) debug_print_init::at_cols#2 + (byte)(number) $28*(number) 0 +Simplifying constant evaluating to zero (byte)(number) $28*(number) 0 in [243] (byte*~) debug_print_init::$30 ← (byte*) debug_print_init::at_line#0 + (byte)(number) $28*(number) 0 +Simplifying constant evaluating to zero (byte)(number) $28*(number) 0 in [265] (byte*~) debug_print_init::$40 ← (byte*) debug_print_init::at_cols#0 + (byte)(number) $28*(number) 0 Simplifying constant evaluating to zero (byte)(number) $28*(number) 0 in [458] (byte*~) debug_print::$13 ← (byte*) debug_print::at_line#0 + (byte)(number) $28*(number) 0 Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero SCREEN#0 in [184] (byte*~) debug_print_init::$1 ← (const byte*) SCREEN#0 + (byte) 0 -Simplifying expression containing zero debug_print_init::at_line#1 in [243] (byte*~) debug_print_init::$30 ← (byte*) debug_print_init::at_line#1 + (byte) 0 -Simplifying expression containing zero debug_print_init::at_cols#2 in [265] (byte*~) debug_print_init::$40 ← (byte*) debug_print_init::at_cols#2 + (byte) 0 +Simplifying expression containing zero debug_print_init::at_line#0 in [243] (byte*~) debug_print_init::$30 ← (byte*) debug_print_init::at_line#0 + (byte) 0 +Simplifying expression containing zero debug_print_init::at_cols#0 in [265] (byte*~) debug_print_init::$40 ← (byte*) debug_print_init::at_cols#0 + (byte) 0 Simplifying expression containing zero rotation_matrix#0 in [347] (signed byte) debug_print::print_sbyte_pos4_sb#0 ← *((const signed byte[9]) rotation_matrix#0 + (byte) 0) Simplifying expression containing zero debug_print::at_line#0 in [458] (byte*~) debug_print::$13 ← (byte*) debug_print::at_line#0 + (byte) 0 Simplifying expression containing zero calculate_matrix::sy#0 in [516] (signed byte) calculate_matrix::t1#0 ← (signed byte) calculate_matrix::sy#0 - (const signed byte) calculate_matrix::sz#0 @@ -3138,22 +3113,10 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias (byte*) debug_print_init::at_line#1 = (byte*~) debug_print_init::$30 -Alias (byte*) debug_print_init::at_cols#2 = (byte*~) debug_print_init::$40 +Alias (byte*) debug_print_init::at_line#0 = (byte*~) debug_print_init::$30 +Alias (byte*) debug_print_init::at_cols#0 = (byte*~) debug_print_init::$40 Alias (byte*) debug_print::at_line#0 = (byte*~) debug_print::$13 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (signed byte*) COSH#6 -Self Phi Eliminated (signed byte*) COSQ#6 -Self Phi Eliminated (byte*) print_screen#54 -Self Phi Eliminated (byte*) debug_print_init::at_line#1 -Self Phi Eliminated (byte*) debug_print_init::at_cols#2 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (signed byte*) COSH#6 (signed byte*) COSH#0 -Identical Phi Values (signed byte*) COSQ#6 (signed byte*) COSQ#0 -Identical Phi Values (byte*) print_screen#54 (const byte*) print_screen#0 -Identical Phi Values (byte*) debug_print_init::at_line#1 (byte*) debug_print_init::at_line#0 -Identical Phi Values (byte*) debug_print_init::at_cols#2 (byte*) debug_print_init::at_cols#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [90] (byte*~) debug_print_init::$4 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 1 Constant right-side identified [93] (byte*~) debug_print_init::$7 ← (const byte*) SCREEN#0 + (byte)(number) $28*(number) 2 Constant right-side identified [96] (byte*) print_str_at::at#4 ← (const byte*) SCREEN#0 + (word)(number) $28*(number) $10 diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index be2686186..cfe5f00da 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -1041,11 +1041,6 @@ Alias (byte) mulf_init::val#0 = (byte~) mulf_init::$0 Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#20 Alias (byte*) print_char_cursor#32 = (byte*) print_char_cursor#63 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#35 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.log b/src/test/ref/examples/bresenham/bitmap-bresenham.log index ecef4b738..d9b1190b1 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.log @@ -1538,21 +1538,6 @@ Alias (byte) bitmap_line_ydxd::y#3 = (byte) bitmap_line_ydxd::y#6 Alias (byte) bitmap_line_ydxd::xd#3 = (byte) bitmap_line_ydxd::xd#5 Alias (byte) bitmap_line_ydxd::yd#2 = (byte) bitmap_line_ydxd::yd#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) bitmap_init::bitmap#1 -Self Phi Eliminated (byte) bitmap_clear::y#2 -Self Phi Eliminated (byte) bitmap_line_xdyi::yd#3 -Self Phi Eliminated (byte) bitmap_line_xdyi::xd#2 -Self Phi Eliminated (byte) bitmap_line_xdyi::x1#2 -Self Phi Eliminated (byte) bitmap_line_xdyd::yd#3 -Self Phi Eliminated (byte) bitmap_line_xdyd::xd#2 -Self Phi Eliminated (byte) bitmap_line_xdyd::x1#2 -Self Phi Eliminated (byte) bitmap_line_ydxi::xd#3 -Self Phi Eliminated (byte) bitmap_line_ydxi::yd#2 -Self Phi Eliminated (byte) bitmap_line_ydxi::y1#2 -Self Phi Eliminated (byte) bitmap_line_ydxd::xd#3 -Self Phi Eliminated (byte) bitmap_line_ydxd::yd#2 -Self Phi Eliminated (byte) bitmap_line_ydxd::y1#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) bitmap_init::bitmap#2 (byte*) bitmap_init::bitmap#0 Identical Phi Values (byte*) bitmap_init::bitmap#1 (byte*) bitmap_init::bitmap#2 Identical Phi Values (byte) bitmap_clear::y#2 (byte) bitmap_clear::y#4 diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index dbc2bf29b..d46bb45bb 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -1547,11 +1547,6 @@ Alias (byte) plot_chargen::x#2 = (byte) plot_chargen::x#3 Alias (byte) plot_chargen::y#3 = (byte) plot_chargen::y#5 Alias (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#8 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::cur_pos#10 -Self Phi Eliminated (byte) main::shift#10 -Self Phi Eliminated (byte) plot_chargen::y#3 -Self Phi Eliminated (byte*) plot_chargen::chargen#4 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#0 Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1 Identical Phi Values (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 @@ -1561,6 +1556,8 @@ Identical Phi Values (byte) main::shift#10 (byte) main::shift#9 Identical Phi Values (byte) plot_chargen::y#3 (byte) plot_chargen::y#2 Identical Phi Values (byte*) plot_chargen::chargen#4 (byte*) plot_chargen::chargen#3 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) plot_chargen::chargen#3 (byte*) plot_chargen::chargen#5 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) mul8u::$0 [9] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 Simple Condition (bool~) mul8u::$3 [14] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@4 Simple Condition (bool~) main::$12 [121] if((byte*) main::sc#1<(byte*~) main::$11) goto main::@1 @@ -1704,10 +1701,6 @@ Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) plot_chargen::chargen#3 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) plot_chargen::chargen#3 (byte*) plot_chargen::chargen#5 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [9] (byte[]) keyboard_char_keycodes#0 ← { (const byte) KEY_AT#0, (const byte) KEY_A#0, (const byte) KEY_B#0, (const byte) KEY_C#0, (const byte) KEY_D#0, (const byte) KEY_E#0, (const byte) KEY_F#0, (const byte) KEY_G#0, (const byte) KEY_H#0, (const byte) KEY_I#0, (const byte) KEY_J#0, (const byte) KEY_K#0, (const byte) KEY_L#0, (const byte) KEY_M#0, (const byte) KEY_N#0, (const byte) KEY_O#0, (const byte) KEY_P#0, (const byte) KEY_Q#0, (const byte) KEY_R#0, (const byte) KEY_S#0, (const byte) KEY_T#0, (const byte) KEY_U#0, (const byte) KEY_V#0, (const byte) KEY_W#0, (const byte) KEY_X#0, (const byte) KEY_Y#0, (const byte) KEY_Z#0, (byte) $3f, (const byte) KEY_POUND#0, (byte) $3f, (const byte) KEY_ARROW_UP#0, (const byte) KEY_ARROW_LEFT#0, (const byte) KEY_SPACE#0, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK#0, (const byte) KEY_PLUS#0, (const byte) KEY_COMMA#0, (const byte) KEY_MINUS#0, (const byte) KEY_DOT#0, (const byte) KEY_SLASH#0, (const byte) KEY_0#0, (const byte) KEY_1#0, (const byte) KEY_2#0, (const byte) KEY_3#0, (const byte) KEY_4#0, (const byte) KEY_5#0, (const byte) KEY_6#0, (const byte) KEY_7#0, (const byte) KEY_8#0, (const byte) KEY_9#0, (const byte) KEY_COLON#0, (const byte) KEY_SEMICOLON#0, (byte) $3f, (const byte) KEY_EQUALS#0, (byte) $3f, (byte) $3f } Constant right-side identified [27] (byte*~) main::$11 ← (const byte*) SCREEN#0 + (word) $3e8 Constant right-side identified [29] (byte*) print_str_at::at#0 ← (const byte*) SCREEN#0 + (byte) 1 diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.log b/src/test/ref/examples/fastmultiply/fastmultiply8.log index 6d9010764..f24eac4d7 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.log @@ -709,14 +709,6 @@ Alias (signed byte) fmul8::return#1 = (signed byte) fmul8::return#4 (signed byte Successful SSA optimization Pass2AliasElimination Alias (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) main::at_line#3 -Self Phi Eliminated (byte) main::i#3 -Self Phi Eliminated (byte*) main::at_line#4 -Self Phi Eliminated (byte*) init_screen::COLS#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index 36b3b942b..34dcb9bfd 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -928,14 +928,6 @@ Alias (byte) makecharset::c#2 = (byte) makecharset::c#3 Alias (byte*) makecharset::charset#11 = (byte*) makecharset::charset#7 Alias (byte) makecharset::i#2 = (byte) makecharset::i#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) fire::screenbase#3 -Self Phi Eliminated (byte*) makecharset::charset#2 -Self Phi Eliminated (byte*) makecharset::charset#12 -Self Phi Eliminated (byte) makecharset::c#2 -Self Phi Eliminated (byte) makecharset::i#2 -Self Phi Eliminated (byte*) makecharset::charset#11 -Self Phi Eliminated (byte) fillscreen::fill#4 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) fire::screenbase#3 (byte*) fire::screen#0 Identical Phi Values (byte*) makecharset::font#0 (byte*) makecharset::charset#0 Identical Phi Values (byte*) makecharset::charset#2 (byte*) makecharset::font#0 @@ -945,6 +937,11 @@ Identical Phi Values (byte) makecharset::i#2 (byte) makecharset::i#6 Identical Phi Values (byte*) makecharset::charset#11 (byte*) makecharset::charset#9 Identical Phi Values (byte) fillscreen::fill#4 (byte) fillscreen::fill#5 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) makecharset::c#5 (byte) makecharset::c#7 +Identical Phi Values (byte*) makecharset::charset#9 (byte*) makecharset::charset#10 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) makecharset::charset#10 (byte*) makecharset::charset#0 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) fire::$3 [87] if((byte*) fire::buffer#4!=(byte*~) fire::$2) goto fire::@2 Simple Condition (bool~) fire::$9 [96] if((byte) fire::c#0<=(byte) 2) goto fire::@4 Simple Condition (bool~) fire::$14 [122] if((byte*) fire::buffer#3!=(byte*~) fire::$13) goto fire::@9 @@ -1028,18 +1025,13 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3e8 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) makecharset::c#5 -Self Phi Eliminated (byte*) makecharset::charset#9 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) makecharset::c#5 (byte) makecharset::c#7 -Identical Phi Values (byte*) makecharset::charset#9 (byte*) makecharset::charset#10 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [38] (byte*~) fire::$2 ← (const byte*) BUFFER#0 + (word)(number) $18*(number) $28 Constant right-side identified [46] (byte*) fire::buffer#1 ← (const byte*) BUFFER#0 + (word)(number) $18*(number) $28 Constant right-side identified [63] (byte*~) fire::$13 ← (const byte*) BUFFER#0 + (word)(number) $19*(number) $28 Constant right-side identified [69] (byte*~) makecharset::$0 ← (const byte*) makecharset::charset#0 + (byte)(number) 1*(number) 8 Constant right-side identified [71] (byte*) makecharset::font1#0 ← (const byte*) makecharset::charset#0 + (word)(number) $40*(number) 8 Constant right-side identified [75] (byte*~) makecharset::$3 ← (const byte*) makecharset::charset#0 + (word)(number) $100*(number) 8 +Constant right-side identified [90] (byte*~) makecharset::$12 ← (const byte*) makecharset::charset#0 + (byte)(number) 1*(number) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$0#0 = (word)main::toD0181_screen#0 Constant (const word) main::toD0181_$4#0 = (word)main::toD0181_gfx#0 @@ -1051,22 +1043,17 @@ Constant (const byte*) fire::$13 = BUFFER#0+(word)$19*$28 Constant (const byte*) makecharset::$0 = makecharset::charset#0+(byte)1*8 Constant (const byte*) makecharset::font1#0 = makecharset::charset#0+(word)$40*8 Constant (const byte*) makecharset::$3 = makecharset::charset#0+(word)$100*8 +Constant (const byte*) makecharset::$12 = makecharset::charset#0+(byte)1*8 Successful SSA optimization Pass2ConstantIdentification -Self Phi Eliminated (byte*) makecharset::charset#10 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) makecharset::charset#10 (const byte*) makecharset::charset#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [15] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff Constant right-side identified [18] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 Constant right-side identified [24] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff Constant right-side identified [27] (byte~) main::toD0182_$5#0 ← > (const word) main::toD0182_$4#0 -Constant right-side identified [80] (byte*~) makecharset::$12 ← (const byte*) makecharset::charset#0 + (byte)(number) 1*(number) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&$3fff Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 Constant (const word) main::toD0182_$1#0 = main::toD0182_$0#0&$3fff Constant (const byte) main::toD0182_$5#0 = >main::toD0182_$4#0 -Constant (const byte*) makecharset::$12 = makecharset::charset#0+(byte)1*8 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [15] (word~) main::toD0181_$2#0 ← (const word) main::toD0181_$1#0 * (byte) 4 Constant right-side identified [17] (byte~) main::toD0181_$6#0 ← (const byte) main::toD0181_$5#0 / (byte) 4 diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index 304995b52..b1a006403 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -230,8 +230,6 @@ Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#6 (byte*) print_c Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#8 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print_char_cursor#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) print_str::str#4 (byte*) print_str::str#1 Identical Phi Values (byte*) print_char_cursor#21 (byte*) print_char_cursor#19 Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#13 diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index 9cdd1d390..111af78be 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -1434,42 +1434,6 @@ Alias (byte) plex_free_next#13 = (byte) plex_free_next#22 (byte) plex_free_next# Alias (byte) plex_sprite_idx#15 = (byte) plex_sprite_idx#27 Alias (byte) plex_show_idx#15 = (byte) plex_show_idx#27 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#15 -Self Phi Eliminated (byte) plexSort::nxt_y#1 -Self Phi Eliminated (byte) plexSort::nxt_idx#1 -Self Phi Eliminated (byte) plexSort::m#5 -Self Phi Eliminated (byte) plex_show_idx#11 -Self Phi Eliminated (byte) plex_sprite_idx#11 -Self Phi Eliminated (byte) plex_sprite_msb#12 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#24 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#13 -Self Phi Eliminated (byte) loop::sin_idx#2 -Self Phi Eliminated (byte) plex_show_idx#41 -Self Phi Eliminated (byte) plex_sprite_idx#41 -Self Phi Eliminated (byte) plex_sprite_msb#41 -Self Phi Eliminated (byte) plex_free_next#40 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#40 -Self Phi Eliminated (byte) loop::sin_idx#3 -Self Phi Eliminated (byte) plex_show_idx#29 -Self Phi Eliminated (byte) plex_sprite_idx#29 -Self Phi Eliminated (byte) plex_sprite_msb#26 -Self Phi Eliminated (byte) plex_free_next#25 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#37 -Self Phi Eliminated (byte) plex_free_next#36 -Self Phi Eliminated (byte) plex_sprite_idx#47 -Self Phi Eliminated (byte) plex_show_idx#47 -Self Phi Eliminated (byte) plex_sprite_msb#47 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#34 -Self Phi Eliminated (byte) loop::sin_idx#15 -Self Phi Eliminated (byte) loop::rasterY#1 -Self Phi Eliminated (byte) plex_sprite_idx#23 -Self Phi Eliminated (byte) plex_show_idx#23 -Self Phi Eliminated (byte) plex_free_next#27 -Self Phi Eliminated (byte) plex_sprite_msb#27 -Self Phi Eliminated (byte) loop::ss#2 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#26 -Self Phi Eliminated (byte) loop::sin_idx#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) plexInit::plexSetScreen1_screen#0 (byte*) plexInit::screen#0 Identical Phi Values (byte*) PLEX_SCREEN_PTR#15 (byte*) PLEX_SCREEN_PTR#1 Identical Phi Values (byte) plexSort::nxt_y#1 (byte) plexSort::nxt_y#0 @@ -1543,6 +1507,10 @@ Identical Phi Values (byte) plex_sprite_msb#11 (byte) plex_sprite_msb#17 Identical Phi Values (byte) plex_free_next#10 (byte) plex_free_next#14 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte) plexSort::m#3 (byte) plexSort::m#2 +Identical Phi Values (byte*) PLEX_SCREEN_PTR#30 (byte*) PLEX_SCREEN_PTR#42 +Identical Phi Values (byte) loop::sin_idx#11 (byte) loop::sin_idx#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) PLEX_SCREEN_PTR#42 (byte*) PLEX_SCREEN_PTR#1 Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [100] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2DuplicateRValueIdentification @@ -1645,12 +1613,6 @@ Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) plexShowSprite::$11 = (byte~) plexShowSprite::$10 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#30 -Self Phi Eliminated (byte) loop::sin_idx#11 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) PLEX_SCREEN_PTR#30 (byte*) PLEX_SCREEN_PTR#42 -Identical Phi Values (byte) loop::sin_idx#11 (byte) loop::sin_idx#1 -Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) plexSort::$6 [25] if((byte) plexSort::s#1!=(byte) $ff) goto plexSort::@8 Simple Condition (bool~) plexSort::$7 [109] if((byte) plexSort::nxt_y#0<*((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -1718,10 +1680,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#42 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) PLEX_SCREEN_PTR#42 (const byte*) PLEX_SCREEN_PTR#1 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [53] (byte~) init::$1 ← (const byte) init::$0 | (byte) 3 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) init::$1 = init::$0|3 diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log index dc556c5cf..d07adf021 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.log +++ b/src/test/ref/examples/plasma/plasma-unroll.log @@ -1449,41 +1449,6 @@ Alias (byte) makecharset::s#1 = (byte) makecharset::s#4 Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#23 (byte*) print_line_cursor#35 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#40 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_line_cursor#14 -Self Phi Eliminated (byte*) print_char_cursor#21 -Self Phi Eliminated (byte*) print_screen#5 -Self Phi Eliminated (byte) c1A#17 -Self Phi Eliminated (byte) c1B#17 -Self Phi Eliminated (byte) c2A#18 -Self Phi Eliminated (byte) c2B#18 -Self Phi Eliminated (byte*) print_line_cursor#10 -Self Phi Eliminated (byte*) print_char_cursor#15 -Self Phi Eliminated (byte) c1A#14 -Self Phi Eliminated (byte) c1B#14 -Self Phi Eliminated (byte) c2A#14 -Self Phi Eliminated (byte) c2B#14 -Self Phi Eliminated (byte*) doplasma::screen#6 -Self Phi Eliminated (byte) c2A#15 -Self Phi Eliminated (byte) c2B#15 -Self Phi Eliminated (byte*) doplasma::screen#3 -Self Phi Eliminated (byte) c1A#22 -Self Phi Eliminated (byte) c1B#22 -Self Phi Eliminated (byte*) doplasma::screen#1 -Self Phi Eliminated (byte) doplasma::i2#3 -Self Phi Eliminated (byte) c1A#10 -Self Phi Eliminated (byte) c1B#10 -Self Phi Eliminated (byte) c2A#10 -Self Phi Eliminated (byte) c2B#10 -Self Phi Eliminated (byte) makecharset::s#1 -Self Phi Eliminated (word) makecharset::c#10 -Self Phi Eliminated (byte) makecharset::i#2 -Self Phi Eliminated (byte*) makecharset::charset#1 -Self Phi Eliminated (byte*) print_line_cursor#12 -Self Phi Eliminated (byte*) print_char_cursor#20 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -1557,6 +1522,19 @@ Identical Phi Values (byte) c2A#11 (byte) c2A#1 Identical Phi Values (byte) c2B#11 (byte) c2B#1 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 +Identical Phi Values (byte*) doplasma::screen#2 (byte*) doplasma::screen#0 +Identical Phi Values (byte) c1A#20 (byte) c1A#3 +Identical Phi Values (byte) c1B#20 (byte) c1B#3 +Identical Phi Values (byte) c2A#22 (byte) c2A#3 +Identical Phi Values (byte) c2B#22 (byte) c2B#3 +Identical Phi Values (byte) makecharset::s#3 (byte) makecharset::s#0 +Identical Phi Values (word) makecharset::c#12 (word) makecharset::c#2 +Identical Phi Values (byte*) makecharset::charset#6 (byte*) makecharset::charset#7 +Identical Phi Values (byte*) print_line_cursor#38 (byte*) print_line_cursor#39 +Identical Phi Values (byte*) print_char_cursor#43 (byte*) print_char_cursor#44 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) makecharset::charset#7 (byte*) makecharset::charset#0 +Identical Phi Values (byte*) print_line_cursor#39 (byte*) print_line_cursor#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [9] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [21] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4 @@ -1565,7 +1543,7 @@ Simple Condition (bool~) doplasma::$2 [138] if((byte) doplasma::i#1<(byte) $19) Simple Condition (bool~) doplasma::$4 [152] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3 Simple Condition (bool~) doplasma::$7 [167] unroll if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@6 Simple Condition (bool~) doplasma::$8 [171] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@5 -Simple Condition (bool~) makecharset::$6 [202] if((byte~) makecharset::$4<=(byte) makecharset::s#3) goto makecharset::@4 +Simple Condition (bool~) makecharset::$6 [202] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 Simple Condition (bool~) makecharset::$7 [206] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3 Simple Condition (bool~) makecharset::$10 [215] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2 Simple Condition (bool~) makecharset::$13 [220] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9 @@ -1624,34 +1602,12 @@ Successful SSA optimization Pass2ConstantValues if() condition always false - eliminating [9] if((const word) memset::num#0<=(byte) 0) goto memset::@1 if() condition always true - replacing block destination [99] if(true) goto main::@4 Successful SSA optimization Pass2ConstantIfs -De-inlining pointer[w] to *(pointer+w) [212] *((byte*) makecharset::charset#6 + (word~) makecharset::$9) ← (byte) makecharset::b#3 +De-inlining pointer[w] to *(pointer+w) [212] *((const byte*) makecharset::charset#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 Successful SSA optimization Pass2DeInlineWordDerefIdx Eliminating unused variable (void*) memset::return#2 and assignment [13] (void*) memset::return#2 ← (void*) memset::str#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Self Phi Eliminated (byte*) doplasma::screen#2 -Self Phi Eliminated (byte) c1A#20 -Self Phi Eliminated (byte) c1B#20 -Self Phi Eliminated (byte) c2A#22 -Self Phi Eliminated (byte) c2B#22 -Self Phi Eliminated (byte) makecharset::s#3 -Self Phi Eliminated (word) makecharset::c#12 -Self Phi Eliminated (byte*) makecharset::charset#6 -Self Phi Eliminated (byte*) print_line_cursor#38 -Self Phi Eliminated (byte*) print_char_cursor#43 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) doplasma::screen#2 (const byte*) doplasma::screen#0 -Identical Phi Values (byte) c1A#20 (byte) c1A#3 -Identical Phi Values (byte) c1B#20 (byte) c1B#3 -Identical Phi Values (byte) c2A#22 (byte) c2A#3 -Identical Phi Values (byte) c2B#22 (byte) c2B#3 -Identical Phi Values (byte) makecharset::s#3 (byte) makecharset::s#0 -Identical Phi Values (word) makecharset::c#12 (word) makecharset::c#2 -Identical Phi Values (byte*) makecharset::charset#6 (byte*) makecharset::charset#7 -Identical Phi Values (byte*) print_line_cursor#38 (byte*) print_line_cursor#39 -Identical Phi Values (byte*) print_char_cursor#43 (byte*) print_char_cursor#44 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [22] (byte*~) main::$2 ← (const byte*) COLS#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 @@ -1664,8 +1620,6 @@ Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← Successful SSA optimization Pass2ConstantValues Resolved ranged next value [25] main::col#1 ← ++ main::col#2 to ++ Resolved ranged comparison value [26] if(main::col#1!=rangelast(COLS#0,main::$2)) goto main::@1 to (byte*)(const byte*) main::$2+(number) 1 -Eliminating unused variable - keeping the phi block (byte*) print_line_cursor#39 -Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) 1 in if((byte*) main::col#1!=(byte*)(const byte*) main::$2+(number) 1) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast (const byte*) main::$2+(unumber)(number) 1 @@ -1673,10 +1627,6 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) makecharset::charset#7 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) makecharset::charset#7 (const byte*) makecharset::charset#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [26] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff Constant right-side identified [29] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 Successful SSA optimization Pass2ConstantRValueConsolidation diff --git a/src/test/ref/examples/plasma/plasma.log b/src/test/ref/examples/plasma/plasma.log index a08af2a02..1185793ef 100644 --- a/src/test/ref/examples/plasma/plasma.log +++ b/src/test/ref/examples/plasma/plasma.log @@ -1583,41 +1583,6 @@ Alias (byte) makecharset::s#1 = (byte) makecharset::s#4 Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#22 (byte*) print_line_cursor#34 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#39 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_line_cursor#14 -Self Phi Eliminated (byte*) print_char_cursor#21 -Self Phi Eliminated (byte) c1A#21 -Self Phi Eliminated (byte) c1B#21 -Self Phi Eliminated (byte) c2A#22 -Self Phi Eliminated (byte) c2B#22 -Self Phi Eliminated (byte*) print_screen#5 -Self Phi Eliminated (byte*) print_line_cursor#10 -Self Phi Eliminated (byte*) print_char_cursor#15 -Self Phi Eliminated (byte) c1A#11 -Self Phi Eliminated (byte) c1B#11 -Self Phi Eliminated (byte) c2A#10 -Self Phi Eliminated (byte) c2B#10 -Self Phi Eliminated (byte*) doplasma::screen#8 -Self Phi Eliminated (byte) c2A#11 -Self Phi Eliminated (byte) c2B#11 -Self Phi Eliminated (byte*) doplasma::screen#6 -Self Phi Eliminated (byte) c1A#30 -Self Phi Eliminated (byte) c1B#30 -Self Phi Eliminated (byte) doplasma::ii#2 -Self Phi Eliminated (byte*) doplasma::screen#3 -Self Phi Eliminated (byte) c1A#12 -Self Phi Eliminated (byte) c1B#12 -Self Phi Eliminated (byte) c2A#12 -Self Phi Eliminated (byte) c2B#12 -Self Phi Eliminated (byte) makecharset::s#1 -Self Phi Eliminated (word) makecharset::c#10 -Self Phi Eliminated (byte) makecharset::i#2 -Self Phi Eliminated (byte*) makecharset::charset#1 -Self Phi Eliminated (byte*) print_line_cursor#12 -Self Phi Eliminated (byte*) print_char_cursor#20 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -1690,6 +1655,18 @@ Identical Phi Values (byte) c2A#13 (byte) c2A#14 Identical Phi Values (byte) c2B#13 (byte) c2B#14 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 +Identical Phi Values (byte) c1A#27 (byte) c1A#4 +Identical Phi Values (byte) c1B#27 (byte) c1B#4 +Identical Phi Values (byte) c2A#29 (byte) c2A#4 +Identical Phi Values (byte) c2B#29 (byte) c2B#4 +Identical Phi Values (byte) makecharset::s#3 (byte) makecharset::s#0 +Identical Phi Values (word) makecharset::c#12 (word) makecharset::c#2 +Identical Phi Values (byte*) makecharset::charset#6 (byte*) makecharset::charset#7 +Identical Phi Values (byte*) print_line_cursor#39 (byte*) print_line_cursor#41 +Identical Phi Values (byte*) print_char_cursor#44 (byte*) print_char_cursor#46 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) makecharset::charset#7 (byte*) makecharset::charset#0 +Identical Phi Values (byte*) print_line_cursor#41 (byte*) print_line_cursor#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [9] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [21] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4 @@ -1698,7 +1675,7 @@ Simple Condition (bool~) doplasma::$1 [160] if((byte) doplasma::i#1<(byte) $19) Simple Condition (bool~) doplasma::$3 [174] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3 Simple Condition (bool~) doplasma::$5 [186] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6 Simple Condition (bool~) doplasma::$6 [191] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5 -Simple Condition (bool~) makecharset::$6 [222] if((byte~) makecharset::$4<=(byte) makecharset::s#3) goto makecharset::@4 +Simple Condition (bool~) makecharset::$6 [222] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 Simple Condition (bool~) makecharset::$7 [226] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3 Simple Condition (bool~) makecharset::$10 [235] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2 Simple Condition (bool~) makecharset::$13 [240] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9 @@ -1762,32 +1739,12 @@ Successful SSA optimization Pass2ConstantValues if() condition always false - eliminating [9] if((const word) memset::num#0<=(byte) 0) goto memset::@1 if() condition always true - replacing block destination [82] if(true) goto main::@4 Successful SSA optimization Pass2ConstantIfs -De-inlining pointer[w] to *(pointer+w) [232] *((byte*) makecharset::charset#6 + (word~) makecharset::$9) ← (byte) makecharset::b#3 +De-inlining pointer[w] to *(pointer+w) [232] *((const byte*) makecharset::charset#0 + (word~) makecharset::$9) ← (byte) makecharset::b#3 Successful SSA optimization Pass2DeInlineWordDerefIdx Eliminating unused variable (void*) memset::return#2 and assignment [13] (void*) memset::return#2 ← (void*) memset::str#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Self Phi Eliminated (byte) c1A#27 -Self Phi Eliminated (byte) c1B#27 -Self Phi Eliminated (byte) c2A#29 -Self Phi Eliminated (byte) c2B#29 -Self Phi Eliminated (byte) makecharset::s#3 -Self Phi Eliminated (word) makecharset::c#12 -Self Phi Eliminated (byte*) makecharset::charset#6 -Self Phi Eliminated (byte*) print_line_cursor#39 -Self Phi Eliminated (byte*) print_char_cursor#44 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) c1A#27 (byte) c1A#4 -Identical Phi Values (byte) c1B#27 (byte) c1B#4 -Identical Phi Values (byte) c2A#29 (byte) c2A#4 -Identical Phi Values (byte) c2B#29 (byte) c2B#4 -Identical Phi Values (byte) makecharset::s#3 (byte) makecharset::s#0 -Identical Phi Values (word) makecharset::c#12 (word) makecharset::c#2 -Identical Phi Values (byte*) makecharset::charset#6 (byte*) makecharset::charset#7 -Identical Phi Values (byte*) print_line_cursor#39 (byte*) print_line_cursor#41 -Identical Phi Values (byte*) print_char_cursor#44 (byte*) print_char_cursor#46 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [22] (byte*~) main::$1 ← (const byte*) COLS#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 @@ -1802,8 +1759,6 @@ Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← Successful SSA optimization Pass2ConstantValues Resolved ranged next value [25] main::col#1 ← ++ main::col#2 to ++ Resolved ranged comparison value [26] if(main::col#1!=rangelast(COLS#0,main::$1)) goto main::@1 to (byte*)(const byte*) main::$1+(number) 1 -Eliminating unused variable - keeping the phi block (byte*) print_line_cursor#41 -Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) 1 in if((byte*) main::col#1!=(byte*)(const byte*) main::$1+(number) 1) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast (const byte*) main::$1+(unumber)(number) 1 @@ -1811,10 +1766,6 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) makecharset::charset#7 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) makecharset::charset#7 (const byte*) makecharset::charset#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [28] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff Constant right-side identified [31] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 Constant right-side identified [37] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff diff --git a/src/test/ref/examples/rotate/rotate.log b/src/test/ref/examples/rotate/rotate.log index 4fe5403fa..a7621e411 100644 --- a/src/test/ref/examples/rotate/rotate.log +++ b/src/test/ref/examples/rotate/rotate.log @@ -1615,14 +1615,6 @@ Alias (byte) anim::angle#10 = (byte) anim::angle#3 Alias (signed byte) anim::sin_a#1 = (signed byte) anim::sin_a#7 Alias (byte*) COS#10 = (byte*) COS#13 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init::sprites_ptr#1 -Self Phi Eliminated (byte*) COS#1 -Self Phi Eliminated (byte) anim::angle#2 -Self Phi Eliminated (signed byte) anim::cos_a#1 -Self Phi Eliminated (signed byte) anim::sin_a#1 -Self Phi Eliminated (byte) anim::angle#10 -Self Phi Eliminated (byte*) COS#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) mulf8u_prepared::b#1 (byte) mulf8u_prepared::b#0 Identical Phi Values (dword) print_dword_at::dw#1 (dword) print_dword_at::dw#0 Identical Phi Values (byte*) print_dword_at::at#1 (byte*) print_dword_at::at#0 @@ -1636,6 +1628,8 @@ Identical Phi Values (signed byte) anim::sin_a#1 (signed byte) anim::sin_a#0 Identical Phi Values (byte) anim::angle#10 (byte) anim::angle#2 Identical Phi Values (byte*) COS#10 (byte*) COS#1 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) COS#4 (byte*) COS#0 +Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [135] (byte~) clock_start::$2 ← (byte) CIA_TIMER_CONTROL_STOP#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 Identified duplicate assignment right side [142] (byte~) clock_start::$6 ← (byte) CIA_TIMER_CONTROL_START#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 Successful SSA optimization Pass2DuplicateRValueIdentification @@ -1736,10 +1730,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) COS#4 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) COS#4 (byte*) COS#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (byte*) mulf_init::sqr1_hi#0 ← (const byte[$200]) mulf_sqr1_hi#0 + (byte) 1 Constant right-side identified [1] (byte*) mulf_init::sqr1_lo#0 ← (const byte[$200]) mulf_sqr1_lo#0 + (byte) 1 Constant right-side identified [14] (byte*~) mulf_init::$13 ← (const byte[$200]) mulf_sqr1_lo#0 + (word) $200 diff --git a/src/test/ref/examples/scroll/scroll.cfg b/src/test/ref/examples/scroll/scroll.cfg index ae5a1410c..ddf07069a 100644 --- a/src/test/ref/examples/scroll/scroll.cfg +++ b/src/test/ref/examples/scroll/scroll.cfg @@ -12,8 +12,8 @@ main: scope:[main] from @1 [5] call fillscreen to:main::@1 main::@1: scope:[main] from main main::@1 main::@4 - [6] (byte*) main::nxt#9 ← phi( main/(const byte*) TEXT#0 main::@4/(byte*) main::nxt#10 ) - [6] (byte) main::scroll#7 ← phi( main/(byte) 7 main::@4/(byte) main::scroll#4 ) + [6] (byte*) main::nxt#9 ← phi( main/(const byte*) TEXT#0 main::@1/(byte*) main::nxt#9 main::@4/(byte*) main::nxt#10 ) + [6] (byte) main::scroll#7 ← phi( main/(byte) 7 main::@1/(byte) main::scroll#7 main::@4/(byte) main::scroll#4 ) [7] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 diff --git a/src/test/ref/examples/scroll/scroll.log b/src/test/ref/examples/scroll/scroll.log index 5633699e4..104f60dbc 100644 --- a/src/test/ref/examples/scroll/scroll.log +++ b/src/test/ref/examples/scroll/scroll.log @@ -274,15 +274,6 @@ Alias (byte*) fillscreen::cursor#0 = (byte*) fillscreen::screen#1 Successful SSA optimization Pass2AliasElimination Alias (byte) main::scroll#10 = (byte) main::scroll#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::scroll#7 -Self Phi Eliminated (byte*) main::nxt#9 -Self Phi Eliminated (byte) main::scroll#3 -Self Phi Eliminated (byte*) main::nxt#6 -Self Phi Eliminated (byte*) main::nxt#3 -Self Phi Eliminated (byte) main::scroll#10 -Self Phi Eliminated (byte) fillscreen::fill#1 -Self Phi Eliminated (byte*) fillscreen::screen#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::scroll#3 (byte) main::scroll#7 Identical Phi Values (byte*) main::nxt#6 (byte*) main::nxt#9 Identical Phi Values (byte*) main::nxt#3 (byte*) main::nxt#6 @@ -342,9 +333,10 @@ Consolidated array index constant in *(main::line#0+$27) Successful SSA optimization Pass2ConstantAdditionElimination Alias (byte) main::i#2 = (byte~) main::$6 Successful SSA optimization Pass2AliasElimination -Added new block during phi lifting main::@14(between main::@5 and main::@7) -Added new block during phi lifting main::@15(between main::@8 and main::@8) -Added new block during phi lifting main::@16(between main::@9 and main::@11) +Added new block during phi lifting main::@14(between main::@2 and main::@2) +Added new block during phi lifting main::@15(between main::@5 and main::@7) +Added new block during phi lifting main::@16(between main::@8 and main::@8) +Added new block during phi lifting main::@17(between main::@9 and main::@11) Added new block during phi lifting fillscreen::@3(between fillscreen::@1 and fillscreen::@1) Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 @@ -360,19 +352,22 @@ Calls in [main] to fillscreen:6 Created 8 initial phi equivalence classes Coalesced [22] main::c#3 ← main::c#1 -Coalesced [26] main::nxt#12 ← main::nxt#1 -Coalesced [30] main::scroll#11 ← main::scroll#4 -Coalesced [31] main::nxt#11 ← main::nxt#10 +Coalesced [26] main::nxt#13 ← main::nxt#1 +Coalesced [30] main::scroll#12 ← main::scroll#4 +Coalesced [31] main::nxt#12 ← main::nxt#10 Coalesced [32] main::c#4 ← main::c#0 -Coalesced [33] main::nxt#14 ← main::nxt#9 +Coalesced [33] main::nxt#15 ← main::nxt#9 Coalesced [34] main::i#3 ← main::i#1 -Coalesced [35] main::scroll#12 ← main::scroll#1 -Coalesced (already) [36] main::nxt#13 ← main::nxt#9 -Coalesced [43] fillscreen::cursor#3 ← fillscreen::cursor#1 +Coalesced [35] main::scroll#13 ← main::scroll#1 +Coalesced (already) [36] main::nxt#14 ← main::nxt#9 +Coalesced (already) [37] main::scroll#11 ← main::scroll#7 +Coalesced (already) [38] main::nxt#11 ← main::nxt#9 +Coalesced [45] fillscreen::cursor#3 ← fillscreen::cursor#1 Coalesced down to 5 phi equivalence classes Culled Empty Block (label) @3 Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@17 Culled Empty Block (label) main::@16 Culled Empty Block (label) main::@15 Culled Empty Block (label) main::@14 @@ -407,8 +402,8 @@ main: scope:[main] from @1 [5] call fillscreen to:main::@1 main::@1: scope:[main] from main main::@1 main::@4 - [6] (byte*) main::nxt#9 ← phi( main/(const byte*) TEXT#0 main::@4/(byte*) main::nxt#10 ) - [6] (byte) main::scroll#7 ← phi( main/(byte) 7 main::@4/(byte) main::scroll#4 ) + [6] (byte*) main::nxt#9 ← phi( main/(const byte*) TEXT#0 main::@1/(byte*) main::nxt#9 main::@4/(byte*) main::nxt#10 ) + [6] (byte) main::scroll#7 ← phi( main/(byte) 7 main::@1/(byte) main::scroll#7 main::@4/(byte) main::scroll#4 ) [7] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 @@ -483,11 +478,11 @@ VARIABLE REGISTER WEIGHTS (byte*) main::nxt#1 22.0 (byte*) main::nxt#10 11.0 (byte*) main::nxt#4 11.0 -(byte*) main::nxt#9 3.6666666666666665 +(byte*) main::nxt#9 20.500000000000004 (byte) main::scroll (byte) main::scroll#1 16.5 (byte) main::scroll#4 11.0 -(byte) main::scroll#7 5.5 +(byte) main::scroll#7 56.0 Initial phi equivalence classes [ main::scroll#7 main::scroll#4 main::scroll#1 ] @@ -557,8 +552,11 @@ main: { sta scroll jmp b1 // Wait for raster - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@4 to main::@1 [phi:main::@1/main::@4->main::@1] b1_from_b1: + b1_from_b4: + // [6] phi (byte*) main::nxt#9 = (byte*) main::nxt#9 [phi:main::@1/main::@4->main::@1#0] -- register_copy + // [6] phi (byte) main::scroll#7 = (byte) main::scroll#7 [phi:main::@1/main::@4->main::@1#1] -- register_copy jmp b1 // main::@1 b1: @@ -668,11 +666,7 @@ main: { sta SCROLL // [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [6] phi (byte*) main::nxt#9 = (byte*) main::nxt#10 [phi:main::@4->main::@1#0] -- register_copy - // [6] phi (byte) main::scroll#7 = (byte) main::scroll#4 [phi:main::@4->main::@1#1] -- register_copy - jmp b1 + jmp b1_from_b4 } // fillscreen fillscreen: { @@ -741,13 +735,13 @@ Potential registers zp ZP_WORD:5 [ main::nxt#4 main::nxt#9 main::nxt#10 main::nx Potential registers zp ZP_WORD:7 [ fillscreen::cursor#2 fillscreen::cursor#1 ] : zp ZP_WORD:7 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 353.5: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 71.5: zp ZP_BYTE:4 [ main::c#2 main::c#1 main::c#0 ] 47.67: zp ZP_WORD:5 [ main::nxt#4 main::nxt#9 main::nxt#10 main::nxt#1 ] 33: zp ZP_BYTE:2 [ main::scroll#7 main::scroll#4 main::scroll#1 ] +Uplift Scope [main] 353.5: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 83.5: zp ZP_BYTE:2 [ main::scroll#7 main::scroll#4 main::scroll#1 ] 71.5: zp ZP_BYTE:4 [ main::c#2 main::c#1 main::c#0 ] 64.5: zp ZP_WORD:5 [ main::nxt#4 main::nxt#9 main::nxt#10 main::nxt#1 ] Uplift Scope [fillscreen] 33: zp ZP_WORD:7 [ fillscreen::cursor#2 fillscreen::cursor#1 ] Uplift Scope [] -Uplifting [main] best 8554 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::c#2 main::c#1 main::c#0 ] zp ZP_WORD:5 [ main::nxt#4 main::nxt#9 main::nxt#10 main::nxt#1 ] reg byte x [ main::scroll#7 main::scroll#4 main::scroll#1 ] -Uplifting [fillscreen] best 8554 combination zp ZP_WORD:7 [ fillscreen::cursor#2 fillscreen::cursor#1 ] -Uplifting [] best 8554 combination +Uplifting [main] best 8284 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::scroll#7 main::scroll#4 main::scroll#1 ] reg byte x [ main::c#2 main::c#1 main::c#0 ] zp ZP_WORD:5 [ main::nxt#4 main::nxt#9 main::nxt#10 main::nxt#1 ] +Uplifting [fillscreen] best 8284 combination zp ZP_WORD:7 [ fillscreen::cursor#2 fillscreen::cursor#1 ] +Uplifting [] best 8284 combination Allocated (was zp ZP_WORD:5) zp ZP_WORD:2 [ main::nxt#4 main::nxt#9 main::nxt#10 main::nxt#1 ] Allocated (was zp ZP_WORD:7) zp ZP_WORD:4 [ fillscreen::cursor#2 fillscreen::cursor#1 ] @@ -797,8 +791,11 @@ main: { ldx #7 jmp b1 // Wait for raster - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@4 to main::@1 [phi:main::@1/main::@4->main::@1] b1_from_b1: + b1_from_b4: + // [6] phi (byte*) main::nxt#9 = (byte*) main::nxt#9 [phi:main::@1/main::@4->main::@1#0] -- register_copy + // [6] phi (byte) main::scroll#7 = (byte) main::scroll#7 [phi:main::@1/main::@4->main::@1#1] -- register_copy jmp b1 // main::@1 b1: @@ -899,11 +896,7 @@ main: { stx SCROLL // [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [6] phi (byte*) main::nxt#9 = (byte*) main::nxt#10 [phi:main::@4->main::@1#0] -- register_copy - // [6] phi (byte) main::scroll#7 = (byte) main::scroll#4 [phi:main::@4->main::@1#1] -- register_copy - jmp b1 + jmp b1_from_b4 } // fillscreen fillscreen: { @@ -968,6 +961,7 @@ Replacing label b1_from_b1 with b1 Replacing label b4_from_b3 with b4 Replacing label b5_from_b5 with b5 Replacing label b8_from_b6 with b8 +Replacing label b1_from_b4 with b1 Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: @@ -975,6 +969,7 @@ Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b1_from_b1: +Removing instruction b1_from_b4: Removing instruction b5_from_b5: Removing instruction b8_from_b6: Removing instruction b4_from_b3: @@ -989,7 +984,6 @@ Removing instruction b6: Removing instruction b7: Removing instruction b8_from_b7: Removing instruction b4_from_b8: -Removing instruction b1_from_b4: Removing instruction b1_from_fillscreen: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -1050,11 +1044,11 @@ FINAL SYMBOL TABLE (byte*) main::nxt#1 nxt zp ZP_WORD:2 22.0 (byte*) main::nxt#10 nxt zp ZP_WORD:2 11.0 (byte*) main::nxt#4 nxt zp ZP_WORD:2 11.0 -(byte*) main::nxt#9 nxt zp ZP_WORD:2 3.6666666666666665 +(byte*) main::nxt#9 nxt zp ZP_WORD:2 20.500000000000004 (byte) main::scroll (byte) main::scroll#1 reg byte x 16.5 (byte) main::scroll#4 reg byte x 11.0 -(byte) main::scroll#7 reg byte x 5.5 +(byte) main::scroll#7 reg byte x 56.0 reg byte x [ main::scroll#7 main::scroll#4 main::scroll#1 ] reg byte x [ main::i#2 main::i#1 ] @@ -1064,7 +1058,7 @@ zp ZP_WORD:4 [ fillscreen::cursor#2 fillscreen::cursor#1 ] FINAL ASSEMBLER -Score: 6202 +Score: 5932 // File Comments // Basic Upstart @@ -1100,7 +1094,9 @@ main: { // [6] phi (byte) main::scroll#7 = (byte) 7 [phi:main->main::@1#1] -- vbuxx=vbuc1 ldx #7 // Wait for raster - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@4 to main::@1 [phi:main::@1/main::@4->main::@1] + // [6] phi (byte*) main::nxt#9 = (byte*) main::nxt#9 [phi:main::@1/main::@4->main::@1#0] -- register_copy + // [6] phi (byte) main::scroll#7 = (byte) main::scroll#7 [phi:main::@1/main::@4->main::@1#1] -- register_copy // main::@1 b1: // while(*RASTER!=$fe) @@ -1194,9 +1190,6 @@ main: { // --*BGCOL; // [24] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [6] phi (byte*) main::nxt#9 = (byte*) main::nxt#10 [phi:main::@4->main::@1#0] -- register_copy - // [6] phi (byte) main::scroll#7 = (byte) main::scroll#4 [phi:main::@4->main::@1#1] -- register_copy jmp b1 } // fillscreen diff --git a/src/test/ref/examples/scroll/scroll.sym b/src/test/ref/examples/scroll/scroll.sym index 2ccf0affb..df47ee36c 100644 --- a/src/test/ref/examples/scroll/scroll.sym +++ b/src/test/ref/examples/scroll/scroll.sym @@ -42,11 +42,11 @@ (byte*) main::nxt#1 nxt zp ZP_WORD:2 22.0 (byte*) main::nxt#10 nxt zp ZP_WORD:2 11.0 (byte*) main::nxt#4 nxt zp ZP_WORD:2 11.0 -(byte*) main::nxt#9 nxt zp ZP_WORD:2 3.6666666666666665 +(byte*) main::nxt#9 nxt zp ZP_WORD:2 20.500000000000004 (byte) main::scroll (byte) main::scroll#1 reg byte x 16.5 (byte) main::scroll#4 reg byte x 11.0 -(byte) main::scroll#7 reg byte x 5.5 +(byte) main::scroll#7 reg byte x 56.0 reg byte x [ main::scroll#7 main::scroll#4 main::scroll#1 ] reg byte x [ main::i#2 main::i#1 ] diff --git a/src/test/ref/examples/scrollbig/scrollbig.cfg b/src/test/ref/examples/scrollbig/scrollbig.cfg index 674260515..627fd1860 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.cfg +++ b/src/test/ref/examples/scrollbig/scrollbig.cfg @@ -12,10 +12,10 @@ main: scope:[main] from @1 [5] call fillscreen to:main::@1 main::@1: scope:[main] from main main::@1 main::@4 - [6] (byte*) current_chargen#27 ← phi( main/(const byte*) CHARGEN#0 main::@4/(byte*) current_chargen#11 ) - [6] (byte*) nxt#31 ← phi( main/(const byte*) TEXT#0 main::@4/(byte*) nxt#14 ) - [6] (byte) current_bit#29 ← phi( main/(byte) 1 main::@4/(byte) current_bit#12 ) - [6] (byte) scroll#18 ← phi( main/(byte) 7 main::@4/(byte) scroll#10 ) + [6] (byte*) current_chargen#27 ← phi( main::@1/(byte*) current_chargen#27 main/(const byte*) CHARGEN#0 main::@4/(byte*) current_chargen#11 ) + [6] (byte*) nxt#31 ← phi( main::@1/(byte*) nxt#31 main/(const byte*) TEXT#0 main::@4/(byte*) nxt#14 ) + [6] (byte) current_bit#29 ← phi( main::@1/(byte) current_bit#29 main/(byte) 1 main::@4/(byte) current_bit#12 ) + [6] (byte) scroll#18 ← phi( main::@1/(byte) scroll#18 main/(byte) 7 main::@4/(byte) scroll#10 ) [7] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 diff --git a/src/test/ref/examples/scrollbig/scrollbig.log b/src/test/ref/examples/scrollbig/scrollbig.log index b5e821368..7b1b72f16 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.log +++ b/src/test/ref/examples/scrollbig/scrollbig.log @@ -833,20 +833,6 @@ Alias (byte*) current_chargen#12 = (byte*) current_chargen#13 Alias (byte) current_bit#14 = (byte) current_bit#15 Alias (byte*) nxt#16 = (byte*) nxt#32 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) scroll#18 -Self Phi Eliminated (byte) current_bit#29 -Self Phi Eliminated (byte*) nxt#31 -Self Phi Eliminated (byte*) current_chargen#27 -Self Phi Eliminated (byte) scroll#13 -Self Phi Eliminated (byte) current_bit#17 -Self Phi Eliminated (byte*) nxt#21 -Self Phi Eliminated (byte*) current_chargen#15 -Self Phi Eliminated (byte*) current_chargen#12 -Self Phi Eliminated (byte) current_bit#14 -Self Phi Eliminated (byte*) nxt#16 -Self Phi Eliminated (byte) fillscreen::fill#1 -Self Phi Eliminated (byte*) fillscreen::screen#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) scroll#20 (byte) scroll#15 Identical Phi Values (byte) current_bit#30 (byte) current_bit#23 Identical Phi Values (byte*) nxt#34 (byte*) TEXT#0 @@ -1026,6 +1012,7 @@ Consolidated array index constant in assignment *(SCREEN#0+(word)$28*7+1 + scrol Successful SSA optimization Pass2ConstantAdditionElimination Alias (byte) scroll_hard::i#2 = (byte~) scroll_hard::$2 (byte~) scroll_hard::$5 (byte~) scroll_hard::$8 (byte~) scroll_hard::$11 (byte~) scroll_hard::$14 (byte~) scroll_hard::$17 (byte~) scroll_hard::$20 (byte~) scroll_hard::$23 Successful SSA optimization Pass2AliasElimination +Added new block during phi lifting main::@9(between main::@2 and main::@2) Added new block during phi lifting scroll_soft::@4(between scroll_soft and scroll_soft::@1) Added new block during phi lifting scroll_bit::@9(between scroll_bit and scroll_bit::@1) Added new block during phi lifting scroll_bit::@10(between scroll_bit::@4 and scroll_bit::@3) @@ -1049,39 +1036,44 @@ Adding NOP phi() at start of fillscreen CALL GRAPH Calls in [] to main:5 Calls in [main] to fillscreen:9 scroll_soft:15 -Calls in [scroll_soft] to scroll_bit:24 -Calls in [scroll_bit] to next_char:38 scroll_hard:46 +Calls in [scroll_soft] to scroll_bit:28 +Calls in [scroll_bit] to next_char:42 scroll_hard:50 Created 18 initial phi equivalence classes -Coalesced [17] scroll#22 ← scroll#10 -Coalesced [18] current_bit#32 ← current_bit#12 -Coalesced [19] nxt#38 ← nxt#14 -Coalesced [20] current_chargen#31 ← current_chargen#11 -Coalesced [25] current_bit#34 ← current_bit#21 -Coalesced [26] nxt#40 ← nxt#35 -Coalesced [27] current_chargen#33 ← current_chargen#19 -Coalesced [31] scroll#23 ← scroll#3 -Coalesced (already) [32] current_bit#33 ← current_bit#29 -Coalesced (already) [33] nxt#39 ← nxt#31 -Coalesced (already) [34] current_chargen#32 ← current_chargen#27 -Coalesced [43] current_chargen#35 ← current_chargen#5 -Coalesced [44] nxt#42 ← nxt#19 -Coalesced [62] scroll_bit::r#5 ← scroll_bit::r#1 -Coalesced [63] scroll_bit::sc#5 ← scroll_bit::sc#1 -Coalesced (already) [64] current_chargen#34 ← current_chargen#27 -Coalesced [65] current_bit#35 ← current_bit#5 -Coalesced (already) [66] nxt#41 ← nxt#31 -Coalesced [80] scroll_hard::i#3 ← scroll_hard::i#1 -Coalesced [84] next_char::return#6 ← next_char::c#1 -Coalesced [88] nxt#43 ← nxt#31 -Coalesced [89] next_char::return#5 ← next_char::c#0 -Coalesced [96] fillscreen::cursor#3 ← fillscreen::cursor#1 +Coalesced [17] scroll#23 ← scroll#10 +Coalesced [18] current_bit#33 ← current_bit#12 +Coalesced [19] nxt#39 ← nxt#14 +Coalesced [20] current_chargen#32 ← current_chargen#11 +Coalesced (already) [21] scroll#22 ← scroll#18 +Coalesced (already) [22] current_bit#32 ← current_bit#29 +Coalesced (already) [23] nxt#38 ← nxt#31 +Coalesced (already) [24] current_chargen#31 ← current_chargen#27 +Coalesced [29] current_bit#35 ← current_bit#21 +Coalesced [30] nxt#41 ← nxt#35 +Coalesced [31] current_chargen#34 ← current_chargen#19 +Coalesced [35] scroll#24 ← scroll#3 +Coalesced (already) [36] current_bit#34 ← current_bit#29 +Coalesced (already) [37] nxt#40 ← nxt#31 +Coalesced (already) [38] current_chargen#33 ← current_chargen#27 +Coalesced [47] current_chargen#36 ← current_chargen#5 +Coalesced [48] nxt#43 ← nxt#19 +Coalesced [66] scroll_bit::r#5 ← scroll_bit::r#1 +Coalesced [67] scroll_bit::sc#5 ← scroll_bit::sc#1 +Coalesced (already) [68] current_chargen#35 ← current_chargen#27 +Coalesced [69] current_bit#36 ← current_bit#5 +Coalesced (already) [70] nxt#42 ← nxt#31 +Coalesced [84] scroll_hard::i#3 ← scroll_hard::i#1 +Coalesced [88] next_char::return#6 ← next_char::c#1 +Coalesced [92] nxt#44 ← nxt#31 +Coalesced [93] next_char::return#5 ← next_char::c#0 +Coalesced [100] fillscreen::cursor#3 ← fillscreen::cursor#1 Coalesced down to 10 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) @3 Culled Empty Block (label) @7 Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@9 Culled Empty Block (label) scroll_soft::@3 Culled Empty Block (label) scroll_soft::@4 Culled Empty Block (label) scroll_bit::@10 @@ -1119,10 +1111,10 @@ main: scope:[main] from @1 [5] call fillscreen to:main::@1 main::@1: scope:[main] from main main::@1 main::@4 - [6] (byte*) current_chargen#27 ← phi( main/(const byte*) CHARGEN#0 main::@4/(byte*) current_chargen#11 ) - [6] (byte*) nxt#31 ← phi( main/(const byte*) TEXT#0 main::@4/(byte*) nxt#14 ) - [6] (byte) current_bit#29 ← phi( main/(byte) 1 main::@4/(byte) current_bit#12 ) - [6] (byte) scroll#18 ← phi( main/(byte) 7 main::@4/(byte) scroll#10 ) + [6] (byte*) current_chargen#27 ← phi( main::@1/(byte*) current_chargen#27 main/(const byte*) CHARGEN#0 main::@4/(byte*) current_chargen#11 ) + [6] (byte*) nxt#31 ← phi( main::@1/(byte*) nxt#31 main/(const byte*) TEXT#0 main::@4/(byte*) nxt#14 ) + [6] (byte) current_bit#29 ← phi( main::@1/(byte) current_bit#29 main/(byte) 1 main::@4/(byte) current_bit#12 ) + [6] (byte) scroll#18 ← phi( main::@1/(byte) scroll#18 main/(byte) 7 main::@4/(byte) scroll#10 ) [7] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 @@ -1260,12 +1252,12 @@ VARIABLE REGISTER WEIGHTS (byte) current_bit (byte) current_bit#12 3.0 (byte) current_bit#21 5.833333333333333 -(byte) current_bit#29 2.142857142857143 +(byte) current_bit#29 31.0 (byte) current_bit#5 3.0 (byte*) current_chargen (byte*) current_chargen#11 3.0 (byte*) current_chargen#19 5.944444444444444 -(byte*) current_chargen#27 1.666666666666667 +(byte*) current_chargen#27 24.111111111111107 (byte*) current_chargen#5 4.0 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (byte*) fillscreen::cursor @@ -1285,11 +1277,11 @@ VARIABLE REGISTER WEIGHTS (byte*) nxt#14 3.0 (byte*) nxt#18 4.0 (byte*) nxt#19 0.5714285714285714 -(byte*) nxt#31 1.5833333333333335 +(byte*) nxt#31 18.41666666666667 (byte*) nxt#35 0.3333333333333333 (byte) scroll (byte) scroll#10 3.0 -(byte) scroll#18 3.25 +(byte) scroll#18 53.75 (byte) scroll#3 3.0 (void()) scroll_bit() (word~) scroll_bit::$7 4.0 @@ -1420,8 +1412,13 @@ main: { sta scroll jmp b1 // Wait for raster - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@4 to main::@1 [phi:main::@1/main::@4->main::@1] b1_from_b1: + b1_from_b4: + // [6] phi (byte*) current_chargen#27 = (byte*) current_chargen#27 [phi:main::@1/main::@4->main::@1#0] -- register_copy + // [6] phi (byte*) nxt#31 = (byte*) nxt#31 [phi:main::@1/main::@4->main::@1#1] -- register_copy + // [6] phi (byte) current_bit#29 = (byte) current_bit#29 [phi:main::@1/main::@4->main::@1#2] -- register_copy + // [6] phi (byte) scroll#18 = (byte) scroll#18 [phi:main::@1/main::@4->main::@1#3] -- register_copy jmp b1 // main::@1 b1: @@ -1448,13 +1445,7 @@ main: { b4: // [11] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [6] phi (byte*) current_chargen#27 = (byte*) current_chargen#11 [phi:main::@4->main::@1#0] -- register_copy - // [6] phi (byte*) nxt#31 = (byte*) nxt#14 [phi:main::@4->main::@1#1] -- register_copy - // [6] phi (byte) current_bit#29 = (byte) current_bit#12 [phi:main::@4->main::@1#2] -- register_copy - // [6] phi (byte) scroll#18 = (byte) scroll#10 [phi:main::@4->main::@1#3] -- register_copy - jmp b1 + jmp b1_from_b4 } // scroll_soft scroll_soft: { @@ -1880,22 +1871,22 @@ Potential registers zp ZP_BYTE:22 [ scroll_bit::$9 ] : zp ZP_BYTE:22 , reg byte REGISTER UPLIFT SCOPES Uplift Scope [scroll_bit] 202: zp ZP_BYTE:21 [ scroll_bit::bits#0 ] 202: zp ZP_BYTE:22 [ scroll_bit::$9 ] 189.38: zp ZP_BYTE:6 [ scroll_bit::r#2 scroll_bit::r#1 ] 110.62: zp ZP_WORD:7 [ scroll_bit::sc#2 scroll_bit::sc#1 ] 101: zp ZP_BYTE:9 [ scroll_bit::b#2 ] 4: zp ZP_WORD:17 [ scroll_bit::c#0 ] 4: zp ZP_WORD:19 [ scroll_bit::$7 ] Uplift Scope [scroll_hard] 353.5: zp ZP_BYTE:10 [ scroll_hard::i#2 scroll_hard::i#1 ] -Uplift Scope [] 14.61: zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 ] 13.98: zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] 9.49: zp ZP_WORD:11 [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] 9.25: zp ZP_BYTE:2 [ scroll#18 scroll#10 scroll#3 ] +Uplift Scope [] 59.75: zp ZP_BYTE:2 [ scroll#18 scroll#10 scroll#3 ] 42.83: zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] 37.06: zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 ] 26.32: zp ZP_WORD:11 [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] Uplift Scope [fillscreen] 33: zp ZP_WORD:14 [ fillscreen::cursor#2 fillscreen::cursor#1 ] Uplift Scope [next_char] 8.5: zp ZP_BYTE:13 [ next_char::return#1 next_char::c#0 next_char::c#1 ] 4: zp ZP_BYTE:16 [ next_char::return#0 ] Uplift Scope [main] Uplift Scope [scroll_soft] -Uplifting [scroll_bit] best 28232 combination reg byte a [ scroll_bit::bits#0 ] reg byte a [ scroll_bit::$9 ] reg byte x [ scroll_bit::r#2 scroll_bit::r#1 ] zp ZP_WORD:7 [ scroll_bit::sc#2 scroll_bit::sc#1 ] reg byte a [ scroll_bit::b#2 ] zp ZP_WORD:17 [ scroll_bit::c#0 ] zp ZP_WORD:19 [ scroll_bit::$7 ] +Uplifting [scroll_bit] best 27962 combination reg byte a [ scroll_bit::bits#0 ] reg byte a [ scroll_bit::$9 ] reg byte x [ scroll_bit::r#2 scroll_bit::r#1 ] zp ZP_WORD:7 [ scroll_bit::sc#2 scroll_bit::sc#1 ] reg byte a [ scroll_bit::b#2 ] zp ZP_WORD:17 [ scroll_bit::c#0 ] zp ZP_WORD:19 [ scroll_bit::$7 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [scroll_hard] best 24932 combination reg byte x [ scroll_hard::i#2 scroll_hard::i#1 ] -Uplifting [] best 24620 combination zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 ] zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] zp ZP_WORD:11 [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] reg byte x [ scroll#18 scroll#10 scroll#3 ] -Uplifting [fillscreen] best 24620 combination zp ZP_WORD:14 [ fillscreen::cursor#2 fillscreen::cursor#1 ] -Uplifting [next_char] best 24606 combination reg byte x [ next_char::return#1 next_char::c#0 next_char::c#1 ] reg byte a [ next_char::return#0 ] -Uplifting [main] best 24606 combination -Uplifting [scroll_soft] best 24606 combination +Uplifting [scroll_hard] best 24662 combination reg byte x [ scroll_hard::i#2 scroll_hard::i#1 ] +Uplifting [] best 24350 combination reg byte x [ scroll#18 scroll#10 scroll#3 ] zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 ] zp ZP_WORD:11 [ nxt#18 nxt#31 nxt#14 nxt#35 nxt#19 ] +Uplifting [fillscreen] best 24350 combination zp ZP_WORD:14 [ fillscreen::cursor#2 fillscreen::cursor#1 ] +Uplifting [next_char] best 24336 combination reg byte x [ next_char::return#1 next_char::c#0 next_char::c#1 ] reg byte a [ next_char::return#0 ] +Uplifting [main] best 24336 combination +Uplifting [scroll_soft] best 24336 combination Attempting to uplift remaining variables inzp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] -Uplifting [] best 24606 combination zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] +Uplifting [] best 24336 combination zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] Coalescing zero page register with common assignment [ zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 ] ] with [ zp ZP_WORD:19 [ scroll_bit::$7 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 scroll_bit::$7 ] ] with [ zp ZP_WORD:17 [ scroll_bit::c#0 ] ] - score: 1 Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ] @@ -1962,8 +1953,13 @@ main: { ldx #7 jmp b1 // Wait for raster - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@4 to main::@1 [phi:main::@1/main::@4->main::@1] b1_from_b1: + b1_from_b4: + // [6] phi (byte*) current_chargen#27 = (byte*) current_chargen#27 [phi:main::@1/main::@4->main::@1#0] -- register_copy + // [6] phi (byte*) nxt#31 = (byte*) nxt#31 [phi:main::@1/main::@4->main::@1#1] -- register_copy + // [6] phi (byte) current_bit#29 = (byte) current_bit#29 [phi:main::@1/main::@4->main::@1#2] -- register_copy + // [6] phi (byte) scroll#18 = (byte) scroll#18 [phi:main::@1/main::@4->main::@1#3] -- register_copy jmp b1 // main::@1 b1: @@ -1990,13 +1986,7 @@ main: { b4: // [11] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - b1_from_b4: - // [6] phi (byte*) current_chargen#27 = (byte*) current_chargen#11 [phi:main::@4->main::@1#0] -- register_copy - // [6] phi (byte*) nxt#31 = (byte*) nxt#14 [phi:main::@4->main::@1#1] -- register_copy - // [6] phi (byte) current_bit#29 = (byte) current_bit#12 [phi:main::@4->main::@1#2] -- register_copy - // [6] phi (byte) scroll#18 = (byte) scroll#10 [phi:main::@4->main::@1#3] -- register_copy - jmp b1 + jmp b1_from_b4 } // scroll_soft scroll_soft: { @@ -2345,6 +2335,7 @@ Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label b1_from_b1 with b1 +Replacing label b1_from_b4 with b1 Replacing label b1_from_scroll_soft with b1 Replacing label b1_from_scroll_bit with b1 Replacing label b3_from_b4 with b3 @@ -2357,6 +2348,7 @@ Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b1_from_b1: +Removing instruction b1_from_b4: Removing instruction b2_from_scroll_soft: Removing instruction b1_from_scroll_soft: Removing instruction b2_from_scroll_bit: @@ -2374,7 +2366,6 @@ Removing instruction fillscreen_from_main: Removing instruction b1_from_main: Removing instruction b3: Removing instruction b4: -Removing instruction b1_from_b4: Removing instruction b2: Removing instruction b1_from_b2: Removing instruction breturn: @@ -2431,12 +2422,12 @@ FINAL SYMBOL TABLE (byte) current_bit (byte) current_bit#12 current_bit zp ZP_BYTE:2 3.0 (byte) current_bit#21 current_bit zp ZP_BYTE:2 5.833333333333333 -(byte) current_bit#29 current_bit zp ZP_BYTE:2 2.142857142857143 +(byte) current_bit#29 current_bit zp ZP_BYTE:2 31.0 (byte) current_bit#5 current_bit zp ZP_BYTE:2 3.0 (byte*) current_chargen (byte*) current_chargen#11 current_chargen zp ZP_WORD:3 3.0 (byte*) current_chargen#19 current_chargen zp ZP_WORD:3 5.944444444444444 -(byte*) current_chargen#27 current_chargen zp ZP_WORD:3 1.666666666666667 +(byte*) current_chargen#27 current_chargen zp ZP_WORD:3 24.111111111111107 (byte*) current_chargen#5 current_chargen zp ZP_WORD:3 4.0 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (label) fillscreen::@1 @@ -2466,11 +2457,11 @@ FINAL SYMBOL TABLE (byte*) nxt#14 nxt zp ZP_WORD:7 3.0 (byte*) nxt#18 nxt zp ZP_WORD:7 4.0 (byte*) nxt#19 nxt zp ZP_WORD:7 0.5714285714285714 -(byte*) nxt#31 nxt zp ZP_WORD:7 1.5833333333333335 +(byte*) nxt#31 nxt zp ZP_WORD:7 18.41666666666667 (byte*) nxt#35 nxt zp ZP_WORD:7 0.3333333333333333 (byte) scroll (byte) scroll#10 reg byte x 3.0 -(byte) scroll#18 reg byte x 3.25 +(byte) scroll#18 reg byte x 53.75 (byte) scroll#3 reg byte x 3.0 (void()) scroll_bit() (word~) scroll_bit::$7 $7 zp ZP_WORD:3 4.0 @@ -2523,7 +2514,7 @@ reg byte a [ scroll_bit::$9 ] FINAL ASSEMBLER -Score: 20826 +Score: 20556 // File Comments // An 8x8 char letter scroller @@ -2571,7 +2562,11 @@ main: { // [6] phi (byte) scroll#18 = (byte) 7 [phi:main->main::@1#3] -- vbuxx=vbuc1 ldx #7 // Wait for raster - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@4 to main::@1 [phi:main::@1/main::@4->main::@1] + // [6] phi (byte*) current_chargen#27 = (byte*) current_chargen#27 [phi:main::@1/main::@4->main::@1#0] -- register_copy + // [6] phi (byte*) nxt#31 = (byte*) nxt#31 [phi:main::@1/main::@4->main::@1#1] -- register_copy + // [6] phi (byte) current_bit#29 = (byte) current_bit#29 [phi:main::@1/main::@4->main::@1#2] -- register_copy + // [6] phi (byte) scroll#18 = (byte) scroll#18 [phi:main::@1/main::@4->main::@1#3] -- register_copy // main::@1 b1: // while(*RASTER!=$fe) @@ -2597,11 +2592,6 @@ main: { // --*BGCOL; // [11] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BGCOL - // [6] phi from main::@4 to main::@1 [phi:main::@4->main::@1] - // [6] phi (byte*) current_chargen#27 = (byte*) current_chargen#11 [phi:main::@4->main::@1#0] -- register_copy - // [6] phi (byte*) nxt#31 = (byte*) nxt#14 [phi:main::@4->main::@1#1] -- register_copy - // [6] phi (byte) current_bit#29 = (byte) current_bit#12 [phi:main::@4->main::@1#2] -- register_copy - // [6] phi (byte) scroll#18 = (byte) scroll#10 [phi:main::@4->main::@1#3] -- register_copy jmp b1 } // scroll_soft diff --git a/src/test/ref/examples/scrollbig/scrollbig.sym b/src/test/ref/examples/scrollbig/scrollbig.sym index 4b5f134d2..59d6394b1 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.sym +++ b/src/test/ref/examples/scrollbig/scrollbig.sym @@ -18,12 +18,12 @@ (byte) current_bit (byte) current_bit#12 current_bit zp ZP_BYTE:2 3.0 (byte) current_bit#21 current_bit zp ZP_BYTE:2 5.833333333333333 -(byte) current_bit#29 current_bit zp ZP_BYTE:2 2.142857142857143 +(byte) current_bit#29 current_bit zp ZP_BYTE:2 31.0 (byte) current_bit#5 current_bit zp ZP_BYTE:2 3.0 (byte*) current_chargen (byte*) current_chargen#11 current_chargen zp ZP_WORD:3 3.0 (byte*) current_chargen#19 current_chargen zp ZP_WORD:3 5.944444444444444 -(byte*) current_chargen#27 current_chargen zp ZP_WORD:3 1.666666666666667 +(byte*) current_chargen#27 current_chargen zp ZP_WORD:3 24.111111111111107 (byte*) current_chargen#5 current_chargen zp ZP_WORD:3 4.0 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (label) fillscreen::@1 @@ -53,11 +53,11 @@ (byte*) nxt#14 nxt zp ZP_WORD:7 3.0 (byte*) nxt#18 nxt zp ZP_WORD:7 4.0 (byte*) nxt#19 nxt zp ZP_WORD:7 0.5714285714285714 -(byte*) nxt#31 nxt zp ZP_WORD:7 1.5833333333333335 +(byte*) nxt#31 nxt zp ZP_WORD:7 18.41666666666667 (byte*) nxt#35 nxt zp ZP_WORD:7 0.3333333333333333 (byte) scroll (byte) scroll#10 reg byte x 3.0 -(byte) scroll#18 reg byte x 3.25 +(byte) scroll#18 reg byte x 53.75 (byte) scroll#3 reg byte x 3.0 (void()) scroll_bit() (word~) scroll_bit::$7 $7 zp ZP_WORD:3 4.0 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index d19227f7e..5f4fd3574 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -2130,26 +2130,6 @@ Alias (signed word) mul16s::b#1 = (signed word) mul16s::b#2 Alias (signed word) mul16s::a#1 = (signed word) mul16s::a#3 Alias (byte) sin16s::isUpper#2 = (byte) sin16s::isUpper#8 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (signed word) sin16s_gen2::ampl#1 -Self Phi Eliminated (signed word) sin16s_gen2::offs#1 -Self Phi Eliminated (dword) sin16s_gen2::step#1 -Self Phi Eliminated (word) sin16s_gen2::wavelength#2 -Self Phi Eliminated (word) rem16u#16 -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (word) rem16u#23 -Self Phi Eliminated (word) xsin_idx#13 -Self Phi Eliminated (word) xsin_idx#10 -Self Phi Eliminated (byte) render_logo::screen_idx#8 -Self Phi Eliminated (byte) render_logo::logo_start#2 -Self Phi Eliminated (byte) render_logo::logo_idx#5 -Self Phi Eliminated (byte) render_logo::screen_idx#11 -Self Phi Eliminated (byte) render_logo::logo_idx#8 -Self Phi Eliminated (byte) render_logo::screen_idx#13 -Self Phi Eliminated (byte) render_logo::screen_idx#16 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 @@ -2193,6 +2173,7 @@ Identical Phi Values (word) rem16u#10 (word) rem16u#17 Identical Phi Values (word) xsin_idx#12 (word) xsin_idx#0 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#3 +Identical Phi Values (byte) render_logo::logo_start#1 (byte) render_logo::logo_start#0 Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [431] (byte~) render_logo::$14 ← (byte) $28 * (byte) render_logo::line#10 Identified duplicate assignment right side [448] (byte~) render_logo::$22 ← (byte) $28 * (byte) render_logo::line#11 @@ -2214,7 +2195,7 @@ Simple Condition (bool~) main::$6 [343] if((byte) main::ch#1!=rangelast(0,$ef)) Simple Condition (bool~) loop::$0 [366] if(*((byte*) RASTER#0)!=(byte) $ff) goto loop::@4 Simple Condition (bool~) loop::$4 [378] if((word) xsin_idx#3!=(word) XSIN_SIZE#0) goto loop::@11 Simple Condition (bool~) render_logo::$5 [397] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1 -Simple Condition (bool~) render_logo::$7 [409] if((byte) render_logo::screen_idx#18!=(byte) render_logo::logo_start#1) goto render_logo::@5 +Simple Condition (bool~) render_logo::$7 [409] if((byte) render_logo::screen_idx#18!=(byte) render_logo::logo_start#0) goto render_logo::@5 Simple Condition (bool~) render_logo::$10 [420] unroll if((byte) render_logo::line#2!=rangelast(0,5)) goto render_logo::@7 Simple Condition (bool~) render_logo::$11 [425] if((byte) render_logo::screen_idx#10!=(byte) $28) goto render_logo::@13 Simple Condition (bool~) render_logo::$16 [436] unroll if((byte) render_logo::line#4!=rangelast(0,5)) goto render_logo::@15 @@ -2340,10 +2321,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) render_logo::$14 = (byte~) render_logo::$12 Alias (byte~) render_logo::$22 = (byte~) render_logo::$20 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) render_logo::logo_start#1 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) render_logo::logo_start#1 (byte) render_logo::logo_start#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 Constant right-side identified [58] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 diff --git a/src/test/ref/examples/showlogo/showlogo.log b/src/test/ref/examples/showlogo/showlogo.log index a7ea03b51..ce11737cf 100644 --- a/src/test/ref/examples/showlogo/showlogo.log +++ b/src/test/ref/examples/showlogo/showlogo.log @@ -375,10 +375,6 @@ Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$0 Alias (byte) memset::c#1 = (byte~) main::$3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) memset::c#2 (byte) memset::c#3 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index f15f8ca75..9fe0896d9 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -2359,24 +2359,6 @@ Alias (byte*) bitmap_gfx#11 = (byte*) bitmap_gfx#16 Alias (byte*) bitmap_screen#11 = (byte*) bitmap_screen#15 Alias (word) render_sine::sin_idx#2 = (word) render_sine::sin_idx#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (signed word) sin16s_gen2::ampl#1 -Self Phi Eliminated (signed word) sin16s_gen2::offs#1 -Self Phi Eliminated (dword) sin16s_gen2::step#1 -Self Phi Eliminated (word) sin16s_gen2::wavelength#2 -Self Phi Eliminated (word) rem16u#16 -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (byte*) bitmap_init::gfx#2 -Self Phi Eliminated (byte*) bitmap_gfx#22 -Self Phi Eliminated (byte*) bitmap_screen#21 -Self Phi Eliminated (byte*) bitmap_gfx#11 -Self Phi Eliminated (byte*) bitmap_screen#11 -Self Phi Eliminated (byte*) bitmap_gfx#14 -Self Phi Eliminated (byte*) bitmap_screen#13 -Self Phi Eliminated (word) rem16u#18 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.cfg b/src/test/ref/examples/sinsprites/sinus-sprites.cfg index 1885d9b8c..98b72f017 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.cfg +++ b/src/test/ref/examples/sinsprites/sinus-sprites.cfg @@ -12,8 +12,8 @@ main: scope:[main] from @1 [5] call init to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [6] (byte) sin_idx_y#13 ← phi( main/(byte) 0 main::@2/(byte) sin_idx_y#11 ) - [6] (byte) sin_idx_x#13 ← phi( main/(byte) 0 main::@2/(byte) sin_idx_x#11 ) + [6] (byte) sin_idx_y#13 ← phi( main::@1/(byte) sin_idx_y#13 main/(byte) 0 main::@2/(byte) sin_idx_y#11 ) + [6] (byte) sin_idx_x#13 ← phi( main::@1/(byte) sin_idx_x#13 main/(byte) 0 main::@2/(byte) sin_idx_x#11 ) [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index d9a73db32..91fdbcda3 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -2146,25 +2146,6 @@ Alias (byte) gen_chargen_sprite::x#2 = (byte) gen_chargen_sprite::x#4 Alias (byte) gen_chargen_sprite::y#3 = (byte) gen_chargen_sprite::y#6 Alias (byte*) gen_chargen_sprite::chargen#2 = (byte*) gen_chargen_sprite::chargen#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) sin_idx_x#13 -Self Phi Eliminated (byte) sin_idx_y#13 -Self Phi Eliminated (byte*) progress_cursor#1 -Self Phi Eliminated (byte*) progress_cursor#1 -Self Phi Eliminated (byte) progress_idx#1 -Self Phi Eliminated (byte) progress_idx#1 -Self Phi Eliminated (byte*) progress_cursor#31 -Self Phi Eliminated (byte) progress_idx#32 -Self Phi Eliminated (byte) sin_idx_x#10 -Self Phi Eliminated (byte) sin_idx_y#10 -Self Phi Eliminated (byte*) place_sprites::sprites_ptr#1 -Self Phi Eliminated (byte) gen_chargen_sprite::c#2 -Self Phi Eliminated (byte) gen_chargen_sprite::bits#3 -Self Phi Eliminated (byte) gen_chargen_sprite::x#2 -Self Phi Eliminated (byte) gen_chargen_sprite::y#3 -Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#2 -Self Phi Eliminated (byte) gen_sintab::length#11 -Self Phi Eliminated (byte*) gen_sintab::sintab#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) progress_cursor#29 (byte*) SCREEN#0 Identical Phi Values (byte) progress_idx#30 (byte) progress_idx#35 Identical Phi Values (byte) sin_idx_x#22 (byte) sin_idx_x#16 @@ -2210,9 +2191,13 @@ Identical Phi Values (byte) progress_idx#15 (byte) progress_idx#1 Identical Phi Values (byte) sin_idx_x#12 (byte) sin_idx_x#0 Identical Phi Values (byte) sin_idx_y#12 (byte) sin_idx_y#0 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) gen_chargen_sprite::y#10 (byte) gen_chargen_sprite::y#2 +Identical Phi Values (byte*) gen_chargen_sprite::chargen#7 (byte*) gen_chargen_sprite::chargen#1 Identical Phi Values (byte) progress_idx#53 (byte) progress_idx#23 Identical Phi Values (byte*) progress_cursor#53 (byte*) progress_cursor#22 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) gen_chargen_sprite::chargen#1 (byte*) gen_chargen_sprite::chargen#0 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$1 [72] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@2 Simple Condition (bool~) init::$10 [95] if((byte) init::i#1!=rangelast(0,$27)) goto init::@1 Simple Condition (bool~) clear_screen::$1 [140] if((byte*) clear_screen::sc#1<(byte*~) clear_screen::$0) goto clear_screen::@1 @@ -2332,7 +2317,7 @@ Resolved ranged next value [307] gen_chargen_sprite::b#1 ← ++ gen_chargen_spri Resolved ranged comparison value [309] if(gen_chargen_sprite::b#1!=rangelast(0,2)) goto gen_chargen_sprite::@4 to (number) 3 Resolved ranged next value [320] gen_chargen_sprite::x#1 ← ++ gen_chargen_sprite::x#6 to ++ Resolved ranged comparison value [322] if(gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 to (number) 8 -Resolved ranged next value [326] gen_chargen_sprite::y#1 ← ++ gen_chargen_sprite::y#10 to ++ +Resolved ranged next value [326] gen_chargen_sprite::y#1 ← ++ gen_chargen_sprite::y#2 to ++ Resolved ranged comparison value [328] if(gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 to (number) 8 Simplifying expression containing zero gen_chargen_sprite::sprite#3 in [311] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 0) ← (byte) gen_chargen_sprite::s_gen#1 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -2364,12 +2349,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) gen_chargen_sprite::y#10 -Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#7 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) gen_chargen_sprite::y#10 (byte) gen_chargen_sprite::y#2 -Identical Phi Values (byte*) gen_chargen_sprite::chargen#7 (byte*) gen_chargen_sprite::chargen#1 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [55] (byte*) progress_init::line#1 ← (const byte*) SCREEN#0 + (byte) $28 Constant right-side identified [63] (byte*~) clear_screen::$0 ← (const byte*) SCREEN#0 + (word) $3e8 Constant right-side identified [110] (byte*) place_sprites::sprites_ptr#0 ← (const byte*) SCREEN#0 + (word) $3f8 @@ -2379,10 +2358,6 @@ Constant (const byte*) clear_screen::$0 = SCREEN#0+$3e8 Constant (const byte*) place_sprites::sprites_ptr#0 = SCREEN#0+$3f8 Constant (const word) place_sprites::$1 = (word)sprites#0 Successful SSA optimization Pass2ConstantIdentification -Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#1 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) gen_chargen_sprite::chargen#1 (byte*) gen_chargen_sprite::chargen#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [108] (word~) place_sprites::$2 ← (const word) place_sprites::$1 / (byte) $40 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) place_sprites::$2 = place_sprites::$1/$40 @@ -2514,6 +2489,7 @@ Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const byte*) prepareMEM::mem#2 Constant inlined prepareMEM::mem#2 = (const byte[]) gen_sintab::f_min#0 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@2 and main::@2) Added new block during phi lifting init::@11(between init::@1 and init::@1) Added new block during phi lifting clear_screen::@3(between clear_screen::@1 and clear_screen::@1) Added new block during phi lifting progress_inc::@3(between progress_inc and progress_inc::@1) @@ -2575,77 +2551,79 @@ Adding NOP phi() at start of gen_chargen_sprite::@10 CALL GRAPH Calls in [] to main:6 Calls in [main] to init:10 anim:15 -Calls in [init] to clear_screen:65 place_sprites:73 gen_sprites:75 progress_init:77 gen_sintab:79 progress_init:81 gen_sintab:83 clear_screen:85 -Calls in [gen_sintab] to setFAC:99 setARGtoFAC:101 setFAC:104 setMEMtoFAC:106 subFACfromARG:108 setMEMtoFAC:110 setFAC:112 divMEMbyFAC:114 setMEMtoFAC:116 addMEMtoFAC:118 setMEMtoFAC:120 setFAC:125 mulFACbyMEM:127 setMEMtoFAC:129 setFAC:132 divMEMbyFAC:134 sinFAC:136 mulFACbyMEM:138 addMEMtoFAC:140 getFAC:142 progress_inc:147 -Calls in [addMEMtoFAC] to prepareMEM:168 -Calls in [mulFACbyMEM] to prepareMEM:180 -Calls in [divMEMbyFAC] to prepareMEM:188 -Calls in [setFAC] to prepareMEM:194 -Calls in [setMEMtoFAC] to prepareMEM:200 -Calls in [gen_sprites] to gen_chargen_sprite:214 +Calls in [init] to clear_screen:67 place_sprites:75 gen_sprites:77 progress_init:79 gen_sintab:81 progress_init:83 gen_sintab:85 clear_screen:87 +Calls in [gen_sintab] to setFAC:101 setARGtoFAC:103 setFAC:106 setMEMtoFAC:108 subFACfromARG:110 setMEMtoFAC:112 setFAC:114 divMEMbyFAC:116 setMEMtoFAC:118 addMEMtoFAC:120 setMEMtoFAC:122 setFAC:127 mulFACbyMEM:129 setMEMtoFAC:131 setFAC:134 divMEMbyFAC:136 sinFAC:138 mulFACbyMEM:140 addMEMtoFAC:142 getFAC:144 progress_inc:149 +Calls in [addMEMtoFAC] to prepareMEM:170 +Calls in [mulFACbyMEM] to prepareMEM:182 +Calls in [divMEMbyFAC] to prepareMEM:190 +Calls in [setFAC] to prepareMEM:196 +Calls in [setMEMtoFAC] to prepareMEM:202 +Calls in [gen_sprites] to gen_chargen_sprite:216 Created 50 initial phi equivalence classes -Coalesced [16] sin_idx_x#26 ← sin_idx_x#11 -Coalesced [17] sin_idx_y#26 ← sin_idx_y#11 -Coalesced [21] anim::xidx#8 ← anim::xidx#0 -Coalesced [22] anim::yidx#8 ← anim::yidx#0 -Coalesced [34] anim::xidx#11 ← anim::xidx#2 -Coalesced [39] anim::yidx#11 ← anim::yidx#2 -Coalesced [55] sin_idx_y#27 ← sin_idx_y#3 -Coalesced [56] sin_idx_x#27 ← sin_idx_x#3 -Coalesced [57] anim::xidx#9 ← anim::xidx#5 -Coalesced [58] anim::x_msb#8 ← anim::x_msb#1 -Coalesced [59] anim::j2#7 ← anim::j2#1 -Coalesced [60] anim::yidx#9 ← anim::yidx#6 -Coalesced [61] anim::j#7 ← anim::j#1 -Coalesced [62] anim::yidx#10 ← anim::yidx#1 -Coalesced [63] anim::xidx#10 ← anim::xidx#1 -Coalesced [88] init::i#3 ← init::i#1 -Coalesced [95] clear_screen::sc#3 ← clear_screen::sc#1 -Coalesced [98] setFAC::w#6 ← setFAC::w#0 -Coalesced [103] setFAC::w#9 ← setFAC::w#1 -Coalesced [121] progress_cursor#67 ← progress_cursor#22 -Coalesced [124] setFAC::w#7 ← setFAC::w#3 -Coalesced [131] setFAC::w#8 ← setFAC::w#4 -Coalesced [151] gen_sintab::i#13 ← gen_sintab::i#1 -Coalesced [152] progress_idx#66 ← progress_idx#12 -Coalesced [153] progress_cursor#68 ← progress_cursor#11 -Coalesced [158] progress_cursor#66 ← progress_cursor#10 -Coalesced [162] progress_idx#65 ← progress_idx#10 -Coalesced (already) [163] progress_cursor#65 ← progress_cursor#34 -Coalesced [179] prepareMEM::mem#7 ← prepareMEM::mem#4 -Coalesced [187] prepareMEM::mem#6 ← prepareMEM::mem#3 -Coalesced [193] prepareMEM::mem#8 ← prepareMEM::mem#0 -Coalesced [199] prepareMEM::mem#9 ← prepareMEM::mem#1 -Coalesced [208] progress_cursor#22 ← progress_init::line#2 -Coalesced [219] gen_sprites::i#4 ← gen_sprites::i#1 -Coalesced [220] gen_sprites::spr#4 ← gen_sprites::spr#1 -Coalesced [226] gen_chargen_sprite::sprite#13 ← gen_chargen_sprite::sprite#0 -Coalesced [229] gen_chargen_sprite::bits#9 ← gen_chargen_sprite::bits#0 -Coalesced [230] gen_chargen_sprite::sprite#15 ← gen_chargen_sprite::sprite#11 -Coalesced [236] gen_chargen_sprite::s_gen#11 ← gen_chargen_sprite::s_gen#5 -Coalesced [237] gen_chargen_sprite::s_gen_cnt#10 ← gen_chargen_sprite::s_gen_cnt#4 -Coalesced [238] gen_chargen_sprite::sprite#17 ← gen_chargen_sprite::sprite#10 -Coalesced [248] gen_chargen_sprite::sprite#20 ← gen_chargen_sprite::sprite#1 -Coalesced [261] gen_chargen_sprite::y#11 ← gen_chargen_sprite::y#1 -Coalesced [262] gen_chargen_sprite::sprite#14 ← gen_chargen_sprite::sprite#2 -Coalesced [263] gen_chargen_sprite::bits#10 ← gen_chargen_sprite::bits#1 -Coalesced [264] gen_chargen_sprite::s_gen#10 ← gen_chargen_sprite::s_gen#6 -Coalesced [265] gen_chargen_sprite::s_gen_cnt#9 ← gen_chargen_sprite::s_gen_cnt#5 -Coalesced [266] gen_chargen_sprite::sprite#16 ← gen_chargen_sprite::sprite#4 -Coalesced [267] gen_chargen_sprite::x#9 ← gen_chargen_sprite::x#1 -Coalesced (already) [268] gen_chargen_sprite::s_gen#12 ← gen_chargen_sprite::s_gen#6 -Coalesced (already) [269] gen_chargen_sprite::s_gen_cnt#11 ← gen_chargen_sprite::s_gen_cnt#5 -Coalesced [270] gen_chargen_sprite::b#5 ← gen_chargen_sprite::b#1 -Coalesced (already) [271] gen_chargen_sprite::sprite#18 ← gen_chargen_sprite::sprite#4 -Coalesced [272] gen_chargen_sprite::s_gen#13 ← gen_chargen_sprite::s_gen#1 -Coalesced [273] gen_chargen_sprite::s_gen_cnt#12 ← gen_chargen_sprite::s_gen_cnt#1 -Coalesced (already) [274] gen_chargen_sprite::sprite#19 ← gen_chargen_sprite::sprite#3 -Coalesced [291] place_sprites::spr_id#3 ← place_sprites::spr_id#1 -Coalesced [292] place_sprites::j#3 ← place_sprites::j#1 -Coalesced [293] place_sprites::spr_x#3 ← place_sprites::spr_x#1 -Coalesced [294] place_sprites::j2#4 ← place_sprites::j2#2 -Coalesced [295] place_sprites::col#3 ← place_sprites::col#1 +Coalesced [16] sin_idx_x#27 ← sin_idx_x#11 +Coalesced [17] sin_idx_y#27 ← sin_idx_y#11 +Coalesced (already) [18] sin_idx_x#26 ← sin_idx_x#13 +Coalesced (already) [19] sin_idx_y#26 ← sin_idx_y#13 +Coalesced [23] anim::xidx#8 ← anim::xidx#0 +Coalesced [24] anim::yidx#8 ← anim::yidx#0 +Coalesced [36] anim::xidx#11 ← anim::xidx#2 +Coalesced [41] anim::yidx#11 ← anim::yidx#2 +Coalesced [57] sin_idx_y#28 ← sin_idx_y#3 +Coalesced [58] sin_idx_x#28 ← sin_idx_x#3 +Coalesced [59] anim::xidx#9 ← anim::xidx#5 +Coalesced [60] anim::x_msb#8 ← anim::x_msb#1 +Coalesced [61] anim::j2#7 ← anim::j2#1 +Coalesced [62] anim::yidx#9 ← anim::yidx#6 +Coalesced [63] anim::j#7 ← anim::j#1 +Coalesced [64] anim::yidx#10 ← anim::yidx#1 +Coalesced [65] anim::xidx#10 ← anim::xidx#1 +Coalesced [90] init::i#3 ← init::i#1 +Coalesced [97] clear_screen::sc#3 ← clear_screen::sc#1 +Coalesced [100] setFAC::w#6 ← setFAC::w#0 +Coalesced [105] setFAC::w#9 ← setFAC::w#1 +Coalesced [123] progress_cursor#67 ← progress_cursor#22 +Coalesced [126] setFAC::w#7 ← setFAC::w#3 +Coalesced [133] setFAC::w#8 ← setFAC::w#4 +Coalesced [153] gen_sintab::i#13 ← gen_sintab::i#1 +Coalesced [154] progress_idx#66 ← progress_idx#12 +Coalesced [155] progress_cursor#68 ← progress_cursor#11 +Coalesced [160] progress_cursor#66 ← progress_cursor#10 +Coalesced [164] progress_idx#65 ← progress_idx#10 +Coalesced (already) [165] progress_cursor#65 ← progress_cursor#34 +Coalesced [181] prepareMEM::mem#7 ← prepareMEM::mem#4 +Coalesced [189] prepareMEM::mem#6 ← prepareMEM::mem#3 +Coalesced [195] prepareMEM::mem#8 ← prepareMEM::mem#0 +Coalesced [201] prepareMEM::mem#9 ← prepareMEM::mem#1 +Coalesced [210] progress_cursor#22 ← progress_init::line#2 +Coalesced [221] gen_sprites::i#4 ← gen_sprites::i#1 +Coalesced [222] gen_sprites::spr#4 ← gen_sprites::spr#1 +Coalesced [228] gen_chargen_sprite::sprite#13 ← gen_chargen_sprite::sprite#0 +Coalesced [231] gen_chargen_sprite::bits#9 ← gen_chargen_sprite::bits#0 +Coalesced [232] gen_chargen_sprite::sprite#15 ← gen_chargen_sprite::sprite#11 +Coalesced [238] gen_chargen_sprite::s_gen#11 ← gen_chargen_sprite::s_gen#5 +Coalesced [239] gen_chargen_sprite::s_gen_cnt#10 ← gen_chargen_sprite::s_gen_cnt#4 +Coalesced [240] gen_chargen_sprite::sprite#17 ← gen_chargen_sprite::sprite#10 +Coalesced [250] gen_chargen_sprite::sprite#20 ← gen_chargen_sprite::sprite#1 +Coalesced [263] gen_chargen_sprite::y#11 ← gen_chargen_sprite::y#1 +Coalesced [264] gen_chargen_sprite::sprite#14 ← gen_chargen_sprite::sprite#2 +Coalesced [265] gen_chargen_sprite::bits#10 ← gen_chargen_sprite::bits#1 +Coalesced [266] gen_chargen_sprite::s_gen#10 ← gen_chargen_sprite::s_gen#6 +Coalesced [267] gen_chargen_sprite::s_gen_cnt#9 ← gen_chargen_sprite::s_gen_cnt#5 +Coalesced [268] gen_chargen_sprite::sprite#16 ← gen_chargen_sprite::sprite#4 +Coalesced [269] gen_chargen_sprite::x#9 ← gen_chargen_sprite::x#1 +Coalesced (already) [270] gen_chargen_sprite::s_gen#12 ← gen_chargen_sprite::s_gen#6 +Coalesced (already) [271] gen_chargen_sprite::s_gen_cnt#11 ← gen_chargen_sprite::s_gen_cnt#5 +Coalesced [272] gen_chargen_sprite::b#5 ← gen_chargen_sprite::b#1 +Coalesced (already) [273] gen_chargen_sprite::sprite#18 ← gen_chargen_sprite::sprite#4 +Coalesced [274] gen_chargen_sprite::s_gen#13 ← gen_chargen_sprite::s_gen#1 +Coalesced [275] gen_chargen_sprite::s_gen_cnt#12 ← gen_chargen_sprite::s_gen_cnt#1 +Coalesced (already) [276] gen_chargen_sprite::sprite#19 ← gen_chargen_sprite::sprite#3 +Coalesced [293] place_sprites::spr_id#3 ← place_sprites::spr_id#1 +Coalesced [294] place_sprites::j#3 ← place_sprites::j#1 +Coalesced [295] place_sprites::spr_x#3 ← place_sprites::spr_x#1 +Coalesced [296] place_sprites::j2#4 ← place_sprites::j2#2 +Coalesced [297] place_sprites::col#3 ← place_sprites::col#1 Coalesced down to 36 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @66 @@ -2654,6 +2632,7 @@ Culled Empty Block (label) @71 Culled Empty Block (label) @77 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@7 Culled Empty Block (label) anim::@10 Culled Empty Block (label) anim::@3 Culled Empty Block (label) anim::@11 @@ -2761,8 +2740,8 @@ main: scope:[main] from @1 [5] call init to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [6] (byte) sin_idx_y#13 ← phi( main/(byte) 0 main::@2/(byte) sin_idx_y#11 ) - [6] (byte) sin_idx_x#13 ← phi( main/(byte) 0 main::@2/(byte) sin_idx_x#11 ) + [6] (byte) sin_idx_y#13 ← phi( main::@1/(byte) sin_idx_y#13 main/(byte) 0 main::@2/(byte) sin_idx_y#11 ) + [6] (byte) sin_idx_x#13 ← phi( main::@1/(byte) sin_idx_x#13 main/(byte) 0 main::@2/(byte) sin_idx_x#11 ) [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 @@ -3396,11 +3375,11 @@ VARIABLE REGISTER WEIGHTS (void()) sinFAC() (byte) sin_idx_x (byte) sin_idx_x#11 1.625 -(byte) sin_idx_x#13 0.5769230769230769 +(byte) sin_idx_x#13 8.346153846153845 (byte) sin_idx_x#3 2.0 (byte) sin_idx_y (byte) sin_idx_y#11 3.25 -(byte) sin_idx_y#13 0.49999999999999994 +(byte) sin_idx_y#13 7.2333333333333325 (byte) sin_idx_y#3 2.0 (byte) sinlen_x (byte) sinlen_y @@ -3635,8 +3614,11 @@ main: { lda #0 sta sin_idx_x jmp b1 - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] b1_from_b1: + b1_from_b2: + // [6] phi (byte) sin_idx_y#13 = (byte) sin_idx_y#13 [phi:main::@1/main::@2->main::@1#0] -- register_copy + // [6] phi (byte) sin_idx_x#13 = (byte) sin_idx_x#13 [phi:main::@1/main::@2->main::@1#1] -- register_copy jmp b1 // main::@1 b1: @@ -3651,11 +3633,7 @@ main: { b2: // [9] call anim jsr anim - // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [6] phi (byte) sin_idx_y#13 = (byte) sin_idx_y#11 [phi:main::@2->main::@1#0] -- register_copy - // [6] phi (byte) sin_idx_x#13 = (byte) sin_idx_x#11 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 + jmp b1_from_b2 } // anim anim: { @@ -5304,11 +5282,11 @@ Uplift Scope [place_sprites] 22: zp ZP_BYTE:71 [ place_sprites::j2#1 ] 20.9: zp Uplift Scope [setFAC] 78: zp ZP_WORD:27 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] Uplift Scope [gen_sintab] 22: zp ZP_BYTE:57 [ gen_sintab::$24 ] 17.88: zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] 11: zp ZP_WORD:55 [ gen_sintab::$23 ] 0.22: zp ZP_BYTE:14 [ gen_sintab::length#10 ] 0.22: zp ZP_WORD:15 [ gen_sintab::sintab#12 ] 0: zp ZP_BYTE:12 [ gen_sintab::max#2 ] 0: zp ZP_BYTE:13 [ gen_sintab::min#2 ] Uplift Scope [gen_sprites] 23.1: zp ZP_BYTE:31 [ gen_sprites::i#2 gen_sprites::i#1 ] 15.58: zp ZP_WORD:32 [ gen_sprites::spr#2 gen_sprites::spr#1 ] +Uplift Scope [] 12.48: zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] 11.97: zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] 7.63: zp ZP_WORD:19 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] 6.07: zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] Uplift Scope [clear_screen] 33: zp ZP_WORD:10 [ clear_screen::sc#2 clear_screen::sc#1 ] Uplift Scope [init] 31.17: zp ZP_BYTE:9 [ init::i#2 init::i#1 ] Uplift Scope [prepareMEM] 20: zp ZP_WORD:21 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] 4: zp ZP_BYTE:60 [ prepareMEM::$0 ] 4: zp ZP_BYTE:61 [ prepareMEM::$1 ] Uplift Scope [getFAC] 22: zp ZP_WORD:53 [ getFAC::return#2 ] 4.33: zp ZP_WORD:58 [ getFAC::return#0 ] -Uplift Scope [] 7.63: zp ZP_WORD:19 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] 6.07: zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] 5.75: zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] 4.2: zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] Uplift Scope [setMEMtoFAC] 2: zp ZP_WORD:29 [ setMEMtoFAC::mem#5 ] Uplift Scope [divMEMbyFAC] 2: zp ZP_WORD:25 [ divMEMbyFAC::mem#2 ] Uplift Scope [mulFACbyMEM] 2: zp ZP_WORD:23 [ mulFACbyMEM::mem#2 ] @@ -5321,79 +5299,79 @@ Uplift Scope [main] Uplift Scope [progress_init] Uplift Scope [progress_inc] -Uplifting [gen_chargen_sprite] best 1064286 combination zp ZP_BYTE:38 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] zp ZP_WORD:41 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] reg byte a [ gen_chargen_sprite::$3 ] zp ZP_BYTE:36 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] zp ZP_BYTE:35 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] zp ZP_BYTE:37 [ gen_chargen_sprite::c#3 ] zp ZP_BYTE:34 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] zp ZP_BYTE:62 [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:63 [ gen_chargen_sprite::$0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$1 ] zp ZP_WORD:67 [ gen_chargen_sprite::chargen#0 ] +Uplifting [gen_chargen_sprite] best 1064016 combination zp ZP_BYTE:38 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] zp ZP_WORD:41 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] reg byte a [ gen_chargen_sprite::$3 ] zp ZP_BYTE:36 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] zp ZP_BYTE:35 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] zp ZP_BYTE:37 [ gen_chargen_sprite::c#3 ] zp ZP_BYTE:34 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] zp ZP_BYTE:62 [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:63 [ gen_chargen_sprite::$0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$1 ] zp ZP_WORD:67 [ gen_chargen_sprite::chargen#0 ] Limited combination testing to 100 combinations of 9216 possible. -Uplifting [anim] best 1063086 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte a [ anim::$7 ] reg byte a [ anim::$9 ] zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] zp ZP_BYTE:50 [ anim::$6 ] zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:48 [ anim::x#0 ] +Uplifting [anim] best 1062816 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte a [ anim::$7 ] reg byte a [ anim::$9 ] zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] zp ZP_BYTE:50 [ anim::$6 ] zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:48 [ anim::x#0 ] Limited combination testing to 100 combinations of 19440 possible. -Uplifting [place_sprites] best 1063026 combination reg byte x [ place_sprites::j2#1 ] zp ZP_BYTE:44 [ place_sprites::j#2 place_sprites::j#1 ] zp ZP_BYTE:43 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] zp ZP_BYTE:46 [ place_sprites::j2#3 place_sprites::j2#2 ] zp ZP_BYTE:45 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] zp ZP_BYTE:47 [ place_sprites::col#2 place_sprites::col#1 ] +Uplifting [place_sprites] best 1062756 combination reg byte x [ place_sprites::j2#1 ] zp ZP_BYTE:44 [ place_sprites::j#2 place_sprites::j#1 ] zp ZP_BYTE:43 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] zp ZP_BYTE:46 [ place_sprites::j2#3 place_sprites::j2#2 ] zp ZP_BYTE:45 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] zp ZP_BYTE:47 [ place_sprites::col#2 place_sprites::col#1 ] Limited combination testing to 100 combinations of 972 possible. -Uplifting [setFAC] best 1063026 combination zp ZP_WORD:27 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] -Uplifting [gen_sintab] best 1062959 combination reg byte a [ gen_sintab::$24 ] zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] zp ZP_WORD:55 [ gen_sintab::$23 ] zp ZP_BYTE:14 [ gen_sintab::length#10 ] zp ZP_WORD:15 [ gen_sintab::sintab#12 ] reg byte x [ gen_sintab::max#2 ] zp ZP_BYTE:13 [ gen_sintab::min#2 ] -Uplifting [gen_sprites] best 1062959 combination zp ZP_BYTE:31 [ gen_sprites::i#2 gen_sprites::i#1 ] zp ZP_WORD:32 [ gen_sprites::spr#2 gen_sprites::spr#1 ] -Uplifting [clear_screen] best 1062959 combination zp ZP_WORD:10 [ clear_screen::sc#2 clear_screen::sc#1 ] -Uplifting [init] best 1062809 combination reg byte x [ init::i#2 init::i#1 ] -Uplifting [prepareMEM] best 1062797 combination zp ZP_WORD:21 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ] -Uplifting [getFAC] best 1062797 combination zp ZP_WORD:53 [ getFAC::return#2 ] zp ZP_WORD:58 [ getFAC::return#0 ] -Uplifting [] best 1062797 combination zp ZP_WORD:19 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] -Uplifting [setMEMtoFAC] best 1062797 combination zp ZP_WORD:29 [ setMEMtoFAC::mem#5 ] -Uplifting [divMEMbyFAC] best 1062797 combination zp ZP_WORD:25 [ divMEMbyFAC::mem#2 ] -Uplifting [mulFACbyMEM] best 1062797 combination zp ZP_WORD:23 [ mulFACbyMEM::mem#2 ] -Uplifting [setARGtoFAC] best 1062797 combination -Uplifting [addMEMtoFAC] best 1062797 combination -Uplifting [subFACfromARG] best 1062797 combination -Uplifting [sinFAC] best 1062797 combination -Uplifting [RADIX] best 1062797 combination -Uplifting [main] best 1062797 combination -Uplifting [progress_init] best 1062797 combination -Uplifting [progress_inc] best 1062797 combination +Uplifting [setFAC] best 1062756 combination zp ZP_WORD:27 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] +Uplifting [gen_sintab] best 1062689 combination reg byte a [ gen_sintab::$24 ] zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] zp ZP_WORD:55 [ gen_sintab::$23 ] zp ZP_BYTE:14 [ gen_sintab::length#10 ] zp ZP_WORD:15 [ gen_sintab::sintab#12 ] reg byte x [ gen_sintab::max#2 ] zp ZP_BYTE:13 [ gen_sintab::min#2 ] +Uplifting [gen_sprites] best 1062689 combination zp ZP_BYTE:31 [ gen_sprites::i#2 gen_sprites::i#1 ] zp ZP_WORD:32 [ gen_sprites::spr#2 gen_sprites::spr#1 ] +Uplifting [] best 1062689 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] zp ZP_WORD:19 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] +Uplifting [clear_screen] best 1062689 combination zp ZP_WORD:10 [ clear_screen::sc#2 clear_screen::sc#1 ] +Uplifting [init] best 1062539 combination reg byte x [ init::i#2 init::i#1 ] +Uplifting [prepareMEM] best 1062527 combination zp ZP_WORD:21 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ] +Uplifting [getFAC] best 1062527 combination zp ZP_WORD:53 [ getFAC::return#2 ] zp ZP_WORD:58 [ getFAC::return#0 ] +Uplifting [setMEMtoFAC] best 1062527 combination zp ZP_WORD:29 [ setMEMtoFAC::mem#5 ] +Uplifting [divMEMbyFAC] best 1062527 combination zp ZP_WORD:25 [ divMEMbyFAC::mem#2 ] +Uplifting [mulFACbyMEM] best 1062527 combination zp ZP_WORD:23 [ mulFACbyMEM::mem#2 ] +Uplifting [setARGtoFAC] best 1062527 combination +Uplifting [addMEMtoFAC] best 1062527 combination +Uplifting [subFACfromARG] best 1062527 combination +Uplifting [sinFAC] best 1062527 combination +Uplifting [RADIX] best 1062527 combination +Uplifting [main] best 1062527 combination +Uplifting [progress_init] best 1062527 combination +Uplifting [progress_inc] best 1062527 combination Attempting to uplift remaining variables inzp ZP_BYTE:38 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] -Uplifting [gen_chargen_sprite] best 1062797 combination zp ZP_BYTE:38 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] +Uplifting [gen_chargen_sprite] best 1062527 combination zp ZP_BYTE:38 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] -Uplifting [gen_chargen_sprite] best 1062797 combination zp ZP_BYTE:36 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] +Uplifting [gen_chargen_sprite] best 1062527 combination zp ZP_BYTE:36 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:35 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] -Uplifting [gen_chargen_sprite] best 1062797 combination zp ZP_BYTE:35 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] +Uplifting [gen_chargen_sprite] best 1062527 combination zp ZP_BYTE:35 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:37 [ gen_chargen_sprite::c#3 ] -Uplifting [gen_chargen_sprite] best 1062797 combination zp ZP_BYTE:37 [ gen_chargen_sprite::c#3 ] +Uplifting [gen_chargen_sprite] best 1062527 combination zp ZP_BYTE:37 [ gen_chargen_sprite::c#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] -Uplifting [anim] best 1062797 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] +Uplifting [anim] best 1062527 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] -Uplifting [anim] best 1062797 combination zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] +Uplifting [anim] best 1062527 combination zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:34 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] -Uplifting [gen_chargen_sprite] best 1062797 combination zp ZP_BYTE:34 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] +Uplifting [gen_chargen_sprite] best 1062527 combination zp ZP_BYTE:34 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] -Uplifting [anim] best 1062797 combination zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] +Uplifting [anim] best 1062527 combination zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] -Uplifting [anim] best 1062797 combination zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] +Uplifting [anim] best 1062527 combination zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:50 [ anim::$6 ] -Uplifting [anim] best 1062797 combination zp ZP_BYTE:50 [ anim::$6 ] +Uplifting [anim] best 1062527 combination zp ZP_BYTE:50 [ anim::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] -Uplifting [anim] best 1062797 combination zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] +Uplifting [anim] best 1062527 combination zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ gen_sprites::i#2 gen_sprites::i#1 ] -Uplifting [gen_sprites] best 1062797 combination zp ZP_BYTE:31 [ gen_sprites::i#2 gen_sprites::i#1 ] +Uplifting [gen_sprites] best 1062527 combination zp ZP_BYTE:31 [ gen_sprites::i#2 gen_sprites::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:44 [ place_sprites::j#2 place_sprites::j#1 ] -Uplifting [place_sprites] best 1062797 combination zp ZP_BYTE:44 [ place_sprites::j#2 place_sprites::j#1 ] +Uplifting [place_sprites] best 1062527 combination zp ZP_BYTE:44 [ place_sprites::j#2 place_sprites::j#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:43 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] -Uplifting [place_sprites] best 1062797 combination zp ZP_BYTE:43 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] +Uplifting [place_sprites] best 1062527 combination zp ZP_BYTE:43 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] -Uplifting [gen_sintab] best 1062797 combination zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] +Uplifting [gen_sintab] best 1062527 combination zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ place_sprites::j2#3 place_sprites::j2#2 ] -Uplifting [place_sprites] best 1062797 combination zp ZP_BYTE:46 [ place_sprites::j2#3 place_sprites::j2#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:45 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] -Uplifting [place_sprites] best 1062797 combination zp ZP_BYTE:45 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:47 [ place_sprites::col#2 place_sprites::col#1 ] -Uplifting [place_sprites] best 1062797 combination zp ZP_BYTE:47 [ place_sprites::col#2 place_sprites::col#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] -Uplifting [] best 1062797 combination zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] +Uplifting [place_sprites] best 1062527 combination zp ZP_BYTE:46 [ place_sprites::j2#3 place_sprites::j2#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] -Uplifting [] best 1062797 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:62 [ gen_chargen_sprite::ch#0 ] -Uplifting [gen_chargen_sprite] best 1062766 combination reg byte x [ gen_chargen_sprite::ch#0 ] +Uplifting [] best 1062527 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] -Uplifting [] best 1062766 combination zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] +Uplifting [] best 1062527 combination zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:45 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] +Uplifting [place_sprites] best 1062527 combination zp ZP_BYTE:45 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:47 [ place_sprites::col#2 place_sprites::col#1 ] +Uplifting [place_sprites] best 1062527 combination zp ZP_BYTE:47 [ place_sprites::col#2 place_sprites::col#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] +Uplifting [] best 1062527 combination zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] +Attempting to uplift remaining variables inzp ZP_BYTE:62 [ gen_chargen_sprite::ch#0 ] +Uplifting [gen_chargen_sprite] best 1062496 combination reg byte x [ gen_chargen_sprite::ch#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:14 [ gen_sintab::length#10 ] -Uplifting [gen_sintab] best 1062766 combination zp ZP_BYTE:14 [ gen_sintab::length#10 ] +Uplifting [gen_sintab] best 1062496 combination zp ZP_BYTE:14 [ gen_sintab::length#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:13 [ gen_sintab::min#2 ] -Uplifting [gen_sintab] best 1062766 combination zp ZP_BYTE:13 [ gen_sintab::min#2 ] +Uplifting [gen_sintab] best 1062496 combination zp ZP_BYTE:13 [ gen_sintab::min#2 ] Coalescing zero page register with common assignment [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] ] with [ zp ZP_BYTE:50 [ anim::$6 ] ] - score: 2 Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] ] with [ zp ZP_WORD:23 [ mulFACbyMEM::mem#2 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 ] ] with [ zp ZP_WORD:25 [ divMEMbyFAC::mem#2 ] ] - score: 1 @@ -5492,8 +5470,11 @@ main: { lda #0 sta sin_idx_x jmp b1 - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] b1_from_b1: + b1_from_b2: + // [6] phi (byte) sin_idx_y#13 = (byte) sin_idx_y#13 [phi:main::@1/main::@2->main::@1#0] -- register_copy + // [6] phi (byte) sin_idx_x#13 = (byte) sin_idx_x#13 [phi:main::@1/main::@2->main::@1#1] -- register_copy jmp b1 // main::@1 b1: @@ -5508,11 +5489,7 @@ main: { b2: // [9] call anim jsr anim - // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [6] phi (byte) sin_idx_y#13 = (byte) sin_idx_y#11 [phi:main::@2->main::@1#0] -- register_copy - // [6] phi (byte) sin_idx_x#13 = (byte) sin_idx_x#11 [phi:main::@2->main::@1#1] -- register_copy - jmp b1 + jmp b1_from_b2 } // anim anim: { @@ -6904,6 +6881,7 @@ Removing instruction lda #$7f Removing instruction ldy j2 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 +Replacing label b1_from_b2 with b1 Replacing label b4_from_b3 with b4 Replacing label b5_from_b4 with b5 Replacing label b3_from_b5 with b3 @@ -6925,6 +6903,7 @@ Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b1_from_b1: +Removing instruction b1_from_b2: Removing instruction b2_from_b1: Removing instruction b3_from_b5: Removing instruction b4_from_b3: @@ -6996,7 +6975,6 @@ Removing instruction bend: Removing instruction init_from_main: Removing instruction b1_from_main: Removing instruction b2: -Removing instruction b1_from_b2: Removing instruction b3_from_anim: Removing instruction b6: Removing instruction b7: @@ -7402,11 +7380,11 @@ FINAL SYMBOL TABLE (label) sinFAC::@return (byte) sin_idx_x (byte) sin_idx_x#11 sin_idx_x zp ZP_BYTE:2 1.625 -(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 0.5769230769230769 +(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 8.346153846153845 (byte) sin_idx_x#3 sin_idx_x zp ZP_BYTE:2 2.0 (byte) sin_idx_y (byte) sin_idx_y#11 sin_idx_y zp ZP_BYTE:3 3.25 -(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 0.49999999999999994 +(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 7.2333333333333325 (byte) sin_idx_y#3 sin_idx_y zp ZP_BYTE:3 2.0 (byte) sinlen_x (const byte) sinlen_x#0 sinlen_x = (byte) $dd @@ -7468,7 +7446,7 @@ reg byte x [ place_sprites::j2#1 ] FINAL ASSEMBLER -Score: 769888 +Score: 769618 // File Comments // Basic Upstart @@ -7521,7 +7499,9 @@ main: { sta sin_idx_y // [6] phi (byte) sin_idx_x#13 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 sta sin_idx_x - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] + // [6] phi (byte) sin_idx_y#13 = (byte) sin_idx_y#13 [phi:main::@1/main::@2->main::@1#0] -- register_copy + // [6] phi (byte) sin_idx_x#13 = (byte) sin_idx_x#13 [phi:main::@1/main::@2->main::@1#1] -- register_copy // main::@1 b1: // while (*RASTER!=$ff) @@ -7534,9 +7514,6 @@ main: { // anim() // [9] call anim jsr anim - // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [6] phi (byte) sin_idx_y#13 = (byte) sin_idx_y#11 [phi:main::@2->main::@1#0] -- register_copy - // [6] phi (byte) sin_idx_x#13 = (byte) sin_idx_x#11 [phi:main::@2->main::@1#1] -- register_copy jmp b1 } // anim diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.sym b/src/test/ref/examples/sinsprites/sinus-sprites.sym index 32d14805b..26a045e1e 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.sym +++ b/src/test/ref/examples/sinsprites/sinus-sprites.sym @@ -293,11 +293,11 @@ (label) sinFAC::@return (byte) sin_idx_x (byte) sin_idx_x#11 sin_idx_x zp ZP_BYTE:2 1.625 -(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 0.5769230769230769 +(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 8.346153846153845 (byte) sin_idx_x#3 sin_idx_x zp ZP_BYTE:2 2.0 (byte) sin_idx_y (byte) sin_idx_y#11 sin_idx_y zp ZP_BYTE:3 3.25 -(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 0.49999999999999994 +(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 7.2333333333333325 (byte) sin_idx_y#3 sin_idx_y zp ZP_BYTE:3 2.0 (byte) sinlen_x (const byte) sinlen_x#0 sinlen_x = (byte) $dd diff --git a/src/test/ref/fastmultiply-127.asm b/src/test/ref/fastmultiply-127.asm new file mode 100644 index 000000000..1e8260bcc --- /dev/null +++ b/src/test/ref/fastmultiply-127.asm @@ -0,0 +1,432 @@ +// An implementation of seriously fast multiply for integer values in the interval [-1;1] with the best possible precision +// NOTE: So far unsuccessful - since the handling of sign and values where a+b>sqrt2) makes the code slower than regular fast multiply +// In this model 255 binary represents 1.0 - meaning that 255*255 = 255 +// Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 +// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label print_char_cursor = 7 + .label print_line_cursor = 3 +main: { + jsr print_cls + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + lda #str + sta print_str.str+1 + jsr print_str + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + lda #0 + sta print_mulf8u127.b + tay + jsr print_mulf8u127 + lda #$7f + sta print_mulf8u127.b + tay + jsr print_mulf8u127 + lda #$40 + sta print_mulf8u127.b + tay + jsr print_mulf8u127 + lda #$7f + sta print_mulf8u127.b + ldy #$40 + jsr print_mulf8u127 + lda #$c0 + sta print_mulf8u127.b + ldy #$40 + jsr print_mulf8u127 + lda #$7f + sta print_mulf8u127.b + ldy #$ff + jsr print_mulf8u127 + lda #$c0 + sta print_mulf8u127.b + tay + jsr print_mulf8u127 + lda #$ff + sta print_mulf8u127.b + tay + jsr print_mulf8u127 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + lda #str1 + sta print_str.str+1 + jsr print_str + jsr print_ln + lda #0 + sta print_mulf8s127.b + tay + jsr print_mulf8s127 + lda #$40 + sta print_mulf8s127.b + tay + jsr print_mulf8s127 + lda #$7f + sta print_mulf8s127.b + ldy #$40 + jsr print_mulf8s127 + lda #$40 + sta print_mulf8s127.b + ldy #-$40 + jsr print_mulf8s127 + lda #-$40 + sta print_mulf8s127.b + ldy #$40 + jsr print_mulf8s127 + lda #-$40 + sta print_mulf8s127.b + tay + jsr print_mulf8s127 + lda #$7f + sta print_mulf8s127.b + tay + jsr print_mulf8s127 + lda #$7f + sta print_mulf8s127.b + ldy #-$7f + jsr print_mulf8s127 + lda #-$7f + sta print_mulf8s127.b + ldy #$7f + jsr print_mulf8s127 + lda #-$7f + sta print_mulf8s127.b + tay + jsr print_mulf8s127 + rts + str: .text "unsigned@" + str1: .text "signed@" +} +// print_mulf8s127(signed byte register(Y) a, signed byte zeropage(2) b) +print_mulf8s127: { + .label c = 5 + .label b = 2 + jsr mulf8s127 + tya + tax + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + jsr print_sbyte + lda #'*' + jsr print_char + ldx b + jsr print_sbyte + lda #'=' + jsr print_char + jsr print_sword + jsr print_ln + rts +} +// Print a newline +print_ln: { + b1: + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + lda print_line_cursor+1 + cmp print_char_cursor+1 + bcc b1 + bne !+ + lda print_line_cursor + cmp print_char_cursor + bcc b1 + !: + rts +} +// Print a signed word as HEX +// print_sword(signed word zeropage(5) w) +print_sword: { + .label w = 5 + lda w+1 + bmi b1 + lda #' ' + jsr print_char + b2: + jsr print_word + rts + b1: + lda #'-' + jsr print_char + sec + lda #0 + sbc w + sta w + lda #0 + sbc w+1 + sta w+1 + jmp b2 +} +// Print a single char +// print_char(byte register(A) ch) +print_char: { + ldy #0 + sta (print_char_cursor),y + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + rts +} +// Print a word as HEX +// print_word(word zeropage(5) w) +print_word: { + .label w = 5 + lda w+1 + tax + jsr print_byte + lda w + tax + jsr print_byte + rts +} +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + txa + lsr + lsr + lsr + lsr + tay + lda print_hextab,y + jsr print_char + lda #$f + axs #0 + lda print_hextab,x + jsr print_char + rts +} +// Print a signed byte as HEX +// print_sbyte(signed byte register(X) b) +print_sbyte: { + cpx #0 + bmi b1 + lda #' ' + jsr print_char + b2: + jsr print_byte + rts + b1: + lda #'-' + jsr print_char + txa + eor #$ff + clc + adc #1 + tax + jmp b2 +} +// mulf8s127(signed byte register(Y) a, signed byte zeropage(2) b) +mulf8s127: { + .label _12 = $e + .label _13 = $e + .label _14 = $10 + .label _15 = $10 + .label b = 2 + .label return = 5 + .label c = 5 + tya + ldx b + jsr mulf8u127 + cpy #0 + bpl b1 + lda b + sta _12 + ora #$7f + bmi !+ + lda #0 + !: + sta _12+1 + asl _13 + rol _13+1 + lda c + sec + sbc _13 + sta c + lda c+1 + sbc _13+1 + sta c+1 + b1: + lda b + cmp #0 + bpl b2 + tya + sta _14 + ora #$7f + bmi !+ + lda #0 + !: + sta _14+1 + asl _15 + rol _15+1 + lda c + sec + sbc _15 + sta c + lda c+1 + sbc _15+1 + sta c+1 + b2: + cpy #0 + bpl b3 + lda b + cmp #0 + bpl b3 + lda c + sec + sbc #<$200 + sta c + lda c+1 + sbc #>$200 + sta c+1 + rts + b3: + rts +} +// mulf8u127(byte register(A) a, byte register(X) b) +mulf8u127: { + .label memA = $fc + .label memB = $fd + .label res = $fe + .label resL = $fe + .label resH = $ff + .label return = 5 + sta memA + stx memB + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + sec + sm1: + lda mulf127_sqr1_lo,x + sm2: + sbc mulf127_sqr2_lo,x + sta resL + sm3: + lda mulf127_sqr1_hi,x + sm4: + sbc mulf127_sqr2_hi,x + sta resH + lda res + sta return + lda res+1 + sta return+1 + rts +} +// Print a zero-terminated string +// print_str(byte* zeropage(9) str) +print_str: { + .label str = 9 + b1: + ldy #0 + lda (str),y + cmp #'@' + bne b2 + rts + b2: + ldy #0 + lda (str),y + sta (print_char_cursor),y + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + inc str + bne !+ + inc str+1 + !: + jmp b1 +} +// print_mulf8u127(byte register(Y) a, byte zeropage($b) b) +print_mulf8u127: { + .label c = 5 + .label b = $b + tya + ldx b + jsr mulf8u127 + tya + tax + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + jsr print_byte + lda #'*' + jsr print_char + ldx b + jsr print_byte + lda #'=' + jsr print_char + jsr print_word + jsr print_ln + rts +} +// Clear the screen. Also resets current line/char cursor. +print_cls: { + jsr memset + rts +} +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +memset: { + .const c = ' ' + .const num = $3e8 + .label str = $400 + .label end = str+num + .label dst = $c + lda #str + sta dst+1 + b1: + lda #c + ldy #0 + sta (dst),y + inc dst + bne !+ + inc dst+1 + !: + lda dst+1 + cmp #>end + bne b1 + lda dst + cmp #round((i/127*i/127)*127/4) + // g(x) = <((( x - 255) * ( x - 255 ))/4) + .align $100 +mulf127_sqr2_lo: +.fill 512, round(((i-255)/127*(i-255)/127)*127/4) diff --git a/src/test/ref/fastmultiply-127.cfg b/src/test/ref/fastmultiply-127.cfg new file mode 100644 index 000000000..4fe6a61b4 --- /dev/null +++ b/src/test/ref/fastmultiply-127.cfg @@ -0,0 +1,362 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + [5] call print_cls + to:main::@1 +main::@1: scope:[main] from main + [6] phi() + [7] call print_str + to:main::@2 +main::@2: scope:[main] from main::@1 + [8] phi() + [9] call print_ln + to:main::@3 +main::@3: scope:[main] from main::@2 + [10] phi() + [11] call print_mulf8u127 + to:main::@4 +main::@4: scope:[main] from main::@3 + [12] phi() + [13] call print_mulf8u127 + to:main::@5 +main::@5: scope:[main] from main::@4 + [14] phi() + [15] call print_mulf8u127 + to:main::@6 +main::@6: scope:[main] from main::@5 + [16] phi() + [17] call print_mulf8u127 + to:main::@7 +main::@7: scope:[main] from main::@6 + [18] phi() + [19] call print_mulf8u127 + to:main::@8 +main::@8: scope:[main] from main::@7 + [20] phi() + [21] call print_mulf8u127 + to:main::@9 +main::@9: scope:[main] from main::@8 + [22] phi() + [23] call print_mulf8u127 + to:main::@10 +main::@10: scope:[main] from main::@9 + [24] phi() + [25] call print_mulf8u127 + to:main::@11 +main::@11: scope:[main] from main::@10 + [26] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1 + [27] call print_str + to:main::@12 +main::@12: scope:[main] from main::@11 + [28] phi() + [29] call print_ln + to:main::@13 +main::@13: scope:[main] from main::@12 + [30] phi() + [31] call print_mulf8s127 + to:main::@14 +main::@14: scope:[main] from main::@13 + [32] phi() + [33] call print_mulf8s127 + to:main::@15 +main::@15: scope:[main] from main::@14 + [34] phi() + [35] call print_mulf8s127 + to:main::@16 +main::@16: scope:[main] from main::@15 + [36] phi() + [37] call print_mulf8s127 + to:main::@17 +main::@17: scope:[main] from main::@16 + [38] phi() + [39] call print_mulf8s127 + to:main::@18 +main::@18: scope:[main] from main::@17 + [40] phi() + [41] call print_mulf8s127 + to:main::@19 +main::@19: scope:[main] from main::@18 + [42] phi() + [43] call print_mulf8s127 + to:main::@20 +main::@20: scope:[main] from main::@19 + [44] phi() + [45] call print_mulf8s127 + to:main::@21 +main::@21: scope:[main] from main::@20 + [46] phi() + [47] call print_mulf8s127 + to:main::@22 +main::@22: scope:[main] from main::@21 + [48] phi() + [49] call print_mulf8s127 + to:main::@return +main::@return: scope:[main] from main::@22 + [50] return + to:@return +print_mulf8s127: scope:[print_mulf8s127] from main::@13 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@22 + [51] (signed byte) print_mulf8s127::b#10 ← phi( main::@13/(signed byte) 0 main::@14/(signed byte) $40 main::@15/(signed byte) $7f main::@16/(signed byte) $40 main::@17/(signed byte) -$40 main::@18/(signed byte) -$40 main::@19/(signed byte) $7f main::@20/(signed byte) $7f main::@21/(signed byte) -$7f main::@22/(signed byte) -$7f ) + [51] (signed byte) print_mulf8s127::a#10 ← phi( main::@13/(signed byte) 0 main::@14/(signed byte) $40 main::@15/(signed byte) $40 main::@16/(signed byte) -$40 main::@17/(signed byte) $40 main::@18/(signed byte) -$40 main::@19/(signed byte) $7f main::@20/(signed byte) -$7f main::@21/(signed byte) $7f main::@22/(signed byte) -$7f ) + [52] (signed byte) mulf8s127::a#0 ← (signed byte) print_mulf8s127::a#10 + [53] (signed byte) mulf8s127::b#0 ← (signed byte) print_mulf8s127::b#10 + [54] call mulf8s127 + [55] (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#1 + to:print_mulf8s127::@1 +print_mulf8s127::@1: scope:[print_mulf8s127] from print_mulf8s127 + [56] (signed word) print_mulf8s127::c#0 ← (signed word) mulf8s127::return#0 + [57] (signed byte) print_sbyte::b#1 ← (signed byte) print_mulf8s127::a#10 + [58] (byte*~) print_char_cursor#150 ← (byte*) print_line_cursor#1 + [59] call print_sbyte + to:print_mulf8s127::@2 +print_mulf8s127::@2: scope:[print_mulf8s127] from print_mulf8s127::@1 + [60] phi() + [61] call print_char + to:print_mulf8s127::@3 +print_mulf8s127::@3: scope:[print_mulf8s127] from print_mulf8s127::@2 + [62] (signed byte) print_sbyte::b#2 ← (signed byte) print_mulf8s127::b#10 + [63] call print_sbyte + to:print_mulf8s127::@4 +print_mulf8s127::@4: scope:[print_mulf8s127] from print_mulf8s127::@3 + [64] phi() + [65] call print_char + to:print_mulf8s127::@5 +print_mulf8s127::@5: scope:[print_mulf8s127] from print_mulf8s127::@4 + [66] (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#0 + [67] call print_sword + to:print_mulf8s127::@6 +print_mulf8s127::@6: scope:[print_mulf8s127] from print_mulf8s127::@5 + [68] phi() + [69] call print_ln + to:print_mulf8s127::@return +print_mulf8s127::@return: scope:[print_mulf8s127] from print_mulf8s127::@6 + [70] return + to:@return +print_ln: scope:[print_ln] from main::@12 main::@2 print_mulf8s127::@6 print_mulf8u127::@6 + [71] (byte*) print_char_cursor#123 ← phi( main::@12/(byte*) print_char_cursor#122 main::@2/(byte*) print_char_cursor#122 print_mulf8s127::@6/(byte*) print_char_cursor#19 print_mulf8u127::@6/(byte*) print_char_cursor#19 ) + [71] (byte*) print_line_cursor#63 ← phi( main::@12/(byte*) print_line_cursor#1 main::@2/(byte*) 1024 print_mulf8s127::@6/(byte*) print_line_cursor#1 print_mulf8u127::@6/(byte*) print_line_cursor#1 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [72] (byte*) print_line_cursor#32 ← phi( print_ln/(byte*) print_line_cursor#63 print_ln::@1/(byte*) print_line_cursor#1 ) + [73] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 + [74] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [75] return + to:@return +print_sword: scope:[print_sword] from print_mulf8s127::@5 + [76] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 + to:print_sword::@3 +print_sword::@3: scope:[print_sword] from print_sword + [77] phi() + [78] call print_char + to:print_sword::@2 +print_sword::@2: scope:[print_sword] from print_sword::@3 print_sword::@4 + [79] (signed word) print_sword::w#4 ← phi( print_sword::@4/(signed word) print_sword::w#0 print_sword::@3/(signed word) print_sword::w#1 ) + [80] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 + [81] call print_word + to:print_sword::@return +print_sword::@return: scope:[print_sword] from print_sword::@2 + [82] return + to:@return +print_sword::@1: scope:[print_sword] from print_sword + [83] phi() + [84] call print_char + to:print_sword::@4 +print_sword::@4: scope:[print_sword] from print_sword::@1 + [85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 + to:print_sword::@2 +print_char: scope:[print_char] from print_byte print_byte::@1 print_mulf8s127::@2 print_mulf8s127::@4 print_mulf8u127::@2 print_mulf8u127::@4 print_sbyte::@1 print_sbyte::@3 print_sword::@1 print_sword::@3 + [86] (byte*) print_char_cursor#80 ← phi( print_byte/(byte*) print_char_cursor#131 print_byte::@1/(byte*) print_char_cursor#19 print_mulf8s127::@2/(byte*) print_char_cursor#19 print_mulf8s127::@4/(byte*) print_char_cursor#19 print_mulf8u127::@2/(byte*) print_char_cursor#19 print_mulf8u127::@4/(byte*) print_char_cursor#19 print_sbyte::@1/(byte*) print_char_cursor#127 print_sbyte::@3/(byte*) print_char_cursor#127 print_sword::@1/(byte*) print_char_cursor#19 print_sword::@3/(byte*) print_char_cursor#19 ) + [86] (byte) print_char::ch#10 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 print_mulf8s127::@2/(byte) '*' print_mulf8s127::@4/(byte) '=' print_mulf8u127::@2/(byte) '*' print_mulf8u127::@4/(byte) '=' print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sword::@1/(byte) '-' print_sword::@3/(byte) ' ' ) + [87] *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 + [88] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#80 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [89] return + to:@return +print_word: scope:[print_word] from print_mulf8u127::@5 print_sword::@2 + [90] (word) print_word::w#2 ← phi( print_mulf8u127::@5/(word) print_word::w#1 print_sword::@2/(word) print_word::w#0 ) + [91] (byte) print_byte::b#1 ← > (word) print_word::w#2 + [92] call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [93] (byte) print_byte::b#2 ← < (word) print_word::w#2 + [94] call print_byte + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [95] return + to:@return +print_byte: scope:[print_byte] from print_mulf8u127::@1 print_mulf8u127::@3 print_sbyte::@2 print_word print_word::@1 + [96] (byte*) print_char_cursor#131 ← phi( print_mulf8u127::@1/(byte*~) print_char_cursor#152 print_mulf8u127::@3/(byte*) print_char_cursor#19 print_sbyte::@2/(byte*) print_char_cursor#19 print_word/(byte*) print_char_cursor#19 print_word::@1/(byte*) print_char_cursor#19 ) + [96] (byte) print_byte::b#5 ← phi( print_mulf8u127::@1/(byte) print_byte::b#3 print_mulf8u127::@3/(byte) print_byte::b#4 print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 ) + [97] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 + [98] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) + [99] call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [100] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f + [101] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) + [102] call print_char + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [103] return + to:@return +print_sbyte: scope:[print_sbyte] from print_mulf8s127::@1 print_mulf8s127::@3 + [104] (byte*) print_char_cursor#127 ← phi( print_mulf8s127::@1/(byte*~) print_char_cursor#150 print_mulf8s127::@3/(byte*) print_char_cursor#19 ) + [104] (signed byte) print_sbyte::b#3 ← phi( print_mulf8s127::@1/(signed byte) print_sbyte::b#1 print_mulf8s127::@3/(signed byte) print_sbyte::b#2 ) + [105] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 + to:print_sbyte::@3 +print_sbyte::@3: scope:[print_sbyte] from print_sbyte + [106] phi() + [107] call print_char + to:print_sbyte::@2 +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 + [108] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) + [109] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 + [110] call print_byte + to:print_sbyte::@return +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 + [111] return + to:@return +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + [112] phi() + [113] call print_char + to:print_sbyte::@4 +print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 + [114] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 + to:print_sbyte::@2 +mulf8s127: scope:[mulf8s127] from print_mulf8s127 + [115] (byte) mulf8u127::a#1 ← (byte)(signed byte) mulf8s127::a#0 + [116] (byte) mulf8u127::b#1 ← (byte)(signed byte) mulf8s127::b#0 + [117] call mulf8u127 + [118] (word) mulf8u127::return#3 ← (word) mulf8u127::return#1 + to:mulf8s127::@7 +mulf8s127::@7: scope:[mulf8s127] from mulf8s127 + [119] (word) mulf8s127::c#0 ← (word) mulf8u127::return#3 + [120] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@9 + to:mulf8s127::@4 +mulf8s127::@4: scope:[mulf8s127] from mulf8s127::@7 + [121] (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#0 + [122] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 << (byte) 1 + [123] (signed word) mulf8s127::c#1 ← (signed word)(word) mulf8s127::c#0 - (signed word~) mulf8s127::$13 + to:mulf8s127::@1 +mulf8s127::@1: scope:[mulf8s127] from mulf8s127::@4 mulf8s127::@9 + [124] (signed word) mulf8s127::c#5 ← phi( mulf8s127::@4/(signed word) mulf8s127::c#1 mulf8s127::@9/(signed word~) mulf8s127::c#11 ) + [125] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@2 + to:mulf8s127::@5 +mulf8s127::@5: scope:[mulf8s127] from mulf8s127::@1 + [126] (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#0 + [127] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 << (byte) 1 + [128] (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (signed word~) mulf8s127::$15 + to:mulf8s127::@2 +mulf8s127::@2: scope:[mulf8s127] from mulf8s127::@1 mulf8s127::@5 + [129] (signed word) mulf8s127::c#7 ← phi( mulf8s127::@1/(signed word) mulf8s127::c#5 mulf8s127::@5/(signed word) mulf8s127::c#2 ) + [130] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@3 + to:mulf8s127::@8 +mulf8s127::@8: scope:[mulf8s127] from mulf8s127::@2 + [131] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@3 + to:mulf8s127::@6 +mulf8s127::@6: scope:[mulf8s127] from mulf8s127::@8 + [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (signed word) $200 + to:mulf8s127::@3 +mulf8s127::@3: scope:[mulf8s127] from mulf8s127::@2 mulf8s127::@6 mulf8s127::@8 + [133] (signed word) mulf8s127::return#1 ← phi( mulf8s127::@2/(signed word) mulf8s127::c#7 mulf8s127::@6/(signed word) mulf8s127::c#3 ) + to:mulf8s127::@return +mulf8s127::@return: scope:[mulf8s127] from mulf8s127::@3 + [134] return + to:@return +mulf8s127::@9: scope:[mulf8s127] from mulf8s127::@7 + [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 + to:mulf8s127::@1 +mulf8u127: scope:[mulf8u127] from mulf8s127 print_mulf8u127 + [136] (byte) mulf8u127::b#2 ← phi( mulf8s127/(byte) mulf8u127::b#1 print_mulf8u127/(byte) mulf8u127::b#0 ) + [136] (byte) mulf8u127::a#2 ← phi( mulf8s127/(byte) mulf8u127::a#1 print_mulf8u127/(byte) mulf8u127::a#0 ) + [137] *((const byte*) mulf8u127::memA#0) ← (byte) mulf8u127::a#2 + [138] *((const byte*) mulf8u127::memB#0) ← (byte) mulf8u127::b#2 + asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } + [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) + to:mulf8u127::@return +mulf8u127::@return: scope:[mulf8u127] from mulf8u127 + [141] return + to:@return +print_str: scope:[print_str] from main::@1 main::@11 + [142] (byte*) print_char_cursor#136 ← phi( main::@1/(byte*) 1024 main::@11/(byte*~) print_char_cursor#143 ) + [142] (byte*) print_str::str#5 ← phi( main::@1/(const string) main::str main::@11/(const string) main::str1 ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + [143] (byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 print_str::@2/(byte*) print_char_cursor#1 ) + [143] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) + [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + to:print_str::@return +print_str::@return: scope:[print_str] from print_str::@1 + [145] return + to:@return +print_str::@2: scope:[print_str] from print_str::@1 + [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) + [147] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#122 + [148] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 + to:print_str::@1 +print_mulf8u127: scope:[print_mulf8u127] from main::@10 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 + [149] (byte) print_mulf8u127::b#10 ← phi( main::@10/(byte) $ff main::@3/(byte) 0 main::@4/(byte) $7f main::@5/(byte) $40 main::@6/(byte) $7f main::@7/(byte) $c0 main::@8/(byte) $7f main::@9/(byte) $c0 ) + [149] (byte) print_mulf8u127::a#8 ← phi( main::@10/(byte) $ff main::@3/(byte) 0 main::@4/(byte) $7f main::@5/(byte) $40 main::@6/(byte) $40 main::@7/(byte) $40 main::@8/(byte) $ff main::@9/(byte) $c0 ) + [150] (byte) mulf8u127::a#0 ← (byte) print_mulf8u127::a#8 + [151] (byte) mulf8u127::b#0 ← (byte) print_mulf8u127::b#10 + [152] call mulf8u127 + [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 + to:print_mulf8u127::@1 +print_mulf8u127::@1: scope:[print_mulf8u127] from print_mulf8u127 + [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 + [155] (byte) print_byte::b#3 ← (byte) print_mulf8u127::a#8 + [156] (byte*~) print_char_cursor#152 ← (byte*) print_line_cursor#1 + [157] call print_byte + to:print_mulf8u127::@2 +print_mulf8u127::@2: scope:[print_mulf8u127] from print_mulf8u127::@1 + [158] phi() + [159] call print_char + to:print_mulf8u127::@3 +print_mulf8u127::@3: scope:[print_mulf8u127] from print_mulf8u127::@2 + [160] (byte) print_byte::b#4 ← (byte) print_mulf8u127::b#10 + [161] call print_byte + to:print_mulf8u127::@4 +print_mulf8u127::@4: scope:[print_mulf8u127] from print_mulf8u127::@3 + [162] phi() + [163] call print_char + to:print_mulf8u127::@5 +print_mulf8u127::@5: scope:[print_mulf8u127] from print_mulf8u127::@4 + [164] (word) print_word::w#1 ← (word) print_mulf8u127::c#0 + [165] call print_word + to:print_mulf8u127::@6 +print_mulf8u127::@6: scope:[print_mulf8u127] from print_mulf8u127::@5 + [166] phi() + [167] call print_ln + to:print_mulf8u127::@return +print_mulf8u127::@return: scope:[print_mulf8u127] from print_mulf8u127::@6 + [168] return + to:@return +print_cls: scope:[print_cls] from main + [169] phi() + [170] call memset + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls + [171] return + to:@return +memset: scope:[memset] from print_cls + [172] phi() + to:memset::@1 +memset::@1: scope:[memset] from memset memset::@1 + [173] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@1/(byte*) memset::dst#1 ) + [174] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 + to:memset::@return +memset::@return: scope:[memset] from memset::@1 + [177] return + to:@return diff --git a/src/test/ref/fastmultiply-127.log b/src/test/ref/fastmultiply-127.log new file mode 100644 index 000000000..0c66cc142 --- /dev/null +++ b/src/test/ref/fastmultiply-127.log @@ -0,0 +1,6700 @@ +Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6 +Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1 +Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1 +Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) +Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) +Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) +Identified constant variable (byte*) HEAP_TOP +Culled Empty Block (label) @1 +Culled Empty Block (label) @2 +Culled Empty Block (label) memset::@5 +Culled Empty Block (label) memset::@3 +Culled Empty Block (label) @3 +Culled Empty Block (label) @4 +Culled Empty Block (label) @5 +Culled Empty Block (label) @6 +Culled Empty Block (label) @7 +Culled Empty Block (label) @8 +Culled Empty Block (label) @9 +Culled Empty Block (label) @10 +Culled Empty Block (label) @11 +Culled Empty Block (label) @13 +Culled Empty Block (label) @14 +Culled Empty Block (label) print_str::@4 +Culled Empty Block (label) print_str::@3 +Culled Empty Block (label) print_str::@5 +Culled Empty Block (label) print_str::@6 +Culled Empty Block (label) @15 +Culled Empty Block (label) @16 +Culled Empty Block (label) @17 +Culled Empty Block (label) print_sword::@4 +Culled Empty Block (label) @18 +Culled Empty Block (label) print_sbyte::@4 +Culled Empty Block (label) @19 +Culled Empty Block (label) @20 +Culled Empty Block (label) @21 +Culled Empty Block (label) @22 +Culled Empty Block (label) @23 +Culled Empty Block (label) @24 +Culled Empty Block (label) @25 +Culled Empty Block (label) @26 +Culled Empty Block (label) @27 +Culled Empty Block (label) @29 +Culled Empty Block (label) @30 +Culled Empty Block (label) @31 +Culled Empty Block (label) @32 +Culled Empty Block (label) @33 +Culled Empty Block (label) @34 +Culled Empty Block (label) @35 +Culled Empty Block (label) @36 +Culled Empty Block (label) @37 +Culled Empty Block (label) mulf8u127::@1 +Culled Empty Block (label) @39 +Culled Empty Block (label) mulf8s127::@7 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + to:@12 +memset: scope:[memset] from print_cls + (byte) memset::c#3 ← phi( print_cls/(byte) memset::c#0 ) + (void*) memset::str#3 ← phi( print_cls/(void*) memset::str#0 ) + (word) memset::num#1 ← phi( print_cls/(word) memset::num#0 ) + (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 + (bool~) memset::$1 ← ! (bool~) memset::$0 + if((bool~) memset::$1) goto memset::@1 + to:memset::@2 +memset::@1: scope:[memset] from memset memset::@4 + (void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@4/(void*) memset::str#4 ) + (void*) memset::return#0 ← (void*) memset::str#1 + to:memset::@return +memset::@2: scope:[memset] from memset + (byte) memset::c#2 ← phi( memset/(byte) memset::c#3 ) + (word) memset::num#2 ← phi( memset/(word) memset::num#1 ) + (void*) memset::str#2 ← phi( memset/(void*) memset::str#3 ) + (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#2 + (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#2 + (byte*) memset::end#0 ← (byte*~) memset::$3 + (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2 + to:memset::@4 +memset::@4: scope:[memset] from memset::@2 memset::@4 + (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@4/(void*) memset::str#4 ) + (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#1 ) + (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 ) + (byte) memset::c#1 ← phi( memset::@2/(byte) memset::c#2 memset::@4/(byte) memset::c#1 ) + *((byte*) memset::dst#2) ← (byte) memset::c#1 + (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + (bool~) memset::$4 ← (byte*) memset::dst#1 != (byte*) memset::end#1 + if((bool~) memset::$4) goto memset::@4 + to:memset::@1 +memset::@return: scope:[memset] from memset::@1 + (void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 ) + (void*) memset::return#1 ← (void*) memset::return#3 + return + to:@return +@12: scope:[] from @begin + (byte*) print_screen#0 ← ((byte*)) (number) $400 + (byte*) print_line_cursor#0 ← (byte*) print_screen#0 + (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0 + to:@28 +print_str: scope:[print_str] from main::@1 main::@11 + (byte*) print_char_cursor#136 ← phi( main::@1/(byte*) print_char_cursor#23 main::@11/(byte*) print_char_cursor#33 ) + (byte*) print_str::str#5 ← phi( main::@1/(byte*) print_str::str#1 main::@11/(byte*) print_str::str#2 ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + (byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 print_str::@2/(byte*) print_char_cursor#1 ) + (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) + (bool~) print_str::$0 ← *((byte*) print_str::str#3) != (byte) '@' + if((bool~) print_str::$0) goto print_str::@2 + to:print_str::@return +print_str::@2: scope:[print_str] from print_str::@1 + (byte*) print_char_cursor#62 ← phi( print_str::@1/(byte*) print_char_cursor#122 ) + (byte*) print_str::str#4 ← phi( print_str::@1/(byte*) print_str::str#3 ) + *((byte*) print_char_cursor#62) ← *((byte*) print_str::str#4) + (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#62 + (byte*) print_str::str#0 ← ++ (byte*) print_str::str#4 + to:print_str::@1 +print_str::@return: scope:[print_str] from print_str::@1 + (byte*) print_char_cursor#63 ← phi( print_str::@1/(byte*) print_char_cursor#122 ) + (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#63 + return + to:@return +print_ln: scope:[print_ln] from main::@12 main::@2 print_mulf8s127::@6 print_mulf8u127::@6 + (byte*) print_char_cursor#123 ← phi( main::@12/(byte*) print_char_cursor#34 main::@2/(byte*) print_char_cursor#24 print_mulf8s127::@6/(byte*) print_char_cursor#58 print_mulf8u127::@6/(byte*) print_char_cursor#51 ) + (byte*) print_line_cursor#63 ← phi( main::@12/(byte*) print_line_cursor#66 main::@2/(byte*) print_line_cursor#65 print_mulf8s127::@6/(byte*) print_line_cursor#68 print_mulf8u127::@6/(byte*) print_line_cursor#67 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*) print_char_cursor#64 ← phi( print_ln/(byte*) print_char_cursor#123 print_ln::@1/(byte*) print_char_cursor#64 ) + (byte*) print_line_cursor#32 ← phi( print_ln/(byte*) print_line_cursor#63 print_ln::@1/(byte*) print_line_cursor#1 ) + (byte*~) print_ln::$0 ← (byte*) print_line_cursor#32 + (number) $28 + (byte*) print_line_cursor#1 ← (byte*~) print_ln::$0 + (bool~) print_ln::$1 ← (byte*) print_line_cursor#1 < (byte*) print_char_cursor#64 + if((bool~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) print_line_cursor#33 ← phi( print_ln::@1/(byte*) print_line_cursor#1 ) + (byte*) print_char_cursor#3 ← (byte*) print_line_cursor#33 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + (byte*) print_char_cursor#65 ← phi( print_ln::@2/(byte*) print_char_cursor#3 ) + (byte*) print_line_cursor#34 ← phi( print_ln::@2/(byte*) print_line_cursor#33 ) + (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#34 + (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#65 + return + to:@return +print_sword: scope:[print_sword] from print_mulf8s127::@5 + (byte*) print_char_cursor#137 ← phi( print_mulf8s127::@5/(byte*) print_char_cursor#57 ) + (signed word) print_sword::w#2 ← phi( print_mulf8s127::@5/(signed word) print_sword::w#1 ) + (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (number) 0 + if((bool~) print_sword::$0) goto print_sword::@1 + to:print_sword::@3 +print_sword::@1: scope:[print_sword] from print_sword + (signed word) print_sword::w#5 ← phi( print_sword/(signed word) print_sword::w#2 ) + (byte*) print_char_cursor#124 ← phi( print_sword/(byte*) print_char_cursor#137 ) + (byte) print_char::ch#0 ← (byte) '-' + call print_char + to:print_sword::@5 +print_sword::@5: scope:[print_sword] from print_sword::@1 + (signed word) print_sword::w#3 ← phi( print_sword::@1/(signed word) print_sword::w#5 ) + (byte*) print_char_cursor#66 ← phi( print_sword::@1/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#66 + (signed word~) print_sword::$5 ← - (signed word) print_sword::w#3 + (signed word) print_sword::w#0 ← (signed word~) print_sword::$5 + to:print_sword::@2 +print_sword::@3: scope:[print_sword] from print_sword + (signed word) print_sword::w#7 ← phi( print_sword/(signed word) print_sword::w#2 ) + (byte*) print_char_cursor#125 ← phi( print_sword/(byte*) print_char_cursor#137 ) + (byte) print_char::ch#1 ← (byte) ' ' + call print_char + to:print_sword::@6 +print_sword::@6: scope:[print_sword] from print_sword::@3 + (signed word) print_sword::w#6 ← phi( print_sword::@3/(signed word) print_sword::w#7 ) + (byte*) print_char_cursor#67 ← phi( print_sword::@3/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#67 + to:print_sword::@2 +print_sword::@2: scope:[print_sword] from print_sword::@5 print_sword::@6 + (byte*) print_char_cursor#126 ← phi( print_sword::@5/(byte*) print_char_cursor#5 print_sword::@6/(byte*) print_char_cursor#6 ) + (signed word) print_sword::w#4 ← phi( print_sword::@5/(signed word) print_sword::w#0 print_sword::@6/(signed word) print_sword::w#6 ) + (word~) print_sword::$1 ← ((word)) (signed word) print_sword::w#4 + (word) print_word::w#0 ← (word~) print_sword::$1 + call print_word + to:print_sword::@7 +print_sword::@7: scope:[print_sword] from print_sword::@2 + (byte*) print_char_cursor#68 ← phi( print_sword::@2/(byte*) print_char_cursor#15 ) + (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#68 + to:print_sword::@return +print_sword::@return: scope:[print_sword] from print_sword::@7 + (byte*) print_char_cursor#69 ← phi( print_sword::@7/(byte*) print_char_cursor#7 ) + (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#69 + return + to:@return +print_sbyte: scope:[print_sbyte] from print_mulf8s127::@1 print_mulf8s127::@3 + (byte*) print_char_cursor#138 ← phi( print_mulf8s127::@1/(byte*) print_char_cursor#134 print_mulf8s127::@3/(byte*) print_char_cursor#55 ) + (signed byte) print_sbyte::b#3 ← phi( print_mulf8s127::@1/(signed byte) print_sbyte::b#1 print_mulf8s127::@3/(signed byte) print_sbyte::b#2 ) + (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (number) 0 + if((bool~) print_sbyte::$0) goto print_sbyte::@1 + to:print_sbyte::@3 +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + (signed byte) print_sbyte::b#6 ← phi( print_sbyte/(signed byte) print_sbyte::b#3 ) + (byte*) print_char_cursor#127 ← phi( print_sbyte/(byte*) print_char_cursor#138 ) + (byte) print_char::ch#2 ← (byte) '-' + call print_char + to:print_sbyte::@5 +print_sbyte::@5: scope:[print_sbyte] from print_sbyte::@1 + (signed byte) print_sbyte::b#4 ← phi( print_sbyte::@1/(signed byte) print_sbyte::b#6 ) + (byte*) print_char_cursor#70 ← phi( print_sbyte::@1/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#70 + (signed byte~) print_sbyte::$5 ← - (signed byte) print_sbyte::b#4 + (signed byte) print_sbyte::b#0 ← (signed byte~) print_sbyte::$5 + to:print_sbyte::@2 +print_sbyte::@3: scope:[print_sbyte] from print_sbyte + (signed byte) print_sbyte::b#8 ← phi( print_sbyte/(signed byte) print_sbyte::b#3 ) + (byte*) print_char_cursor#128 ← phi( print_sbyte/(byte*) print_char_cursor#138 ) + (byte) print_char::ch#3 ← (byte) ' ' + call print_char + to:print_sbyte::@6 +print_sbyte::@6: scope:[print_sbyte] from print_sbyte::@3 + (signed byte) print_sbyte::b#7 ← phi( print_sbyte::@3/(signed byte) print_sbyte::b#8 ) + (byte*) print_char_cursor#71 ← phi( print_sbyte::@3/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#71 + to:print_sbyte::@2 +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@5 print_sbyte::@6 + (byte*) print_char_cursor#129 ← phi( print_sbyte::@5/(byte*) print_char_cursor#9 print_sbyte::@6/(byte*) print_char_cursor#10 ) + (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@5/(signed byte) print_sbyte::b#0 print_sbyte::@6/(signed byte) print_sbyte::b#7 ) + (byte~) print_sbyte::$1 ← ((byte)) (signed byte) print_sbyte::b#5 + (byte) print_byte::b#0 ← (byte~) print_sbyte::$1 + call print_byte + to:print_sbyte::@7 +print_sbyte::@7: scope:[print_sbyte] from print_sbyte::@2 + (byte*) print_char_cursor#72 ← phi( print_sbyte::@2/(byte*) print_char_cursor#18 ) + (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#72 + to:print_sbyte::@return +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@7 + (byte*) print_char_cursor#73 ← phi( print_sbyte::@7/(byte*) print_char_cursor#11 ) + (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#73 + return + to:@return +print_word: scope:[print_word] from print_mulf8u127::@5 print_sword::@2 + (byte*) print_char_cursor#130 ← phi( print_mulf8u127::@5/(byte*) print_char_cursor#50 print_sword::@2/(byte*) print_char_cursor#126 ) + (word) print_word::w#2 ← phi( print_mulf8u127::@5/(word) print_word::w#1 print_sword::@2/(word) print_word::w#0 ) + (byte~) print_word::$0 ← > (word) print_word::w#2 + (byte) print_byte::b#1 ← (byte~) print_word::$0 + call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + (word) print_word::w#3 ← phi( print_word/(word) print_word::w#2 ) + (byte*) print_char_cursor#74 ← phi( print_word/(byte*) print_char_cursor#18 ) + (byte*) print_char_cursor#13 ← (byte*) print_char_cursor#74 + (byte~) print_word::$2 ← < (word) print_word::w#3 + (byte) print_byte::b#2 ← (byte~) print_word::$2 + call print_byte + to:print_word::@2 +print_word::@2: scope:[print_word] from print_word::@1 + (byte*) print_char_cursor#75 ← phi( print_word::@1/(byte*) print_char_cursor#18 ) + (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#75 + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@2 + (byte*) print_char_cursor#76 ← phi( print_word::@2/(byte*) print_char_cursor#14 ) + (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#76 + return + to:@return +@28: scope:[] from @12 + (byte*) print_screen#6 ← phi( @12/(byte*) print_screen#0 ) + (byte*) print_char_cursor#142 ← phi( @12/(byte*) print_char_cursor#0 ) + (byte*) print_line_cursor#75 ← phi( @12/(byte*) print_line_cursor#0 ) + (byte[]) print_hextab#0 ← (const string) $0 + to:@38 +print_byte: scope:[print_byte] from print_mulf8u127::@1 print_mulf8u127::@3 print_sbyte::@2 print_word print_word::@1 + (byte*) print_char_cursor#131 ← phi( print_mulf8u127::@1/(byte*) print_char_cursor#133 print_mulf8u127::@3/(byte*) print_char_cursor#48 print_sbyte::@2/(byte*) print_char_cursor#129 print_word/(byte*) print_char_cursor#130 print_word::@1/(byte*) print_char_cursor#13 ) + (byte) print_byte::b#5 ← phi( print_mulf8u127::@1/(byte) print_byte::b#3 print_mulf8u127::@3/(byte) print_byte::b#4 print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 ) + (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (number) 4 + (byte) print_char::ch#4 ← *((byte[]) print_hextab#0 + (byte~) print_byte::$0) + call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + (byte) print_byte::b#6 ← phi( print_byte/(byte) print_byte::b#5 ) + (byte*) print_char_cursor#77 ← phi( print_byte/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#77 + (number~) print_byte::$2 ← (byte) print_byte::b#6 & (number) $f + (byte) print_char::ch#5 ← *((byte[]) print_hextab#0 + (number~) print_byte::$2) + call print_char + to:print_byte::@2 +print_byte::@2: scope:[print_byte] from print_byte::@1 + (byte*) print_char_cursor#78 ← phi( print_byte::@1/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#78 + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@2 + (byte*) print_char_cursor#79 ← phi( print_byte::@2/(byte*) print_char_cursor#17 ) + (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#79 + return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 print_mulf8s127::@2 print_mulf8s127::@4 print_mulf8u127::@2 print_mulf8u127::@4 print_sbyte::@1 print_sbyte::@3 print_sword::@1 print_sword::@3 + (byte*) print_char_cursor#80 ← phi( print_byte/(byte*) print_char_cursor#131 print_byte::@1/(byte*) print_char_cursor#16 print_mulf8s127::@2/(byte*) print_char_cursor#54 print_mulf8s127::@4/(byte*) print_char_cursor#56 print_mulf8u127::@2/(byte*) print_char_cursor#47 print_mulf8u127::@4/(byte*) print_char_cursor#49 print_sbyte::@1/(byte*) print_char_cursor#127 print_sbyte::@3/(byte*) print_char_cursor#128 print_sword::@1/(byte*) print_char_cursor#124 print_sword::@3/(byte*) print_char_cursor#125 ) + (byte) print_char::ch#10 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 print_mulf8s127::@2/(byte) print_char::ch#8 print_mulf8s127::@4/(byte) print_char::ch#9 print_mulf8u127::@2/(byte) print_char::ch#6 print_mulf8u127::@4/(byte) print_char::ch#7 print_sbyte::@1/(byte) print_char::ch#2 print_sbyte::@3/(byte) print_char::ch#3 print_sword::@1/(byte) print_char::ch#0 print_sword::@3/(byte) print_char::ch#1 ) + *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 + (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#80 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + (byte*) print_char_cursor#81 ← phi( print_char/(byte*) print_char_cursor#19 ) + (byte*) print_char_cursor#20 ← (byte*) print_char_cursor#81 + return + to:@return +print_cls: scope:[print_cls] from main + (byte*) print_screen#1 ← phi( main/(byte*) print_screen#3 ) + (void*) memset::str#0 ← (void*)(byte*) print_screen#1 + (byte) memset::c#0 ← (byte) ' ' + (word) memset::num#0 ← (number) $3e8 + call memset + (void*) memset::return#2 ← (void*) memset::return#1 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls + (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 ) + (byte*) print_line_cursor#3 ← (byte*) print_screen#2 + (byte*) print_char_cursor#21 ← (byte*) print_line_cursor#3 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + (byte*) print_char_cursor#82 ← phi( print_cls::@1/(byte*) print_char_cursor#21 ) + (byte*) print_line_cursor#35 ← phi( print_cls::@1/(byte*) print_line_cursor#3 ) + (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#35 + (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#82 + return + to:@return +main: scope:[main] from @40 + (byte*) print_char_cursor#132 ← phi( @40/(byte*) print_char_cursor#135 ) + (byte*) print_line_cursor#64 ← phi( @40/(byte*) print_line_cursor#69 ) + (byte*) print_screen#3 ← phi( @40/(byte*) print_screen#4 ) + call print_cls + to:main::@1 +main::@1: scope:[main] from main + (byte*) print_char_cursor#83 ← phi( main/(byte*) print_char_cursor#22 ) + (byte*) print_line_cursor#36 ← phi( main/(byte*) print_line_cursor#4 ) + (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#36 + (byte*) print_char_cursor#23 ← (byte*) print_char_cursor#83 + (byte*) print_str::str#1 ← (const string) main::str + call print_str + to:main::@2 +main::@2: scope:[main] from main::@1 + (byte*) print_line_cursor#65 ← phi( main::@1/(byte*) print_line_cursor#5 ) + (byte*) print_char_cursor#84 ← phi( main::@1/(byte*) print_char_cursor#2 ) + (byte*) print_char_cursor#24 ← (byte*) print_char_cursor#84 + call print_ln + to:main::@3 +main::@3: scope:[main] from main::@2 + (byte*) print_char_cursor#85 ← phi( main::@2/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#37 ← phi( main::@2/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#37 + (byte*) print_char_cursor#25 ← (byte*) print_char_cursor#85 + (byte) print_mulf8u127::a#0 ← (number) 0 + (byte) print_mulf8u127::b#0 ← (number) 0 + call print_mulf8u127 + to:main::@4 +main::@4: scope:[main] from main::@3 + (byte*) print_line_cursor#38 ← phi( main::@3/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#86 ← phi( main::@3/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#26 ← (byte*) print_char_cursor#86 + (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#38 + (byte) print_mulf8u127::a#1 ← (number) $7f + (byte) print_mulf8u127::b#1 ← (number) $7f + call print_mulf8u127 + to:main::@5 +main::@5: scope:[main] from main::@4 + (byte*) print_line_cursor#39 ← phi( main::@4/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#87 ← phi( main::@4/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#27 ← (byte*) print_char_cursor#87 + (byte*) print_line_cursor#8 ← (byte*) print_line_cursor#39 + (byte) print_mulf8u127::a#2 ← (number) $40 + (byte) print_mulf8u127::b#2 ← (number) $40 + call print_mulf8u127 + to:main::@6 +main::@6: scope:[main] from main::@5 + (byte*) print_line_cursor#40 ← phi( main::@5/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#88 ← phi( main::@5/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#28 ← (byte*) print_char_cursor#88 + (byte*) print_line_cursor#9 ← (byte*) print_line_cursor#40 + (byte) print_mulf8u127::a#3 ← (number) $40 + (byte) print_mulf8u127::b#3 ← (number) $7f + call print_mulf8u127 + to:main::@7 +main::@7: scope:[main] from main::@6 + (byte*) print_line_cursor#41 ← phi( main::@6/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#89 ← phi( main::@6/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#29 ← (byte*) print_char_cursor#89 + (byte*) print_line_cursor#10 ← (byte*) print_line_cursor#41 + (byte) print_mulf8u127::a#4 ← (number) $40 + (byte) print_mulf8u127::b#4 ← (number) $c0 + call print_mulf8u127 + to:main::@8 +main::@8: scope:[main] from main::@7 + (byte*) print_line_cursor#42 ← phi( main::@7/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#90 ← phi( main::@7/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#30 ← (byte*) print_char_cursor#90 + (byte*) print_line_cursor#11 ← (byte*) print_line_cursor#42 + (byte) print_mulf8u127::a#5 ← (number) $ff + (byte) print_mulf8u127::b#5 ← (number) $7f + call print_mulf8u127 + to:main::@9 +main::@9: scope:[main] from main::@8 + (byte*) print_line_cursor#43 ← phi( main::@8/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#91 ← phi( main::@8/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#31 ← (byte*) print_char_cursor#91 + (byte*) print_line_cursor#12 ← (byte*) print_line_cursor#43 + (byte) print_mulf8u127::a#6 ← (number) $c0 + (byte) print_mulf8u127::b#6 ← (number) $c0 + call print_mulf8u127 + to:main::@10 +main::@10: scope:[main] from main::@9 + (byte*) print_line_cursor#44 ← phi( main::@9/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#92 ← phi( main::@9/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#32 ← (byte*) print_char_cursor#92 + (byte*) print_line_cursor#13 ← (byte*) print_line_cursor#44 + (byte) print_mulf8u127::a#7 ← (number) $ff + (byte) print_mulf8u127::b#7 ← (number) $ff + call print_mulf8u127 + to:main::@11 +main::@11: scope:[main] from main::@10 + (byte*) print_line_cursor#45 ← phi( main::@10/(byte*) print_line_cursor#28 ) + (byte*) print_char_cursor#93 ← phi( main::@10/(byte*) print_char_cursor#53 ) + (byte*) print_char_cursor#33 ← (byte*) print_char_cursor#93 + (byte*) print_line_cursor#14 ← (byte*) print_line_cursor#45 + (byte*) print_str::str#2 ← (const string) main::str1 + call print_str + to:main::@12 +main::@12: scope:[main] from main::@11 + (byte*) print_line_cursor#66 ← phi( main::@11/(byte*) print_line_cursor#14 ) + (byte*) print_char_cursor#94 ← phi( main::@11/(byte*) print_char_cursor#2 ) + (byte*) print_char_cursor#34 ← (byte*) print_char_cursor#94 + call print_ln + to:main::@13 +main::@13: scope:[main] from main::@12 + (byte*) print_char_cursor#95 ← phi( main::@12/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#46 ← phi( main::@12/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#15 ← (byte*) print_line_cursor#46 + (byte*) print_char_cursor#35 ← (byte*) print_char_cursor#95 + (signed byte) print_mulf8s127::a#0 ← (number) 0 + (signed byte) print_mulf8s127::b#0 ← (number) 0 + call print_mulf8s127 + to:main::@14 +main::@14: scope:[main] from main::@13 + (byte*) print_line_cursor#47 ← phi( main::@13/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#96 ← phi( main::@13/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#36 ← (byte*) print_char_cursor#96 + (byte*) print_line_cursor#16 ← (byte*) print_line_cursor#47 + (signed byte) print_mulf8s127::a#1 ← (number) $40 + (signed byte) print_mulf8s127::b#1 ← (number) $40 + call print_mulf8s127 + to:main::@15 +main::@15: scope:[main] from main::@14 + (byte*) print_line_cursor#48 ← phi( main::@14/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#97 ← phi( main::@14/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#37 ← (byte*) print_char_cursor#97 + (byte*) print_line_cursor#17 ← (byte*) print_line_cursor#48 + (signed byte) print_mulf8s127::a#2 ← (number) $40 + (signed byte) print_mulf8s127::b#2 ← (number) $7f + call print_mulf8s127 + to:main::@16 +main::@16: scope:[main] from main::@15 + (byte*) print_line_cursor#49 ← phi( main::@15/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#98 ← phi( main::@15/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#38 ← (byte*) print_char_cursor#98 + (byte*) print_line_cursor#18 ← (byte*) print_line_cursor#49 + (signed byte) print_mulf8s127::a#3 ← (number) -$40 + (signed byte) print_mulf8s127::b#3 ← (number) $40 + call print_mulf8s127 + to:main::@17 +main::@17: scope:[main] from main::@16 + (byte*) print_line_cursor#50 ← phi( main::@16/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#99 ← phi( main::@16/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#39 ← (byte*) print_char_cursor#99 + (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#50 + (signed byte) print_mulf8s127::a#4 ← (number) $40 + (signed byte) print_mulf8s127::b#4 ← (number) -$40 + call print_mulf8s127 + to:main::@18 +main::@18: scope:[main] from main::@17 + (byte*) print_line_cursor#51 ← phi( main::@17/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#100 ← phi( main::@17/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#40 ← (byte*) print_char_cursor#100 + (byte*) print_line_cursor#20 ← (byte*) print_line_cursor#51 + (signed byte) print_mulf8s127::a#5 ← (number) -$40 + (signed byte) print_mulf8s127::b#5 ← (number) -$40 + call print_mulf8s127 + to:main::@19 +main::@19: scope:[main] from main::@18 + (byte*) print_line_cursor#52 ← phi( main::@18/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#101 ← phi( main::@18/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#41 ← (byte*) print_char_cursor#101 + (byte*) print_line_cursor#21 ← (byte*) print_line_cursor#52 + (signed byte) print_mulf8s127::a#6 ← (number) $7f + (signed byte) print_mulf8s127::b#6 ← (number) $7f + call print_mulf8s127 + to:main::@20 +main::@20: scope:[main] from main::@19 + (byte*) print_line_cursor#53 ← phi( main::@19/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#102 ← phi( main::@19/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#42 ← (byte*) print_char_cursor#102 + (byte*) print_line_cursor#22 ← (byte*) print_line_cursor#53 + (signed byte) print_mulf8s127::a#7 ← (number) -$7f + (signed byte) print_mulf8s127::b#7 ← (number) $7f + call print_mulf8s127 + to:main::@21 +main::@21: scope:[main] from main::@20 + (byte*) print_line_cursor#54 ← phi( main::@20/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#103 ← phi( main::@20/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#43 ← (byte*) print_char_cursor#103 + (byte*) print_line_cursor#23 ← (byte*) print_line_cursor#54 + (signed byte) print_mulf8s127::a#8 ← (number) $7f + (signed byte) print_mulf8s127::b#8 ← (number) -$7f + call print_mulf8s127 + to:main::@22 +main::@22: scope:[main] from main::@21 + (byte*) print_line_cursor#55 ← phi( main::@21/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#104 ← phi( main::@21/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#44 ← (byte*) print_char_cursor#104 + (byte*) print_line_cursor#24 ← (byte*) print_line_cursor#55 + (signed byte) print_mulf8s127::a#9 ← (number) -$7f + (signed byte) print_mulf8s127::b#9 ← (number) -$7f + call print_mulf8s127 + to:main::@23 +main::@23: scope:[main] from main::@22 + (byte*) print_line_cursor#56 ← phi( main::@22/(byte*) print_line_cursor#30 ) + (byte*) print_char_cursor#105 ← phi( main::@22/(byte*) print_char_cursor#60 ) + (byte*) print_char_cursor#45 ← (byte*) print_char_cursor#105 + (byte*) print_line_cursor#25 ← (byte*) print_line_cursor#56 + to:main::@return +main::@return: scope:[main] from main::@23 + (byte*) print_char_cursor#106 ← phi( main::@23/(byte*) print_char_cursor#45 ) + (byte*) print_line_cursor#57 ← phi( main::@23/(byte*) print_line_cursor#25 ) + (byte*) print_line_cursor#26 ← (byte*) print_line_cursor#57 + (byte*) print_char_cursor#46 ← (byte*) print_char_cursor#106 + return + to:@return +print_mulf8u127: scope:[print_mulf8u127] from main::@10 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 + (byte*) print_line_cursor#82 ← phi( main::@10/(byte*) print_line_cursor#13 main::@3/(byte*) print_line_cursor#6 main::@4/(byte*) print_line_cursor#7 main::@5/(byte*) print_line_cursor#8 main::@6/(byte*) print_line_cursor#9 main::@7/(byte*) print_line_cursor#10 main::@8/(byte*) print_line_cursor#11 main::@9/(byte*) print_line_cursor#12 ) + (byte*) print_char_cursor#139 ← phi( main::@10/(byte*) print_char_cursor#32 main::@3/(byte*) print_char_cursor#25 main::@4/(byte*) print_char_cursor#26 main::@5/(byte*) print_char_cursor#27 main::@6/(byte*) print_char_cursor#28 main::@7/(byte*) print_char_cursor#29 main::@8/(byte*) print_char_cursor#30 main::@9/(byte*) print_char_cursor#31 ) + (byte) print_mulf8u127::b#8 ← phi( main::@10/(byte) print_mulf8u127::b#7 main::@3/(byte) print_mulf8u127::b#0 main::@4/(byte) print_mulf8u127::b#1 main::@5/(byte) print_mulf8u127::b#2 main::@6/(byte) print_mulf8u127::b#3 main::@7/(byte) print_mulf8u127::b#4 main::@8/(byte) print_mulf8u127::b#5 main::@9/(byte) print_mulf8u127::b#6 ) + (byte) print_mulf8u127::a#8 ← phi( main::@10/(byte) print_mulf8u127::a#7 main::@3/(byte) print_mulf8u127::a#0 main::@4/(byte) print_mulf8u127::a#1 main::@5/(byte) print_mulf8u127::a#2 main::@6/(byte) print_mulf8u127::a#3 main::@7/(byte) print_mulf8u127::a#4 main::@8/(byte) print_mulf8u127::a#5 main::@9/(byte) print_mulf8u127::a#6 ) + (byte) mulf8u127::a#0 ← (byte) print_mulf8u127::a#8 + (byte) mulf8u127::b#0 ← (byte) print_mulf8u127::b#8 + call mulf8u127 + (word) mulf8u127::return#0 ← (word) mulf8u127::return#2 + to:print_mulf8u127::@1 +print_mulf8u127::@1: scope:[print_mulf8u127] from print_mulf8u127 + (byte*) print_line_cursor#80 ← phi( print_mulf8u127/(byte*) print_line_cursor#82 ) + (byte) print_mulf8u127::b#11 ← phi( print_mulf8u127/(byte) print_mulf8u127::b#8 ) + (byte*) print_char_cursor#133 ← phi( print_mulf8u127/(byte*) print_char_cursor#139 ) + (byte) print_mulf8u127::a#9 ← phi( print_mulf8u127/(byte) print_mulf8u127::a#8 ) + (word) mulf8u127::return#4 ← phi( print_mulf8u127/(word) mulf8u127::return#0 ) + (word~) print_mulf8u127::$0 ← (word) mulf8u127::return#4 + (word) print_mulf8u127::c#0 ← (word~) print_mulf8u127::$0 + (byte) print_byte::b#3 ← (byte) print_mulf8u127::a#9 + call print_byte + to:print_mulf8u127::@2 +print_mulf8u127::@2: scope:[print_mulf8u127] from print_mulf8u127::@1 + (byte*) print_line_cursor#78 ← phi( print_mulf8u127::@1/(byte*) print_line_cursor#80 ) + (word) print_mulf8u127::c#4 ← phi( print_mulf8u127::@1/(word) print_mulf8u127::c#0 ) + (byte) print_mulf8u127::b#10 ← phi( print_mulf8u127::@1/(byte) print_mulf8u127::b#11 ) + (byte*) print_char_cursor#107 ← phi( print_mulf8u127::@1/(byte*) print_char_cursor#18 ) + (byte*) print_char_cursor#47 ← (byte*) print_char_cursor#107 + (byte) print_char::ch#6 ← (byte) '*' + call print_char + to:print_mulf8u127::@3 +print_mulf8u127::@3: scope:[print_mulf8u127] from print_mulf8u127::@2 + (byte*) print_line_cursor#76 ← phi( print_mulf8u127::@2/(byte*) print_line_cursor#78 ) + (word) print_mulf8u127::c#3 ← phi( print_mulf8u127::@2/(word) print_mulf8u127::c#4 ) + (byte) print_mulf8u127::b#9 ← phi( print_mulf8u127::@2/(byte) print_mulf8u127::b#10 ) + (byte*) print_char_cursor#108 ← phi( print_mulf8u127::@2/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#48 ← (byte*) print_char_cursor#108 + (byte) print_byte::b#4 ← (byte) print_mulf8u127::b#9 + call print_byte + to:print_mulf8u127::@4 +print_mulf8u127::@4: scope:[print_mulf8u127] from print_mulf8u127::@3 + (byte*) print_line_cursor#73 ← phi( print_mulf8u127::@3/(byte*) print_line_cursor#76 ) + (word) print_mulf8u127::c#2 ← phi( print_mulf8u127::@3/(word) print_mulf8u127::c#3 ) + (byte*) print_char_cursor#109 ← phi( print_mulf8u127::@3/(byte*) print_char_cursor#18 ) + (byte*) print_char_cursor#49 ← (byte*) print_char_cursor#109 + (byte) print_char::ch#7 ← (byte) '=' + call print_char + to:print_mulf8u127::@5 +print_mulf8u127::@5: scope:[print_mulf8u127] from print_mulf8u127::@4 + (byte*) print_line_cursor#70 ← phi( print_mulf8u127::@4/(byte*) print_line_cursor#73 ) + (word) print_mulf8u127::c#1 ← phi( print_mulf8u127::@4/(word) print_mulf8u127::c#2 ) + (byte*) print_char_cursor#110 ← phi( print_mulf8u127::@4/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#50 ← (byte*) print_char_cursor#110 + (word) print_word::w#1 ← (word) print_mulf8u127::c#1 + call print_word + to:print_mulf8u127::@6 +print_mulf8u127::@6: scope:[print_mulf8u127] from print_mulf8u127::@5 + (byte*) print_line_cursor#67 ← phi( print_mulf8u127::@5/(byte*) print_line_cursor#70 ) + (byte*) print_char_cursor#111 ← phi( print_mulf8u127::@5/(byte*) print_char_cursor#15 ) + (byte*) print_char_cursor#51 ← (byte*) print_char_cursor#111 + call print_ln + to:print_mulf8u127::@7 +print_mulf8u127::@7: scope:[print_mulf8u127] from print_mulf8u127::@6 + (byte*) print_char_cursor#112 ← phi( print_mulf8u127::@6/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#58 ← phi( print_mulf8u127::@6/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#27 ← (byte*) print_line_cursor#58 + (byte*) print_char_cursor#52 ← (byte*) print_char_cursor#112 + to:print_mulf8u127::@return +print_mulf8u127::@return: scope:[print_mulf8u127] from print_mulf8u127::@7 + (byte*) print_line_cursor#59 ← phi( print_mulf8u127::@7/(byte*) print_line_cursor#27 ) + (byte*) print_char_cursor#113 ← phi( print_mulf8u127::@7/(byte*) print_char_cursor#52 ) + (byte*) print_char_cursor#53 ← (byte*) print_char_cursor#113 + (byte*) print_line_cursor#28 ← (byte*) print_line_cursor#59 + return + to:@return +print_mulf8s127: scope:[print_mulf8s127] from main::@13 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@22 + (byte*) print_line_cursor#83 ← phi( main::@13/(byte*) print_line_cursor#15 main::@14/(byte*) print_line_cursor#16 main::@15/(byte*) print_line_cursor#17 main::@16/(byte*) print_line_cursor#18 main::@17/(byte*) print_line_cursor#19 main::@18/(byte*) print_line_cursor#20 main::@19/(byte*) print_line_cursor#21 main::@20/(byte*) print_line_cursor#22 main::@21/(byte*) print_line_cursor#23 main::@22/(byte*) print_line_cursor#24 ) + (byte*) print_char_cursor#140 ← phi( main::@13/(byte*) print_char_cursor#35 main::@14/(byte*) print_char_cursor#36 main::@15/(byte*) print_char_cursor#37 main::@16/(byte*) print_char_cursor#38 main::@17/(byte*) print_char_cursor#39 main::@18/(byte*) print_char_cursor#40 main::@19/(byte*) print_char_cursor#41 main::@20/(byte*) print_char_cursor#42 main::@21/(byte*) print_char_cursor#43 main::@22/(byte*) print_char_cursor#44 ) + (signed byte) print_mulf8s127::b#10 ← phi( main::@13/(signed byte) print_mulf8s127::b#0 main::@14/(signed byte) print_mulf8s127::b#1 main::@15/(signed byte) print_mulf8s127::b#2 main::@16/(signed byte) print_mulf8s127::b#3 main::@17/(signed byte) print_mulf8s127::b#4 main::@18/(signed byte) print_mulf8s127::b#5 main::@19/(signed byte) print_mulf8s127::b#6 main::@20/(signed byte) print_mulf8s127::b#7 main::@21/(signed byte) print_mulf8s127::b#8 main::@22/(signed byte) print_mulf8s127::b#9 ) + (signed byte) print_mulf8s127::a#10 ← phi( main::@13/(signed byte) print_mulf8s127::a#0 main::@14/(signed byte) print_mulf8s127::a#1 main::@15/(signed byte) print_mulf8s127::a#2 main::@16/(signed byte) print_mulf8s127::a#3 main::@17/(signed byte) print_mulf8s127::a#4 main::@18/(signed byte) print_mulf8s127::a#5 main::@19/(signed byte) print_mulf8s127::a#6 main::@20/(signed byte) print_mulf8s127::a#7 main::@21/(signed byte) print_mulf8s127::a#8 main::@22/(signed byte) print_mulf8s127::a#9 ) + (signed byte) mulf8s127::a#0 ← (signed byte) print_mulf8s127::a#10 + (signed byte) mulf8s127::b#0 ← (signed byte) print_mulf8s127::b#10 + call mulf8s127 + (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#2 + to:print_mulf8s127::@1 +print_mulf8s127::@1: scope:[print_mulf8s127] from print_mulf8s127 + (byte*) print_line_cursor#81 ← phi( print_mulf8s127/(byte*) print_line_cursor#83 ) + (signed byte) print_mulf8s127::b#13 ← phi( print_mulf8s127/(signed byte) print_mulf8s127::b#10 ) + (byte*) print_char_cursor#134 ← phi( print_mulf8s127/(byte*) print_char_cursor#140 ) + (signed byte) print_mulf8s127::a#11 ← phi( print_mulf8s127/(signed byte) print_mulf8s127::a#10 ) + (signed word) mulf8s127::return#3 ← phi( print_mulf8s127/(signed word) mulf8s127::return#0 ) + (signed word~) print_mulf8s127::$0 ← (signed word) mulf8s127::return#3 + (signed word) print_mulf8s127::c#0 ← (signed word~) print_mulf8s127::$0 + (signed byte) print_sbyte::b#1 ← (signed byte) print_mulf8s127::a#11 + call print_sbyte + to:print_mulf8s127::@2 +print_mulf8s127::@2: scope:[print_mulf8s127] from print_mulf8s127::@1 + (byte*) print_line_cursor#79 ← phi( print_mulf8s127::@1/(byte*) print_line_cursor#81 ) + (signed word) print_mulf8s127::c#4 ← phi( print_mulf8s127::@1/(signed word) print_mulf8s127::c#0 ) + (signed byte) print_mulf8s127::b#12 ← phi( print_mulf8s127::@1/(signed byte) print_mulf8s127::b#13 ) + (byte*) print_char_cursor#114 ← phi( print_mulf8s127::@1/(byte*) print_char_cursor#12 ) + (byte*) print_char_cursor#54 ← (byte*) print_char_cursor#114 + (byte) print_char::ch#8 ← (byte) '*' + call print_char + to:print_mulf8s127::@3 +print_mulf8s127::@3: scope:[print_mulf8s127] from print_mulf8s127::@2 + (byte*) print_line_cursor#77 ← phi( print_mulf8s127::@2/(byte*) print_line_cursor#79 ) + (signed word) print_mulf8s127::c#3 ← phi( print_mulf8s127::@2/(signed word) print_mulf8s127::c#4 ) + (signed byte) print_mulf8s127::b#11 ← phi( print_mulf8s127::@2/(signed byte) print_mulf8s127::b#12 ) + (byte*) print_char_cursor#115 ← phi( print_mulf8s127::@2/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#55 ← (byte*) print_char_cursor#115 + (signed byte) print_sbyte::b#2 ← (signed byte) print_mulf8s127::b#11 + call print_sbyte + to:print_mulf8s127::@4 +print_mulf8s127::@4: scope:[print_mulf8s127] from print_mulf8s127::@3 + (byte*) print_line_cursor#74 ← phi( print_mulf8s127::@3/(byte*) print_line_cursor#77 ) + (signed word) print_mulf8s127::c#2 ← phi( print_mulf8s127::@3/(signed word) print_mulf8s127::c#3 ) + (byte*) print_char_cursor#116 ← phi( print_mulf8s127::@3/(byte*) print_char_cursor#12 ) + (byte*) print_char_cursor#56 ← (byte*) print_char_cursor#116 + (byte) print_char::ch#9 ← (byte) '=' + call print_char + to:print_mulf8s127::@5 +print_mulf8s127::@5: scope:[print_mulf8s127] from print_mulf8s127::@4 + (byte*) print_line_cursor#71 ← phi( print_mulf8s127::@4/(byte*) print_line_cursor#74 ) + (signed word) print_mulf8s127::c#1 ← phi( print_mulf8s127::@4/(signed word) print_mulf8s127::c#2 ) + (byte*) print_char_cursor#117 ← phi( print_mulf8s127::@4/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#57 ← (byte*) print_char_cursor#117 + (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#1 + call print_sword + to:print_mulf8s127::@6 +print_mulf8s127::@6: scope:[print_mulf8s127] from print_mulf8s127::@5 + (byte*) print_line_cursor#68 ← phi( print_mulf8s127::@5/(byte*) print_line_cursor#71 ) + (byte*) print_char_cursor#118 ← phi( print_mulf8s127::@5/(byte*) print_char_cursor#8 ) + (byte*) print_char_cursor#58 ← (byte*) print_char_cursor#118 + call print_ln + to:print_mulf8s127::@7 +print_mulf8s127::@7: scope:[print_mulf8s127] from print_mulf8s127::@6 + (byte*) print_char_cursor#119 ← phi( print_mulf8s127::@6/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#60 ← phi( print_mulf8s127::@6/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#29 ← (byte*) print_line_cursor#60 + (byte*) print_char_cursor#59 ← (byte*) print_char_cursor#119 + to:print_mulf8s127::@return +print_mulf8s127::@return: scope:[print_mulf8s127] from print_mulf8s127::@7 + (byte*) print_line_cursor#61 ← phi( print_mulf8s127::@7/(byte*) print_line_cursor#29 ) + (byte*) print_char_cursor#120 ← phi( print_mulf8s127::@7/(byte*) print_char_cursor#59 ) + (byte*) print_char_cursor#60 ← (byte*) print_char_cursor#120 + (byte*) print_line_cursor#30 ← (byte*) print_line_cursor#61 + return + to:@return +@38: scope:[] from @28 + (byte*) print_screen#5 ← phi( @28/(byte*) print_screen#6 ) + (byte*) print_char_cursor#141 ← phi( @28/(byte*) print_char_cursor#142 ) + (byte*) print_line_cursor#72 ← phi( @28/(byte*) print_line_cursor#75 ) + (byte[$200]) mulf127_sqr1_lo#0 ← kickasm {{ .fill 512, round((i/127*i/127)*127/4) }} + (byte[$200]) mulf127_sqr2_lo#0 ← kickasm {{ .fill 512, round(((i-255)/127*(i-255)/127)*127/4) }} + to:@40 +mulf8u127: scope:[mulf8u127] from mulf8s127 print_mulf8u127 + (byte) mulf8u127::b#2 ← phi( mulf8s127/(byte) mulf8u127::b#1 print_mulf8u127/(byte) mulf8u127::b#0 ) + (byte) mulf8u127::a#2 ← phi( mulf8s127/(byte) mulf8u127::a#1 print_mulf8u127/(byte) mulf8u127::a#0 ) + (byte*) mulf8u127::memA#0 ← ((byte*)) (number) $fc + (byte*) mulf8u127::memB#0 ← ((byte*)) (number) $fd + (word*) mulf8u127::res#0 ← ((word*)) (number) $fe + (byte*) mulf8u127::resL#0 ← ((byte*)) (number) $fe + (byte*) mulf8u127::resH#0 ← ((byte*)) (number) $ff + *((byte*) mulf8u127::memA#0) ← (byte) mulf8u127::a#2 + *((byte*) mulf8u127::memB#0) ← (byte) mulf8u127::b#2 + asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } + (word) mulf8u127::return#1 ← *((word*) mulf8u127::res#0) + to:mulf8u127::@return +mulf8u127::@return: scope:[mulf8u127] from mulf8u127 + (word) mulf8u127::return#5 ← phi( mulf8u127/(word) mulf8u127::return#1 ) + (word) mulf8u127::return#2 ← (word) mulf8u127::return#5 + return + to:@return +mulf8s127: scope:[mulf8s127] from print_mulf8s127 + (signed byte) mulf8s127::b#1 ← phi( print_mulf8s127/(signed byte) mulf8s127::b#0 ) + (signed byte) mulf8s127::a#1 ← phi( print_mulf8s127/(signed byte) mulf8s127::a#0 ) + (byte~) mulf8s127::$0 ← ((byte)) (signed byte) mulf8s127::a#1 + (byte~) mulf8s127::$1 ← ((byte)) (signed byte) mulf8s127::b#1 + (byte) mulf8u127::a#1 ← (byte~) mulf8s127::$0 + (byte) mulf8u127::b#1 ← (byte~) mulf8s127::$1 + call mulf8u127 + (word) mulf8u127::return#3 ← (word) mulf8u127::return#2 + to:mulf8s127::@8 +mulf8s127::@8: scope:[mulf8s127] from mulf8s127 + (signed byte) mulf8s127::b#5 ← phi( mulf8s127/(signed byte) mulf8s127::b#1 ) + (signed byte) mulf8s127::a#2 ← phi( mulf8s127/(signed byte) mulf8s127::a#1 ) + (word) mulf8u127::return#6 ← phi( mulf8s127/(word) mulf8u127::return#3 ) + (word~) mulf8s127::$2 ← (word) mulf8u127::return#6 + (signed word~) mulf8s127::$3 ← ((signed word)) (word~) mulf8s127::$2 + (signed word) mulf8s127::c#0 ← (signed word~) mulf8s127::$3 + (bool~) mulf8s127::$4 ← (signed byte) mulf8s127::a#2 < (number) 0 + (bool~) mulf8s127::$5 ← ! (bool~) mulf8s127::$4 + if((bool~) mulf8s127::$5) goto mulf8s127::@1 + to:mulf8s127::@4 +mulf8s127::@1: scope:[mulf8s127] from mulf8s127::@4 mulf8s127::@8 + (signed word) mulf8s127::c#8 ← phi( mulf8s127::@4/(signed word) mulf8s127::c#1 mulf8s127::@8/(signed word) mulf8s127::c#0 ) + (signed byte) mulf8s127::a#5 ← phi( mulf8s127::@4/(signed byte) mulf8s127::a#6 mulf8s127::@8/(signed byte) mulf8s127::a#2 ) + (signed byte) mulf8s127::b#2 ← phi( mulf8s127::@4/(signed byte) mulf8s127::b#3 mulf8s127::@8/(signed byte) mulf8s127::b#5 ) + (bool~) mulf8s127::$6 ← (signed byte) mulf8s127::b#2 < (number) 0 + (bool~) mulf8s127::$7 ← ! (bool~) mulf8s127::$6 + if((bool~) mulf8s127::$7) goto mulf8s127::@2 + to:mulf8s127::@5 +mulf8s127::@4: scope:[mulf8s127] from mulf8s127::@8 + (signed byte) mulf8s127::a#6 ← phi( mulf8s127::@8/(signed byte) mulf8s127::a#2 ) + (signed word) mulf8s127::c#4 ← phi( mulf8s127::@8/(signed word) mulf8s127::c#0 ) + (signed byte) mulf8s127::b#3 ← phi( mulf8s127::@8/(signed byte) mulf8s127::b#5 ) + (signed word~) mulf8s127::$12 ← ((signed word)) (signed byte) mulf8s127::b#3 + (number~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 * (number) 2 + (signed word) mulf8s127::c#1 ← (signed word) mulf8s127::c#4 - (number~) mulf8s127::$13 + to:mulf8s127::@1 +mulf8s127::@2: scope:[mulf8s127] from mulf8s127::@1 mulf8s127::@5 + (signed word) mulf8s127::c#9 ← phi( mulf8s127::@1/(signed word) mulf8s127::c#8 mulf8s127::@5/(signed word) mulf8s127::c#2 ) + (signed byte) mulf8s127::b#4 ← phi( mulf8s127::@1/(signed byte) mulf8s127::b#2 mulf8s127::@5/(signed byte) mulf8s127::b#6 ) + (signed byte) mulf8s127::a#3 ← phi( mulf8s127::@1/(signed byte) mulf8s127::a#5 mulf8s127::@5/(signed byte) mulf8s127::a#4 ) + (bool~) mulf8s127::$8 ← (signed byte) mulf8s127::a#3 < (number) 0 + (bool~) mulf8s127::$9 ← (signed byte) mulf8s127::b#4 < (number) 0 + (bool~) mulf8s127::$10 ← (bool~) mulf8s127::$8 && (bool~) mulf8s127::$9 + (bool~) mulf8s127::$11 ← ! (bool~) mulf8s127::$10 + if((bool~) mulf8s127::$11) goto mulf8s127::@3 + to:mulf8s127::@6 +mulf8s127::@5: scope:[mulf8s127] from mulf8s127::@1 + (signed byte) mulf8s127::b#6 ← phi( mulf8s127::@1/(signed byte) mulf8s127::b#2 ) + (signed word) mulf8s127::c#5 ← phi( mulf8s127::@1/(signed word) mulf8s127::c#8 ) + (signed byte) mulf8s127::a#4 ← phi( mulf8s127::@1/(signed byte) mulf8s127::a#5 ) + (signed word~) mulf8s127::$14 ← ((signed word)) (signed byte) mulf8s127::a#4 + (number~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 * (number) 2 + (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (number~) mulf8s127::$15 + to:mulf8s127::@2 +mulf8s127::@3: scope:[mulf8s127] from mulf8s127::@2 mulf8s127::@6 + (signed word) mulf8s127::c#6 ← phi( mulf8s127::@2/(signed word) mulf8s127::c#9 mulf8s127::@6/(signed word) mulf8s127::c#3 ) + (signed word) mulf8s127::return#1 ← (signed word) mulf8s127::c#6 + to:mulf8s127::@return +mulf8s127::@6: scope:[mulf8s127] from mulf8s127::@2 + (signed word) mulf8s127::c#7 ← phi( mulf8s127::@2/(signed word) mulf8s127::c#9 ) + (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (number) $200 + to:mulf8s127::@3 +mulf8s127::@return: scope:[mulf8s127] from mulf8s127::@3 + (signed word) mulf8s127::return#4 ← phi( mulf8s127::@3/(signed word) mulf8s127::return#1 ) + (signed word) mulf8s127::return#2 ← (signed word) mulf8s127::return#4 + return + to:@return +@40: scope:[] from @38 + (byte*) print_screen#4 ← phi( @38/(byte*) print_screen#5 ) + (byte*) print_char_cursor#135 ← phi( @38/(byte*) print_char_cursor#141 ) + (byte*) print_line_cursor#69 ← phi( @38/(byte*) print_line_cursor#72 ) + call main + to:@41 +@41: scope:[] from @40 + (byte*) print_char_cursor#121 ← phi( @40/(byte*) print_char_cursor#46 ) + (byte*) print_line_cursor#62 ← phi( @40/(byte*) print_line_cursor#26 ) + (byte*) print_line_cursor#31 ← (byte*) print_line_cursor#62 + (byte*) print_char_cursor#61 ← (byte*) print_char_cursor#121 + to:@end +@end: scope:[] from @41 + +SYMBOL TABLE SSA +(const string) $0 = (string) "0123456789abcdef" +(label) @12 +(label) @28 +(label) @38 +(label) @40 +(label) @41 +(label) @begin +(label) @end +(const byte) RADIX::BINARY = (number) 2 +(const byte) RADIX::DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL = (number) 8 +(void()) main() +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@14 +(label) main::@15 +(label) main::@16 +(label) main::@17 +(label) main::@18 +(label) main::@19 +(label) main::@2 +(label) main::@20 +(label) main::@21 +(label) main::@22 +(label) main::@23 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(const string) main::str = (string) "unsigned@" +(const string) main::str1 = (string) "signed@" +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(bool~) memset::$0 +(bool~) memset::$1 +(byte*~) memset::$2 +(byte*~) memset::$3 +(bool~) memset::$4 +(label) memset::@1 +(label) memset::@2 +(label) memset::@4 +(label) memset::@return +(byte) memset::c +(byte) memset::c#0 +(byte) memset::c#1 +(byte) memset::c#2 +(byte) memset::c#3 +(byte*) memset::dst +(byte*) memset::dst#0 +(byte*) memset::dst#1 +(byte*) memset::dst#2 +(byte*) memset::end +(byte*) memset::end#0 +(byte*) memset::end#1 +(word) memset::num +(word) memset::num#0 +(word) memset::num#1 +(word) memset::num#2 +(void*) memset::return +(void*) memset::return#0 +(void*) memset::return#1 +(void*) memset::return#2 +(void*) memset::return#3 +(void*) memset::str +(void*) memset::str#0 +(void*) memset::str#1 +(void*) memset::str#2 +(void*) memset::str#3 +(void*) memset::str#4 +(byte[$200]) mulf127_sqr1_hi +(byte[$200]) mulf127_sqr1_hi#0 +(byte[$200]) mulf127_sqr1_lo +(byte[$200]) mulf127_sqr1_lo#0 +(byte[$200]) mulf127_sqr2_hi +(byte[$200]) mulf127_sqr2_hi#0 +(byte[$200]) mulf127_sqr2_lo +(byte[$200]) mulf127_sqr2_lo#0 +(signed word()) mulf8s127((signed byte) mulf8s127::a , (signed byte) mulf8s127::b) +(byte~) mulf8s127::$0 +(byte~) mulf8s127::$1 +(bool~) mulf8s127::$10 +(bool~) mulf8s127::$11 +(signed word~) mulf8s127::$12 +(number~) mulf8s127::$13 +(signed word~) mulf8s127::$14 +(number~) mulf8s127::$15 +(word~) mulf8s127::$2 +(signed word~) mulf8s127::$3 +(bool~) mulf8s127::$4 +(bool~) mulf8s127::$5 +(bool~) mulf8s127::$6 +(bool~) mulf8s127::$7 +(bool~) mulf8s127::$8 +(bool~) mulf8s127::$9 +(label) mulf8s127::@1 +(label) mulf8s127::@2 +(label) mulf8s127::@3 +(label) mulf8s127::@4 +(label) mulf8s127::@5 +(label) mulf8s127::@6 +(label) mulf8s127::@8 +(label) mulf8s127::@return +(signed byte) mulf8s127::a +(signed byte) mulf8s127::a#0 +(signed byte) mulf8s127::a#1 +(signed byte) mulf8s127::a#2 +(signed byte) mulf8s127::a#3 +(signed byte) mulf8s127::a#4 +(signed byte) mulf8s127::a#5 +(signed byte) mulf8s127::a#6 +(signed byte) mulf8s127::b +(signed byte) mulf8s127::b#0 +(signed byte) mulf8s127::b#1 +(signed byte) mulf8s127::b#2 +(signed byte) mulf8s127::b#3 +(signed byte) mulf8s127::b#4 +(signed byte) mulf8s127::b#5 +(signed byte) mulf8s127::b#6 +(signed word) mulf8s127::c +(signed word) mulf8s127::c#0 +(signed word) mulf8s127::c#1 +(signed word) mulf8s127::c#2 +(signed word) mulf8s127::c#3 +(signed word) mulf8s127::c#4 +(signed word) mulf8s127::c#5 +(signed word) mulf8s127::c#6 +(signed word) mulf8s127::c#7 +(signed word) mulf8s127::c#8 +(signed word) mulf8s127::c#9 +(signed word) mulf8s127::return +(signed word) mulf8s127::return#0 +(signed word) mulf8s127::return#1 +(signed word) mulf8s127::return#2 +(signed word) mulf8s127::return#3 +(signed word) mulf8s127::return#4 +(word()) mulf8u127((byte) mulf8u127::a , (byte) mulf8u127::b) +(label) mulf8u127::@return +(byte) mulf8u127::a +(byte) mulf8u127::a#0 +(byte) mulf8u127::a#1 +(byte) mulf8u127::a#2 +(byte) mulf8u127::b +(byte) mulf8u127::b#0 +(byte) mulf8u127::b#1 +(byte) mulf8u127::b#2 +(byte*) mulf8u127::memA +(byte*) mulf8u127::memA#0 +(byte*) mulf8u127::memB +(byte*) mulf8u127::memB#0 +(word*) mulf8u127::res +(word*) mulf8u127::res#0 +(byte*) mulf8u127::resH +(byte*) mulf8u127::resH#0 +(byte*) mulf8u127::resL +(byte*) mulf8u127::resL#0 +(word) mulf8u127::return +(word) mulf8u127::return#0 +(word) mulf8u127::return#1 +(word) mulf8u127::return#2 +(word) mulf8u127::return#3 +(word) mulf8u127::return#4 +(word) mulf8u127::return#5 +(word) mulf8u127::return#6 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(number~) print_byte::$2 +(label) print_byte::@1 +(label) print_byte::@2 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 +(byte) print_byte::b#1 +(byte) print_byte::b#2 +(byte) print_byte::b#3 +(byte) print_byte::b#4 +(byte) print_byte::b#5 +(byte) print_byte::b#6 +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 +(byte) print_char::ch#1 +(byte) print_char::ch#10 +(byte) print_char::ch#2 +(byte) print_char::ch#3 +(byte) print_char::ch#4 +(byte) print_char::ch#5 +(byte) print_char::ch#6 +(byte) print_char::ch#7 +(byte) print_char::ch#8 +(byte) print_char::ch#9 +(byte*) print_char_cursor +(byte*) print_char_cursor#0 +(byte*) print_char_cursor#1 +(byte*) print_char_cursor#10 +(byte*) print_char_cursor#100 +(byte*) print_char_cursor#101 +(byte*) print_char_cursor#102 +(byte*) print_char_cursor#103 +(byte*) print_char_cursor#104 +(byte*) print_char_cursor#105 +(byte*) print_char_cursor#106 +(byte*) print_char_cursor#107 +(byte*) print_char_cursor#108 +(byte*) print_char_cursor#109 +(byte*) print_char_cursor#11 +(byte*) print_char_cursor#110 +(byte*) print_char_cursor#111 +(byte*) print_char_cursor#112 +(byte*) print_char_cursor#113 +(byte*) print_char_cursor#114 +(byte*) print_char_cursor#115 +(byte*) print_char_cursor#116 +(byte*) print_char_cursor#117 +(byte*) print_char_cursor#118 +(byte*) print_char_cursor#119 +(byte*) print_char_cursor#12 +(byte*) print_char_cursor#120 +(byte*) print_char_cursor#121 +(byte*) print_char_cursor#122 +(byte*) print_char_cursor#123 +(byte*) print_char_cursor#124 +(byte*) print_char_cursor#125 +(byte*) print_char_cursor#126 +(byte*) print_char_cursor#127 +(byte*) print_char_cursor#128 +(byte*) print_char_cursor#129 +(byte*) print_char_cursor#13 +(byte*) print_char_cursor#130 +(byte*) print_char_cursor#131 +(byte*) print_char_cursor#132 +(byte*) print_char_cursor#133 +(byte*) print_char_cursor#134 +(byte*) print_char_cursor#135 +(byte*) print_char_cursor#136 +(byte*) print_char_cursor#137 +(byte*) print_char_cursor#138 +(byte*) print_char_cursor#139 +(byte*) print_char_cursor#14 +(byte*) print_char_cursor#140 +(byte*) print_char_cursor#141 +(byte*) print_char_cursor#142 +(byte*) print_char_cursor#15 +(byte*) print_char_cursor#16 +(byte*) print_char_cursor#17 +(byte*) print_char_cursor#18 +(byte*) print_char_cursor#19 +(byte*) print_char_cursor#2 +(byte*) print_char_cursor#20 +(byte*) print_char_cursor#21 +(byte*) print_char_cursor#22 +(byte*) print_char_cursor#23 +(byte*) print_char_cursor#24 +(byte*) print_char_cursor#25 +(byte*) print_char_cursor#26 +(byte*) print_char_cursor#27 +(byte*) print_char_cursor#28 +(byte*) print_char_cursor#29 +(byte*) print_char_cursor#3 +(byte*) print_char_cursor#30 +(byte*) print_char_cursor#31 +(byte*) print_char_cursor#32 +(byte*) print_char_cursor#33 +(byte*) print_char_cursor#34 +(byte*) print_char_cursor#35 +(byte*) print_char_cursor#36 +(byte*) print_char_cursor#37 +(byte*) print_char_cursor#38 +(byte*) print_char_cursor#39 +(byte*) print_char_cursor#4 +(byte*) print_char_cursor#40 +(byte*) print_char_cursor#41 +(byte*) print_char_cursor#42 +(byte*) print_char_cursor#43 +(byte*) print_char_cursor#44 +(byte*) print_char_cursor#45 +(byte*) print_char_cursor#46 +(byte*) print_char_cursor#47 +(byte*) print_char_cursor#48 +(byte*) print_char_cursor#49 +(byte*) print_char_cursor#5 +(byte*) print_char_cursor#50 +(byte*) print_char_cursor#51 +(byte*) print_char_cursor#52 +(byte*) print_char_cursor#53 +(byte*) print_char_cursor#54 +(byte*) print_char_cursor#55 +(byte*) print_char_cursor#56 +(byte*) print_char_cursor#57 +(byte*) print_char_cursor#58 +(byte*) print_char_cursor#59 +(byte*) print_char_cursor#6 +(byte*) print_char_cursor#60 +(byte*) print_char_cursor#61 +(byte*) print_char_cursor#62 +(byte*) print_char_cursor#63 +(byte*) print_char_cursor#64 +(byte*) print_char_cursor#65 +(byte*) print_char_cursor#66 +(byte*) print_char_cursor#67 +(byte*) print_char_cursor#68 +(byte*) print_char_cursor#69 +(byte*) print_char_cursor#7 +(byte*) print_char_cursor#70 +(byte*) print_char_cursor#71 +(byte*) print_char_cursor#72 +(byte*) print_char_cursor#73 +(byte*) print_char_cursor#74 +(byte*) print_char_cursor#75 +(byte*) print_char_cursor#76 +(byte*) print_char_cursor#77 +(byte*) print_char_cursor#78 +(byte*) print_char_cursor#79 +(byte*) print_char_cursor#8 +(byte*) print_char_cursor#80 +(byte*) print_char_cursor#81 +(byte*) print_char_cursor#82 +(byte*) print_char_cursor#83 +(byte*) print_char_cursor#84 +(byte*) print_char_cursor#85 +(byte*) print_char_cursor#86 +(byte*) print_char_cursor#87 +(byte*) print_char_cursor#88 +(byte*) print_char_cursor#89 +(byte*) print_char_cursor#9 +(byte*) print_char_cursor#90 +(byte*) print_char_cursor#91 +(byte*) print_char_cursor#92 +(byte*) print_char_cursor#93 +(byte*) print_char_cursor#94 +(byte*) print_char_cursor#95 +(byte*) print_char_cursor#96 +(byte*) print_char_cursor#97 +(byte*) print_char_cursor#98 +(byte*) print_char_cursor#99 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte[]) print_hextab +(byte[]) print_hextab#0 +(byte*) print_line_cursor +(byte*) print_line_cursor#0 +(byte*) print_line_cursor#1 +(byte*) print_line_cursor#10 +(byte*) print_line_cursor#11 +(byte*) print_line_cursor#12 +(byte*) print_line_cursor#13 +(byte*) print_line_cursor#14 +(byte*) print_line_cursor#15 +(byte*) print_line_cursor#16 +(byte*) print_line_cursor#17 +(byte*) print_line_cursor#18 +(byte*) print_line_cursor#19 +(byte*) print_line_cursor#2 +(byte*) print_line_cursor#20 +(byte*) print_line_cursor#21 +(byte*) print_line_cursor#22 +(byte*) print_line_cursor#23 +(byte*) print_line_cursor#24 +(byte*) print_line_cursor#25 +(byte*) print_line_cursor#26 +(byte*) print_line_cursor#27 +(byte*) print_line_cursor#28 +(byte*) print_line_cursor#29 +(byte*) print_line_cursor#3 +(byte*) print_line_cursor#30 +(byte*) print_line_cursor#31 +(byte*) print_line_cursor#32 +(byte*) print_line_cursor#33 +(byte*) print_line_cursor#34 +(byte*) print_line_cursor#35 +(byte*) print_line_cursor#36 +(byte*) print_line_cursor#37 +(byte*) print_line_cursor#38 +(byte*) print_line_cursor#39 +(byte*) print_line_cursor#4 +(byte*) print_line_cursor#40 +(byte*) print_line_cursor#41 +(byte*) print_line_cursor#42 +(byte*) print_line_cursor#43 +(byte*) print_line_cursor#44 +(byte*) print_line_cursor#45 +(byte*) print_line_cursor#46 +(byte*) print_line_cursor#47 +(byte*) print_line_cursor#48 +(byte*) print_line_cursor#49 +(byte*) print_line_cursor#5 +(byte*) print_line_cursor#50 +(byte*) print_line_cursor#51 +(byte*) print_line_cursor#52 +(byte*) print_line_cursor#53 +(byte*) print_line_cursor#54 +(byte*) print_line_cursor#55 +(byte*) print_line_cursor#56 +(byte*) print_line_cursor#57 +(byte*) print_line_cursor#58 +(byte*) print_line_cursor#59 +(byte*) print_line_cursor#6 +(byte*) print_line_cursor#60 +(byte*) print_line_cursor#61 +(byte*) print_line_cursor#62 +(byte*) print_line_cursor#63 +(byte*) print_line_cursor#64 +(byte*) print_line_cursor#65 +(byte*) print_line_cursor#66 +(byte*) print_line_cursor#67 +(byte*) print_line_cursor#68 +(byte*) print_line_cursor#69 +(byte*) print_line_cursor#7 +(byte*) print_line_cursor#70 +(byte*) print_line_cursor#71 +(byte*) print_line_cursor#72 +(byte*) print_line_cursor#73 +(byte*) print_line_cursor#74 +(byte*) print_line_cursor#75 +(byte*) print_line_cursor#76 +(byte*) print_line_cursor#77 +(byte*) print_line_cursor#78 +(byte*) print_line_cursor#79 +(byte*) print_line_cursor#8 +(byte*) print_line_cursor#80 +(byte*) print_line_cursor#81 +(byte*) print_line_cursor#82 +(byte*) print_line_cursor#83 +(byte*) print_line_cursor#9 +(void()) print_ln() +(byte*~) print_ln::$0 +(bool~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@2 +(label) print_ln::@return +(void()) print_mulf8s127((signed byte) print_mulf8s127::a , (signed byte) print_mulf8s127::b) +(signed word~) print_mulf8s127::$0 +(label) print_mulf8s127::@1 +(label) print_mulf8s127::@2 +(label) print_mulf8s127::@3 +(label) print_mulf8s127::@4 +(label) print_mulf8s127::@5 +(label) print_mulf8s127::@6 +(label) print_mulf8s127::@7 +(label) print_mulf8s127::@return +(signed byte) print_mulf8s127::a +(signed byte) print_mulf8s127::a#0 +(signed byte) print_mulf8s127::a#1 +(signed byte) print_mulf8s127::a#10 +(signed byte) print_mulf8s127::a#11 +(signed byte) print_mulf8s127::a#2 +(signed byte) print_mulf8s127::a#3 +(signed byte) print_mulf8s127::a#4 +(signed byte) print_mulf8s127::a#5 +(signed byte) print_mulf8s127::a#6 +(signed byte) print_mulf8s127::a#7 +(signed byte) print_mulf8s127::a#8 +(signed byte) print_mulf8s127::a#9 +(signed byte) print_mulf8s127::b +(signed byte) print_mulf8s127::b#0 +(signed byte) print_mulf8s127::b#1 +(signed byte) print_mulf8s127::b#10 +(signed byte) print_mulf8s127::b#11 +(signed byte) print_mulf8s127::b#12 +(signed byte) print_mulf8s127::b#13 +(signed byte) print_mulf8s127::b#2 +(signed byte) print_mulf8s127::b#3 +(signed byte) print_mulf8s127::b#4 +(signed byte) print_mulf8s127::b#5 +(signed byte) print_mulf8s127::b#6 +(signed byte) print_mulf8s127::b#7 +(signed byte) print_mulf8s127::b#8 +(signed byte) print_mulf8s127::b#9 +(signed word) print_mulf8s127::c +(signed word) print_mulf8s127::c#0 +(signed word) print_mulf8s127::c#1 +(signed word) print_mulf8s127::c#2 +(signed word) print_mulf8s127::c#3 +(signed word) print_mulf8s127::c#4 +(void()) print_mulf8u127((byte) print_mulf8u127::a , (byte) print_mulf8u127::b) +(word~) print_mulf8u127::$0 +(label) print_mulf8u127::@1 +(label) print_mulf8u127::@2 +(label) print_mulf8u127::@3 +(label) print_mulf8u127::@4 +(label) print_mulf8u127::@5 +(label) print_mulf8u127::@6 +(label) print_mulf8u127::@7 +(label) print_mulf8u127::@return +(byte) print_mulf8u127::a +(byte) print_mulf8u127::a#0 +(byte) print_mulf8u127::a#1 +(byte) print_mulf8u127::a#2 +(byte) print_mulf8u127::a#3 +(byte) print_mulf8u127::a#4 +(byte) print_mulf8u127::a#5 +(byte) print_mulf8u127::a#6 +(byte) print_mulf8u127::a#7 +(byte) print_mulf8u127::a#8 +(byte) print_mulf8u127::a#9 +(byte) print_mulf8u127::b +(byte) print_mulf8u127::b#0 +(byte) print_mulf8u127::b#1 +(byte) print_mulf8u127::b#10 +(byte) print_mulf8u127::b#11 +(byte) print_mulf8u127::b#2 +(byte) print_mulf8u127::b#3 +(byte) print_mulf8u127::b#4 +(byte) print_mulf8u127::b#5 +(byte) print_mulf8u127::b#6 +(byte) print_mulf8u127::b#7 +(byte) print_mulf8u127::b#8 +(byte) print_mulf8u127::b#9 +(word) print_mulf8u127::c +(word) print_mulf8u127::c#0 +(word) print_mulf8u127::c#1 +(word) print_mulf8u127::c#2 +(word) print_mulf8u127::c#3 +(word) print_mulf8u127::c#4 +(void()) print_sbyte((signed byte) print_sbyte::b) +(bool~) print_sbyte::$0 +(byte~) print_sbyte::$1 +(signed byte~) print_sbyte::$5 +(label) print_sbyte::@1 +(label) print_sbyte::@2 +(label) print_sbyte::@3 +(label) print_sbyte::@5 +(label) print_sbyte::@6 +(label) print_sbyte::@7 +(label) print_sbyte::@return +(signed byte) print_sbyte::b +(signed byte) print_sbyte::b#0 +(signed byte) print_sbyte::b#1 +(signed byte) print_sbyte::b#2 +(signed byte) print_sbyte::b#3 +(signed byte) print_sbyte::b#4 +(signed byte) print_sbyte::b#5 +(signed byte) print_sbyte::b#6 +(signed byte) print_sbyte::b#7 +(signed byte) print_sbyte::b#8 +(byte*) print_screen +(byte*) print_screen#0 +(byte*) print_screen#1 +(byte*) print_screen#2 +(byte*) print_screen#3 +(byte*) print_screen#4 +(byte*) print_screen#5 +(byte*) print_screen#6 +(void()) print_str((byte*) print_str::str) +(bool~) print_str::$0 +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 +(byte*) print_str::str#1 +(byte*) print_str::str#2 +(byte*) print_str::str#3 +(byte*) print_str::str#4 +(byte*) print_str::str#5 +(void()) print_sword((signed word) print_sword::w) +(bool~) print_sword::$0 +(word~) print_sword::$1 +(signed word~) print_sword::$5 +(label) print_sword::@1 +(label) print_sword::@2 +(label) print_sword::@3 +(label) print_sword::@5 +(label) print_sword::@6 +(label) print_sword::@7 +(label) print_sword::@return +(signed word) print_sword::w +(signed word) print_sword::w#0 +(signed word) print_sword::w#1 +(signed word) print_sword::w#2 +(signed word) print_sword::w#3 +(signed word) print_sword::w#4 +(signed word) print_sword::w#5 +(signed word) print_sword::w#6 +(signed word) print_sword::w#7 +(void()) print_word((word) print_word::w) +(byte~) print_word::$0 +(byte~) print_word::$2 +(label) print_word::@1 +(label) print_word::@2 +(label) print_word::@return +(word) print_word::w +(word) print_word::w#0 +(word) print_word::w#1 +(word) print_word::w#2 +(word) print_word::w#3 + +Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 +Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#32 + (number) $28 +Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (number) 0 +Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (number) 4 +Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#6 & (number) $f +Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#6 & (unumber)(number) $f +Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 +Adding number conversion cast (unumber) 0 in (byte) print_mulf8u127::a#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) print_mulf8u127::b#0 ← (number) 0 +Adding number conversion cast (unumber) $7f in (byte) print_mulf8u127::a#1 ← (number) $7f +Adding number conversion cast (unumber) $7f in (byte) print_mulf8u127::b#1 ← (number) $7f +Adding number conversion cast (unumber) $40 in (byte) print_mulf8u127::a#2 ← (number) $40 +Adding number conversion cast (unumber) $40 in (byte) print_mulf8u127::b#2 ← (number) $40 +Adding number conversion cast (unumber) $40 in (byte) print_mulf8u127::a#3 ← (number) $40 +Adding number conversion cast (unumber) $7f in (byte) print_mulf8u127::b#3 ← (number) $7f +Adding number conversion cast (unumber) $40 in (byte) print_mulf8u127::a#4 ← (number) $40 +Adding number conversion cast (unumber) $c0 in (byte) print_mulf8u127::b#4 ← (number) $c0 +Adding number conversion cast (unumber) $ff in (byte) print_mulf8u127::a#5 ← (number) $ff +Adding number conversion cast (unumber) $7f in (byte) print_mulf8u127::b#5 ← (number) $7f +Adding number conversion cast (unumber) $c0 in (byte) print_mulf8u127::a#6 ← (number) $c0 +Adding number conversion cast (unumber) $c0 in (byte) print_mulf8u127::b#6 ← (number) $c0 +Adding number conversion cast (unumber) $ff in (byte) print_mulf8u127::a#7 ← (number) $ff +Adding number conversion cast (unumber) $ff in (byte) print_mulf8u127::b#7 ← (number) $ff +Adding number conversion cast (snumber) 0 in (signed byte) print_mulf8s127::a#0 ← (number) 0 +Adding number conversion cast (snumber) 0 in (signed byte) print_mulf8s127::b#0 ← (number) 0 +Adding number conversion cast (snumber) $40 in (signed byte) print_mulf8s127::a#1 ← (number) $40 +Adding number conversion cast (snumber) $40 in (signed byte) print_mulf8s127::b#1 ← (number) $40 +Adding number conversion cast (snumber) $40 in (signed byte) print_mulf8s127::a#2 ← (number) $40 +Adding number conversion cast (snumber) $7f in (signed byte) print_mulf8s127::b#2 ← (number) $7f +Adding number conversion cast (snumber) -$40 in (signed byte) print_mulf8s127::a#3 ← (number) -$40 +Adding number conversion cast (snumber) $40 in (signed byte) print_mulf8s127::b#3 ← (number) $40 +Adding number conversion cast (snumber) $40 in (signed byte) print_mulf8s127::a#4 ← (number) $40 +Adding number conversion cast (snumber) -$40 in (signed byte) print_mulf8s127::b#4 ← (number) -$40 +Adding number conversion cast (snumber) -$40 in (signed byte) print_mulf8s127::a#5 ← (number) -$40 +Adding number conversion cast (snumber) -$40 in (signed byte) print_mulf8s127::b#5 ← (number) -$40 +Adding number conversion cast (snumber) $7f in (signed byte) print_mulf8s127::a#6 ← (number) $7f +Adding number conversion cast (snumber) $7f in (signed byte) print_mulf8s127::b#6 ← (number) $7f +Adding number conversion cast (snumber) -$7f in (signed byte) print_mulf8s127::a#7 ← (number) -$7f +Adding number conversion cast (snumber) $7f in (signed byte) print_mulf8s127::b#7 ← (number) $7f +Adding number conversion cast (snumber) $7f in (signed byte) print_mulf8s127::a#8 ← (number) $7f +Adding number conversion cast (snumber) -$7f in (signed byte) print_mulf8s127::b#8 ← (number) -$7f +Adding number conversion cast (snumber) -$7f in (signed byte) print_mulf8s127::a#9 ← (number) -$7f +Adding number conversion cast (snumber) -$7f in (signed byte) print_mulf8s127::b#9 ← (number) -$7f +Adding number conversion cast (snumber) 0 in (bool~) mulf8s127::$4 ← (signed byte) mulf8s127::a#2 < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) mulf8s127::$6 ← (signed byte) mulf8s127::b#2 < (number) 0 +Adding number conversion cast (snumber) 2 in (number~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 * (number) 2 +Adding number conversion cast (snumber) mulf8s127::$13 in (number~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 * (snumber)(number) 2 +Adding number conversion cast (snumber) 0 in (bool~) mulf8s127::$8 ← (signed byte) mulf8s127::a#3 < (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) mulf8s127::$9 ← (signed byte) mulf8s127::b#4 < (number) 0 +Adding number conversion cast (snumber) 2 in (number~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 * (number) 2 +Adding number conversion cast (snumber) mulf8s127::$15 in (number~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 * (snumber)(number) 2 +Adding number conversion cast (snumber) $200 in (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (number) $200 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 +Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 +Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 +Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#4 +Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#5 +Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 +Inlining cast (byte) print_mulf8u127::a#0 ← (unumber)(number) 0 +Inlining cast (byte) print_mulf8u127::b#0 ← (unumber)(number) 0 +Inlining cast (byte) print_mulf8u127::a#1 ← (unumber)(number) $7f +Inlining cast (byte) print_mulf8u127::b#1 ← (unumber)(number) $7f +Inlining cast (byte) print_mulf8u127::a#2 ← (unumber)(number) $40 +Inlining cast (byte) print_mulf8u127::b#2 ← (unumber)(number) $40 +Inlining cast (byte) print_mulf8u127::a#3 ← (unumber)(number) $40 +Inlining cast (byte) print_mulf8u127::b#3 ← (unumber)(number) $7f +Inlining cast (byte) print_mulf8u127::a#4 ← (unumber)(number) $40 +Inlining cast (byte) print_mulf8u127::b#4 ← (unumber)(number) $c0 +Inlining cast (byte) print_mulf8u127::a#5 ← (unumber)(number) $ff +Inlining cast (byte) print_mulf8u127::b#5 ← (unumber)(number) $7f +Inlining cast (byte) print_mulf8u127::a#6 ← (unumber)(number) $c0 +Inlining cast (byte) print_mulf8u127::b#6 ← (unumber)(number) $c0 +Inlining cast (byte) print_mulf8u127::a#7 ← (unumber)(number) $ff +Inlining cast (byte) print_mulf8u127::b#7 ← (unumber)(number) $ff +Inlining cast (signed byte) print_mulf8s127::a#0 ← (snumber)(number) 0 +Inlining cast (signed byte) print_mulf8s127::b#0 ← (snumber)(number) 0 +Inlining cast (signed byte) print_mulf8s127::a#1 ← (snumber)(number) $40 +Inlining cast (signed byte) print_mulf8s127::b#1 ← (snumber)(number) $40 +Inlining cast (signed byte) print_mulf8s127::a#2 ← (snumber)(number) $40 +Inlining cast (signed byte) print_mulf8s127::b#2 ← (snumber)(number) $7f +Inlining cast (signed byte) print_mulf8s127::a#3 ← (snumber)(number) -$40 +Inlining cast (signed byte) print_mulf8s127::b#3 ← (snumber)(number) $40 +Inlining cast (signed byte) print_mulf8s127::a#4 ← (snumber)(number) $40 +Inlining cast (signed byte) print_mulf8s127::b#4 ← (snumber)(number) -$40 +Inlining cast (signed byte) print_mulf8s127::a#5 ← (snumber)(number) -$40 +Inlining cast (signed byte) print_mulf8s127::b#5 ← (snumber)(number) -$40 +Inlining cast (signed byte) print_mulf8s127::a#6 ← (snumber)(number) $7f +Inlining cast (signed byte) print_mulf8s127::b#6 ← (snumber)(number) $7f +Inlining cast (signed byte) print_mulf8s127::a#7 ← (snumber)(number) -$7f +Inlining cast (signed byte) print_mulf8s127::b#7 ← (snumber)(number) $7f +Inlining cast (signed byte) print_mulf8s127::a#8 ← (snumber)(number) $7f +Inlining cast (signed byte) print_mulf8s127::b#8 ← (snumber)(number) -$7f +Inlining cast (signed byte) print_mulf8s127::a#9 ← (snumber)(number) -$7f +Inlining cast (signed byte) print_mulf8s127::b#9 ← (snumber)(number) -$7f +Inlining cast (byte*) mulf8u127::memA#0 ← (byte*)(number) $fc +Inlining cast (byte*) mulf8u127::memB#0 ← (byte*)(number) $fd +Inlining cast (word*) mulf8u127::res#0 ← (word*)(number) $fe +Inlining cast (byte*) mulf8u127::resL#0 ← (byte*)(number) $fe +Inlining cast (byte*) mulf8u127::resH#0 ← (byte*)(number) $ff +Inlining cast (byte~) mulf8s127::$0 ← (byte)(signed byte) mulf8s127::a#1 +Inlining cast (byte~) mulf8s127::$1 ← (byte)(signed byte) mulf8s127::b#1 +Inlining cast (signed word~) mulf8s127::$3 ← (signed word)(word~) mulf8s127::$2 +Inlining cast (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#3 +Inlining cast (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#4 +Successful SSA optimization Pass2InlineCast +Simplifying constant integer cast 0 +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 4 +Simplifying constant integer cast $f +Simplifying constant integer cast $3e8 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $7f +Simplifying constant integer cast $7f +Simplifying constant integer cast $40 +Simplifying constant integer cast $40 +Simplifying constant integer cast $40 +Simplifying constant integer cast $7f +Simplifying constant integer cast $40 +Simplifying constant integer cast $c0 +Simplifying constant integer cast $ff +Simplifying constant integer cast $7f +Simplifying constant integer cast $c0 +Simplifying constant integer cast $c0 +Simplifying constant integer cast $ff +Simplifying constant integer cast $ff +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $40 +Simplifying constant integer cast $40 +Simplifying constant integer cast $40 +Simplifying constant integer cast $7f +Simplifying constant integer cast -$40 +Simplifying constant integer cast $40 +Simplifying constant integer cast $40 +Simplifying constant integer cast -$40 +Simplifying constant integer cast -$40 +Simplifying constant integer cast -$40 +Simplifying constant integer cast $7f +Simplifying constant integer cast $7f +Simplifying constant integer cast -$7f +Simplifying constant integer cast $7f +Simplifying constant integer cast $7f +Simplifying constant integer cast -$7f +Simplifying constant integer cast -$7f +Simplifying constant integer cast -$7f +Simplifying constant pointer cast (byte*) 252 +Simplifying constant pointer cast (byte*) 253 +Simplifying constant pointer cast (word*) 254 +Simplifying constant pointer cast (byte*) 254 +Simplifying constant pointer cast (byte*) 255 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast $200 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $28 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (word) $3e8 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $7f +Finalized unsigned number type (byte) $7f +Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) $7f +Finalized unsigned number type (byte) $40 +Finalized unsigned number type (byte) $c0 +Finalized unsigned number type (byte) $ff +Finalized unsigned number type (byte) $7f +Finalized unsigned number type (byte) $c0 +Finalized unsigned number type (byte) $c0 +Finalized unsigned number type (byte) $ff +Finalized unsigned number type (byte) $ff +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) $40 +Finalized signed number type (signed byte) $40 +Finalized signed number type (signed byte) $40 +Finalized signed number type (signed byte) $7f +Finalized signed number type (signed byte) -$40 +Finalized signed number type (signed byte) $40 +Finalized signed number type (signed byte) $40 +Finalized signed number type (signed byte) -$40 +Finalized signed number type (signed byte) -$40 +Finalized signed number type (signed byte) -$40 +Finalized signed number type (signed byte) $7f +Finalized signed number type (signed byte) $7f +Finalized signed number type (signed byte) -$7f +Finalized signed number type (signed byte) $7f +Finalized signed number type (signed byte) $7f +Finalized signed number type (signed byte) -$7f +Finalized signed number type (signed byte) -$7f +Finalized signed number type (signed byte) -$7f +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 2 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 2 +Finalized signed number type (signed word) $200 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#6 & (byte) $f +Inferred type updated to signed word in (snumber~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 * (signed byte) 2 +Inferred type updated to signed word in (snumber~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 * (signed byte) 2 +Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 +Inversing boolean not [377] (bool~) mulf8s127::$5 ← (signed byte) mulf8s127::a#2 >= (signed byte) 0 from [376] (bool~) mulf8s127::$4 ← (signed byte) mulf8s127::a#2 < (signed byte) 0 +Inversing boolean not [381] (bool~) mulf8s127::$7 ← (signed byte) mulf8s127::b#2 >= (signed byte) 0 from [380] (bool~) mulf8s127::$6 ← (signed byte) mulf8s127::b#2 < (signed byte) 0 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (void*) memset::return#0 = (void*) memset::str#1 (void*) memset::return#3 (void*) memset::return#1 +Alias (void*) memset::str#2 = (void*) memset::str#3 +Alias (word) memset::num#1 = (word) memset::num#2 +Alias (byte) memset::c#2 = (byte) memset::c#3 +Alias (byte*) memset::end#0 = (byte*~) memset::$3 +Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#75 (byte*) print_char_cursor#142 (byte*) print_screen#6 (byte*) print_line_cursor#72 (byte*) print_char_cursor#141 (byte*) print_screen#5 (byte*) print_line_cursor#69 (byte*) print_char_cursor#135 (byte*) print_screen#4 +Alias (byte*) print_str::str#3 = (byte*) print_str::str#4 +Alias (byte*) print_char_cursor#122 = (byte*) print_char_cursor#62 (byte*) print_char_cursor#63 (byte*) print_char_cursor#2 +Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#33 (byte*) print_char_cursor#3 (byte*) print_line_cursor#34 (byte*) print_char_cursor#65 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4 +Alias (byte*) print_char_cursor#124 = (byte*) print_char_cursor#137 (byte*) print_char_cursor#125 +Alias (signed word) print_sword::w#2 = (signed word) print_sword::w#5 (signed word) print_sword::w#3 (signed word) print_sword::w#7 (signed word) print_sword::w#6 +Alias (byte*) print_char_cursor#5 = (byte*) print_char_cursor#66 +Alias (signed word) print_sword::w#0 = (signed word~) print_sword::$5 +Alias (byte*) print_char_cursor#6 = (byte*) print_char_cursor#67 +Alias (word) print_word::w#0 = (word~) print_sword::$1 +Alias (byte*) print_char_cursor#68 = (byte*) print_char_cursor#7 (byte*) print_char_cursor#69 (byte*) print_char_cursor#8 +Alias (byte*) print_char_cursor#127 = (byte*) print_char_cursor#138 (byte*) print_char_cursor#128 +Alias (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#6 (signed byte) print_sbyte::b#4 (signed byte) print_sbyte::b#8 (signed byte) print_sbyte::b#7 +Alias (byte*) print_char_cursor#70 = (byte*) print_char_cursor#9 +Alias (signed byte) print_sbyte::b#0 = (signed byte~) print_sbyte::$5 +Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#71 +Alias (byte) print_byte::b#0 = (byte~) print_sbyte::$1 +Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#72 (byte*) print_char_cursor#73 (byte*) print_char_cursor#12 +Alias (byte) print_byte::b#1 = (byte~) print_word::$0 +Alias (word) print_word::w#2 = (word) print_word::w#3 +Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#74 +Alias (byte) print_byte::b#2 = (byte~) print_word::$2 +Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#75 (byte*) print_char_cursor#76 (byte*) print_char_cursor#15 +Alias (byte) print_byte::b#5 = (byte) print_byte::b#6 +Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#77 +Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#78 (byte*) print_char_cursor#79 (byte*) print_char_cursor#18 +Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#81 (byte*) print_char_cursor#20 +Alias (byte*) print_line_cursor#3 = (byte*) print_screen#2 (byte*) print_screen#1 (byte*) print_char_cursor#21 (byte*) print_line_cursor#35 (byte*) print_char_cursor#82 (byte*) print_line_cursor#4 (byte*) print_char_cursor#22 +Alias (byte*) print_line_cursor#36 = (byte*) print_line_cursor#5 (byte*) print_line_cursor#65 +Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#83 +Alias (byte*) print_char_cursor#24 = (byte*) print_char_cursor#84 +Alias (byte*) print_line_cursor#37 = (byte*) print_line_cursor#6 +Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#85 +Alias (byte*) print_char_cursor#26 = (byte*) print_char_cursor#86 +Alias (byte*) print_line_cursor#38 = (byte*) print_line_cursor#7 +Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#87 +Alias (byte*) print_line_cursor#39 = (byte*) print_line_cursor#8 +Alias (byte*) print_char_cursor#28 = (byte*) print_char_cursor#88 +Alias (byte*) print_line_cursor#40 = (byte*) print_line_cursor#9 +Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#89 +Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#41 +Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#90 +Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#42 +Alias (byte*) print_char_cursor#31 = (byte*) print_char_cursor#91 +Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#43 +Alias (byte*) print_char_cursor#32 = (byte*) print_char_cursor#92 +Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#44 +Alias (byte*) print_char_cursor#33 = (byte*) print_char_cursor#93 +Alias (byte*) print_line_cursor#14 = (byte*) print_line_cursor#45 (byte*) print_line_cursor#66 +Alias (byte*) print_char_cursor#34 = (byte*) print_char_cursor#94 +Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#46 +Alias (byte*) print_char_cursor#35 = (byte*) print_char_cursor#95 +Alias (byte*) print_char_cursor#36 = (byte*) print_char_cursor#96 +Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#47 +Alias (byte*) print_char_cursor#37 = (byte*) print_char_cursor#97 +Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#48 +Alias (byte*) print_char_cursor#38 = (byte*) print_char_cursor#98 +Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#49 +Alias (byte*) print_char_cursor#39 = (byte*) print_char_cursor#99 +Alias (byte*) print_line_cursor#19 = (byte*) print_line_cursor#50 +Alias (byte*) print_char_cursor#100 = (byte*) print_char_cursor#40 +Alias (byte*) print_line_cursor#20 = (byte*) print_line_cursor#51 +Alias (byte*) print_char_cursor#101 = (byte*) print_char_cursor#41 +Alias (byte*) print_line_cursor#21 = (byte*) print_line_cursor#52 +Alias (byte*) print_char_cursor#102 = (byte*) print_char_cursor#42 +Alias (byte*) print_line_cursor#22 = (byte*) print_line_cursor#53 +Alias (byte*) print_char_cursor#103 = (byte*) print_char_cursor#43 +Alias (byte*) print_line_cursor#23 = (byte*) print_line_cursor#54 +Alias (byte*) print_char_cursor#104 = (byte*) print_char_cursor#44 +Alias (byte*) print_line_cursor#24 = (byte*) print_line_cursor#55 +Alias (byte*) print_char_cursor#105 = (byte*) print_char_cursor#45 (byte*) print_char_cursor#106 (byte*) print_char_cursor#46 +Alias (byte*) print_line_cursor#25 = (byte*) print_line_cursor#56 (byte*) print_line_cursor#57 (byte*) print_line_cursor#26 +Alias (word) mulf8u127::return#0 = (word) mulf8u127::return#4 +Alias (byte) print_mulf8u127::a#8 = (byte) print_mulf8u127::a#9 +Alias (byte*) print_char_cursor#133 = (byte*) print_char_cursor#139 +Alias (byte) print_mulf8u127::b#10 = (byte) print_mulf8u127::b#11 (byte) print_mulf8u127::b#8 (byte) print_mulf8u127::b#9 +Alias (byte*) print_line_cursor#67 = (byte*) print_line_cursor#80 (byte*) print_line_cursor#82 (byte*) print_line_cursor#78 (byte*) print_line_cursor#76 (byte*) print_line_cursor#73 (byte*) print_line_cursor#70 +Alias (word) print_mulf8u127::c#0 = (word~) print_mulf8u127::$0 (word) print_mulf8u127::c#4 (word) print_mulf8u127::c#3 (word) print_mulf8u127::c#2 (word) print_mulf8u127::c#1 +Alias (byte*) print_char_cursor#107 = (byte*) print_char_cursor#47 +Alias (byte*) print_char_cursor#108 = (byte*) print_char_cursor#48 +Alias (byte*) print_char_cursor#109 = (byte*) print_char_cursor#49 +Alias (byte*) print_char_cursor#110 = (byte*) print_char_cursor#50 +Alias (byte*) print_char_cursor#111 = (byte*) print_char_cursor#51 +Alias (byte*) print_line_cursor#27 = (byte*) print_line_cursor#58 (byte*) print_line_cursor#59 (byte*) print_line_cursor#28 +Alias (byte*) print_char_cursor#112 = (byte*) print_char_cursor#52 (byte*) print_char_cursor#113 (byte*) print_char_cursor#53 +Alias (signed word) mulf8s127::return#0 = (signed word) mulf8s127::return#3 +Alias (signed byte) print_mulf8s127::a#10 = (signed byte) print_mulf8s127::a#11 +Alias (byte*) print_char_cursor#134 = (byte*) print_char_cursor#140 +Alias (signed byte) print_mulf8s127::b#10 = (signed byte) print_mulf8s127::b#13 (signed byte) print_mulf8s127::b#12 (signed byte) print_mulf8s127::b#11 +Alias (byte*) print_line_cursor#68 = (byte*) print_line_cursor#81 (byte*) print_line_cursor#83 (byte*) print_line_cursor#79 (byte*) print_line_cursor#77 (byte*) print_line_cursor#74 (byte*) print_line_cursor#71 +Alias (signed word) print_mulf8s127::c#0 = (signed word~) print_mulf8s127::$0 (signed word) print_mulf8s127::c#4 (signed word) print_mulf8s127::c#3 (signed word) print_mulf8s127::c#2 (signed word) print_mulf8s127::c#1 +Alias (byte*) print_char_cursor#114 = (byte*) print_char_cursor#54 +Alias (byte*) print_char_cursor#115 = (byte*) print_char_cursor#55 +Alias (byte*) print_char_cursor#116 = (byte*) print_char_cursor#56 +Alias (byte*) print_char_cursor#117 = (byte*) print_char_cursor#57 +Alias (byte*) print_char_cursor#118 = (byte*) print_char_cursor#58 +Alias (byte*) print_line_cursor#29 = (byte*) print_line_cursor#60 (byte*) print_line_cursor#61 (byte*) print_line_cursor#30 +Alias (byte*) print_char_cursor#119 = (byte*) print_char_cursor#59 (byte*) print_char_cursor#120 (byte*) print_char_cursor#60 +Alias (word) mulf8u127::return#1 = (word) mulf8u127::return#5 (word) mulf8u127::return#2 +Alias (byte) mulf8u127::a#1 = (byte~) mulf8s127::$0 +Alias (byte) mulf8u127::b#1 = (byte~) mulf8s127::$1 +Alias (word) mulf8u127::return#3 = (word) mulf8u127::return#6 +Alias (signed byte) mulf8s127::a#1 = (signed byte) mulf8s127::a#2 (signed byte) mulf8s127::a#6 +Alias (signed byte) mulf8s127::b#1 = (signed byte) mulf8s127::b#5 (signed byte) mulf8s127::b#3 +Alias (signed word) mulf8s127::c#0 = (signed word~) mulf8s127::$3 (signed word) mulf8s127::c#4 +Alias (signed byte) mulf8s127::a#4 = (signed byte) mulf8s127::a#5 +Alias (signed word) mulf8s127::c#5 = (signed word) mulf8s127::c#8 +Alias (signed byte) mulf8s127::b#2 = (signed byte) mulf8s127::b#6 +Alias (signed word) mulf8s127::return#1 = (signed word) mulf8s127::c#6 (signed word) mulf8s127::return#4 (signed word) mulf8s127::return#2 +Alias (signed word) mulf8s127::c#7 = (signed word) mulf8s127::c#9 +Alias (byte*) print_line_cursor#31 = (byte*) print_line_cursor#62 +Alias (byte*) print_char_cursor#121 = (byte*) print_char_cursor#61 +Successful SSA optimization Pass2AliasElimination +Alias (signed byte) mulf8s127::b#1 = (signed byte) mulf8s127::b#2 (signed byte) mulf8s127::b#4 +Alias (signed byte) mulf8s127::a#1 = (signed byte) mulf8s127::a#4 (signed byte) mulf8s127::a#3 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (word) memset::num#1 (word) memset::num#0 +Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 +Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 +Identical Phi Values (byte) memset::c#1 (byte) memset::c#2 +Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 +Identical Phi Values (void*) memset::str#4 (void*) memset::str#2 +Identical Phi Values (byte*) print_char_cursor#64 (byte*) print_char_cursor#123 +Identical Phi Values (signed word) print_sword::w#2 (signed word) print_sword::w#1 +Identical Phi Values (byte*) print_char_cursor#124 (byte*) print_char_cursor#117 +Identical Phi Values (byte*) print_char_cursor#5 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#6 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#68 (byte*) print_char_cursor#14 +Identical Phi Values (byte*) print_char_cursor#70 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#17 +Identical Phi Values (byte*) print_char_cursor#13 (byte*) print_char_cursor#17 +Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_char_cursor#17 +Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#17 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_line_cursor#3 (byte*) print_screen#3 +Identical Phi Values (byte*) print_screen#3 (byte*) print_line_cursor#0 +Identical Phi Values (byte*) print_line_cursor#64 (byte*) print_line_cursor#0 +Identical Phi Values (byte*) print_char_cursor#132 (byte*) print_line_cursor#0 +Identical Phi Values (byte*) print_line_cursor#36 (byte*) print_line_cursor#3 +Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_line_cursor#3 +Identical Phi Values (byte*) print_char_cursor#24 (byte*) print_char_cursor#122 +Identical Phi Values (byte*) print_line_cursor#37 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#25 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#26 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#38 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#27 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#39 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#28 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#40 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#29 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#10 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#30 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#31 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#32 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#13 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#33 (byte*) print_char_cursor#112 +Identical Phi Values (byte*) print_line_cursor#14 (byte*) print_line_cursor#27 +Identical Phi Values (byte*) print_char_cursor#34 (byte*) print_char_cursor#122 +Identical Phi Values (byte*) print_line_cursor#15 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#35 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#36 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#37 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#17 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#38 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#18 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#39 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#19 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#100 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#20 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#101 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#21 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#102 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#22 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#103 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#23 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#104 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#24 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#105 (byte*) print_char_cursor#119 +Identical Phi Values (byte*) print_line_cursor#25 (byte*) print_line_cursor#29 +Identical Phi Values (byte*) print_char_cursor#107 (byte*) print_char_cursor#17 +Identical Phi Values (byte*) print_char_cursor#108 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#109 (byte*) print_char_cursor#17 +Identical Phi Values (byte*) print_char_cursor#110 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#111 (byte*) print_char_cursor#14 +Identical Phi Values (byte*) print_line_cursor#27 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#112 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#114 (byte*) print_char_cursor#11 +Identical Phi Values (byte*) print_char_cursor#115 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#116 (byte*) print_char_cursor#11 +Identical Phi Values (byte*) print_char_cursor#117 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#118 (byte*) print_char_cursor#68 +Identical Phi Values (byte*) print_line_cursor#29 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#119 (byte*) print_line_cursor#1 +Identical Phi Values (signed byte) mulf8s127::a#1 (signed byte) mulf8s127::a#0 +Identical Phi Values (signed byte) mulf8s127::b#1 (signed byte) mulf8s127::b#0 +Identical Phi Values (byte*) print_line_cursor#31 (byte*) print_line_cursor#25 +Identical Phi Values (byte*) print_char_cursor#121 (byte*) print_char_cursor#105 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 +Identical Phi Values (byte*) print_char_cursor#126 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#129 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#133 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_line_cursor#67 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#134 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_line_cursor#68 (byte*) print_line_cursor#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) print_char_cursor#130 (byte*) print_char_cursor#19 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 +Simple Condition (bool~) memset::$4 [15] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4 +Simple Condition (bool~) print_str::$0 [25] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_ln::$1 [38] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 +Simple Condition (bool~) print_sword::$0 [47] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 +Simple Condition (bool~) print_sbyte::$0 [71] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 +Simple Condition (bool~) mulf8s127::$5 [378] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@1 +Simple Condition (bool~) mulf8s127::$7 [382] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Rewriting ! if()-condition to reversed if() [391] (bool~) mulf8s127::$11 ← ! (bool~) mulf8s127::$10 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Rewriting && if()-condition to two if()s [390] (bool~) mulf8s127::$10 ← (bool~) mulf8s127::$8 && (bool~) mulf8s127::$9 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Constant (const byte*) print_line_cursor#0 = (byte*) 1024 +Constant (const byte) print_char::ch#0 = '-' +Constant (const byte) print_char::ch#1 = ' ' +Constant (const byte) print_char::ch#2 = '-' +Constant (const byte) print_char::ch#3 = ' ' +Constant (const byte[]) print_hextab#0 = $0 +Constant (const byte) memset::c#0 = ' ' +Constant (const word) memset::num#0 = $3e8 +Constant (const byte*) print_str::str#1 = main::str +Constant (const byte) print_mulf8u127::a#0 = 0 +Constant (const byte) print_mulf8u127::b#0 = 0 +Constant (const byte) print_mulf8u127::a#1 = $7f +Constant (const byte) print_mulf8u127::b#1 = $7f +Constant (const byte) print_mulf8u127::a#2 = $40 +Constant (const byte) print_mulf8u127::b#2 = $40 +Constant (const byte) print_mulf8u127::a#3 = $40 +Constant (const byte) print_mulf8u127::b#3 = $7f +Constant (const byte) print_mulf8u127::a#4 = $40 +Constant (const byte) print_mulf8u127::b#4 = $c0 +Constant (const byte) print_mulf8u127::a#5 = $ff +Constant (const byte) print_mulf8u127::b#5 = $7f +Constant (const byte) print_mulf8u127::a#6 = $c0 +Constant (const byte) print_mulf8u127::b#6 = $c0 +Constant (const byte) print_mulf8u127::a#7 = $ff +Constant (const byte) print_mulf8u127::b#7 = $ff +Constant (const byte*) print_str::str#2 = main::str1 +Constant (const signed byte) print_mulf8s127::a#0 = 0 +Constant (const signed byte) print_mulf8s127::b#0 = 0 +Constant (const signed byte) print_mulf8s127::a#1 = $40 +Constant (const signed byte) print_mulf8s127::b#1 = $40 +Constant (const signed byte) print_mulf8s127::a#2 = $40 +Constant (const signed byte) print_mulf8s127::b#2 = $7f +Constant (const signed byte) print_mulf8s127::a#3 = -$40 +Constant (const signed byte) print_mulf8s127::b#3 = $40 +Constant (const signed byte) print_mulf8s127::a#4 = $40 +Constant (const signed byte) print_mulf8s127::b#4 = -$40 +Constant (const signed byte) print_mulf8s127::a#5 = -$40 +Constant (const signed byte) print_mulf8s127::b#5 = -$40 +Constant (const signed byte) print_mulf8s127::a#6 = $7f +Constant (const signed byte) print_mulf8s127::b#6 = $7f +Constant (const signed byte) print_mulf8s127::a#7 = -$7f +Constant (const signed byte) print_mulf8s127::b#7 = $7f +Constant (const signed byte) print_mulf8s127::a#8 = $7f +Constant (const signed byte) print_mulf8s127::b#8 = -$7f +Constant (const signed byte) print_mulf8s127::a#9 = -$7f +Constant (const signed byte) print_mulf8s127::b#9 = -$7f +Constant (const byte) print_char::ch#6 = '*' +Constant (const byte) print_char::ch#7 = '=' +Constant (const byte) print_char::ch#8 = '*' +Constant (const byte) print_char::ch#9 = '=' +Constant (const byte[$200]) mulf127_sqr1_lo#0 = kickasm {{ .fill 512, round((i/127*i/127)*127/4) }} +Constant (const byte[$200]) mulf127_sqr2_lo#0 = kickasm {{ .fill 512, round(((i-255)/127*(i-255)/127)*127/4) }} +Constant (const byte*) mulf8u127::memA#0 = (byte*) 252 +Constant (const byte*) mulf8u127::memB#0 = (byte*) 253 +Constant (const word*) mulf8u127::res#0 = (word*) 254 +Constant (const byte*) mulf8u127::resL#0 = (byte*) 254 +Constant (const byte*) mulf8u127::resH#0 = (byte*) 255 +Successful SSA optimization Pass2ConstantIdentification +Constant value identified (void*)print_line_cursor#0 in [130] (void*) memset::str#0 ← (void*)(const byte*) print_line_cursor#0 +Successful SSA optimization Pass2ConstantValues +if() condition always false - eliminating [3] if((const word) memset::num#0<=(byte) 0) goto memset::@1 +Successful SSA optimization Pass2ConstantIfs +Eliminating unused variable (void*) memset::return#2 and assignment [57] (void*) memset::return#2 ← (void*) memset::str#0 +Successful SSA optimization PassNEliminateUnusedVars +Simple Condition (bool~) mulf8s127::$8 [135] if((signed byte) mulf8s127::a#0<(signed byte) 0) goto mulf8s127::@9 +Simple Condition (bool~) mulf8s127::$9 [143] if((signed byte) mulf8s127::b#0<(signed byte) 0) goto mulf8s127::@6 +Successful SSA optimization Pass2ConditionalJumpSimplification +Negating conditional jump and destination [135] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@3 +Negating conditional jump and destination [143] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@3 +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 +Successful SSA optimization Pass2ConstantIdentification +Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 +Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0 +Successful SSA optimization Pass2ConstantValues +Constant (const byte*) memset::$2 = (byte*)memset::str#0 +Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining Noop Cast [121] (signed word) mulf8s127::c#0 ← (signed word)(word~) mulf8s127::$2 keeping mulf8s127::c#0 +Successful SSA optimization Pass2NopCastInlining +Rewriting multiplication to use shift [126] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 * (signed byte) 2 +Rewriting multiplication to use shift [131] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 * (signed byte) 2 +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings (const byte*) memset::dst#0 +Inlining constant with var siblings (const byte*) print_str::str#1 +Inlining constant with var siblings (const byte*) print_str::str#2 +Inlining constant with var siblings (const byte) print_char::ch#0 +Inlining constant with var siblings (const byte) print_char::ch#1 +Inlining constant with var siblings (const byte) print_char::ch#2 +Inlining constant with var siblings (const byte) print_char::ch#3 +Inlining constant with var siblings (const byte) print_char::ch#6 +Inlining constant with var siblings (const byte) print_char::ch#7 +Inlining constant with var siblings (const byte) print_char::ch#8 +Inlining constant with var siblings (const byte) print_char::ch#9 +Inlining constant with var siblings (const byte) print_mulf8u127::a#0 +Inlining constant with var siblings (const byte) print_mulf8u127::b#0 +Inlining constant with var siblings (const byte) print_mulf8u127::a#1 +Inlining constant with var siblings (const byte) print_mulf8u127::b#1 +Inlining constant with var siblings (const byte) print_mulf8u127::a#2 +Inlining constant with var siblings (const byte) print_mulf8u127::b#2 +Inlining constant with var siblings (const byte) print_mulf8u127::a#3 +Inlining constant with var siblings (const byte) print_mulf8u127::b#3 +Inlining constant with var siblings (const byte) print_mulf8u127::a#4 +Inlining constant with var siblings (const byte) print_mulf8u127::b#4 +Inlining constant with var siblings (const byte) print_mulf8u127::a#5 +Inlining constant with var siblings (const byte) print_mulf8u127::b#5 +Inlining constant with var siblings (const byte) print_mulf8u127::a#6 +Inlining constant with var siblings (const byte) print_mulf8u127::b#6 +Inlining constant with var siblings (const byte) print_mulf8u127::a#7 +Inlining constant with var siblings (const byte) print_mulf8u127::b#7 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#0 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#0 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#1 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#1 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#2 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#2 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#3 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#3 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#4 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#4 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#5 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#5 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#6 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#6 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#7 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#7 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#8 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#8 +Inlining constant with var siblings (const signed byte) print_mulf8s127::a#9 +Inlining constant with var siblings (const signed byte) print_mulf8s127::b#9 +Inlining constant with var siblings (const byte*) print_line_cursor#0 +Constant inlined $0 = (const byte[]) print_hextab#0 +Constant inlined print_char::ch#7 = (byte) '=' +Constant inlined print_char::ch#6 = (byte) '*' +Constant inlined print_char::ch#9 = (byte) '=' +Constant inlined print_char::ch#8 = (byte) '*' +Constant inlined print_mulf8s127::b#6 = (signed byte) $7f +Constant inlined print_mulf8s127::b#7 = (signed byte) $7f +Constant inlined print_mulf8s127::b#4 = (signed byte) -$40 +Constant inlined print_mulf8s127::b#5 = (signed byte) -$40 +Constant inlined print_mulf8s127::b#2 = (signed byte) $7f +Constant inlined print_mulf8s127::b#3 = (signed byte) $40 +Constant inlined print_mulf8u127::b#7 = (byte) $ff +Constant inlined print_mulf8s127::b#0 = (signed byte) 0 +Constant inlined print_line_cursor#0 = (byte*) 1024 +Constant inlined print_mulf8u127::b#6 = (byte) $c0 +Constant inlined print_mulf8s127::b#1 = (signed byte) $40 +Constant inlined print_mulf8u127::b#5 = (byte) $7f +Constant inlined print_mulf8u127::b#4 = (byte) $c0 +Constant inlined print_str::str#2 = (const string) main::str1 +Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 +Constant inlined print_mulf8u127::b#3 = (byte) $7f +Constant inlined print_str::str#1 = (const string) main::str +Constant inlined print_mulf8u127::b#2 = (byte) $40 +Constant inlined print_mulf8u127::b#1 = (byte) $7f +Constant inlined print_mulf8u127::b#0 = (byte) 0 +Constant inlined print_mulf8s127::b#8 = (signed byte) -$7f +Constant inlined print_mulf8s127::b#9 = (signed byte) -$7f +Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 +Constant inlined print_mulf8s127::a#7 = (signed byte) -$7f +Constant inlined print_mulf8s127::a#8 = (signed byte) $7f +Constant inlined print_mulf8s127::a#5 = (signed byte) -$40 +Constant inlined print_mulf8s127::a#6 = (signed byte) $7f +Constant inlined print_mulf8s127::a#3 = (signed byte) -$40 +Constant inlined print_mulf8s127::a#4 = (signed byte) $40 +Constant inlined print_mulf8s127::a#1 = (signed byte) $40 +Constant inlined print_mulf8u127::a#7 = (byte) $ff +Constant inlined print_mulf8s127::a#2 = (signed byte) $40 +Constant inlined print_mulf8s127::a#0 = (signed byte) 0 +Constant inlined print_char::ch#3 = (byte) ' ' +Constant inlined print_char::ch#2 = (byte) '-' +Constant inlined print_char::ch#1 = (byte) ' ' +Constant inlined print_char::ch#0 = (byte) '-' +Constant inlined print_mulf8u127::a#6 = (byte) $c0 +Constant inlined print_mulf8u127::a#5 = (byte) $ff +Constant inlined print_mulf8u127::a#4 = (byte) $40 +Constant inlined print_mulf8u127::a#3 = (byte) $40 +Constant inlined print_mulf8u127::a#2 = (byte) $40 +Constant inlined print_mulf8u127::a#1 = (byte) $7f +Constant inlined print_mulf8u127::a#0 = (byte) 0 +Constant inlined print_mulf8s127::a#9 = (signed byte) -$7f +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting memset::@6(between memset::@4 and memset::@4) +Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting mulf8s127::@10(between mulf8s127::@8 and mulf8s127::@1) +Added new block during phi lifting mulf8s127::@11(between mulf8s127::@1 and mulf8s127::@2) +Added new block during phi lifting mulf8s127::@12(between mulf8s127::@2 and mulf8s127::@3) +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @12 +Adding NOP phi() at start of @28 +Adding NOP phi() at start of @38 +Adding NOP phi() at start of @40 +Adding NOP phi() at start of @41 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of main::@8 +Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of main::@10 +Adding NOP phi() at start of main::@13 +Adding NOP phi() at start of main::@14 +Adding NOP phi() at start of main::@15 +Adding NOP phi() at start of main::@16 +Adding NOP phi() at start of main::@17 +Adding NOP phi() at start of main::@18 +Adding NOP phi() at start of main::@19 +Adding NOP phi() at start of main::@20 +Adding NOP phi() at start of main::@21 +Adding NOP phi() at start of main::@22 +Adding NOP phi() at start of main::@23 +Adding NOP phi() at start of print_mulf8s127::@7 +Adding NOP phi() at start of print_ln::@2 +Adding NOP phi() at start of print_sword::@7 +Adding NOP phi() at start of print_word::@2 +Adding NOP phi() at start of print_byte::@2 +Adding NOP phi() at start of print_sbyte::@7 +Adding NOP phi() at start of print_mulf8u127::@7 +Adding NOP phi() at start of print_cls +Adding NOP phi() at start of print_cls::@1 +Adding NOP phi() at start of memset +Adding NOP phi() at start of memset::@2 +Adding NOP phi() at start of memset::@1 +CALL GRAPH +Calls in [] to main:5 +Calls in [main] to print_cls:9 print_str:11 print_ln:13 print_mulf8u127:15 print_mulf8u127:17 print_mulf8u127:19 print_mulf8u127:21 print_mulf8u127:23 print_mulf8u127:25 print_mulf8u127:27 print_mulf8u127:29 print_str:31 print_ln:34 print_mulf8s127:36 print_mulf8s127:38 print_mulf8s127:40 print_mulf8s127:42 print_mulf8s127:44 print_mulf8s127:46 print_mulf8s127:48 print_mulf8s127:50 print_mulf8s127:52 print_mulf8s127:54 +Calls in [print_mulf8s127] to mulf8s127:60 print_sbyte:66 print_char:68 print_sbyte:72 print_char:74 print_sword:76 print_ln:79 +Calls in [print_sword] to print_char:92 print_word:97 print_char:101 +Calls in [print_word] to print_byte:112 print_byte:116 +Calls in [print_byte] to print_char:124 print_char:129 +Calls in [print_sbyte] to print_char:135 print_byte:141 print_char:145 +Calls in [mulf8s127] to mulf8u127:152 +Calls in [print_mulf8u127] to mulf8u127:198 print_byte:204 print_char:206 print_byte:210 print_char:212 print_word:215 print_ln:218 +Calls in [print_cls] to memset:222 + +Created 26 initial phi equivalence classes +Coalesced [12] print_char_cursor#147 ← print_char_cursor#122 +Not coalescing [30] print_char_cursor#143 ← print_line_cursor#1 +Coalesced [32] print_line_cursor#84 ← print_line_cursor#1 +Coalesced (already) [33] print_char_cursor#146 ← print_char_cursor#122 +Coalesced [64] print_sbyte::b#9 ← print_sbyte::b#1 +Not coalescing [65] print_char_cursor#150 ← print_line_cursor#1 +Coalesced [67] print_char_cursor#159 ← print_char_cursor#19 +Coalesced [70] print_sbyte::b#10 ← print_sbyte::b#2 +Coalesced [71] print_char_cursor#151 ← print_char_cursor#19 +Coalesced (already) [73] print_char_cursor#160 ← print_char_cursor#19 +Coalesced (already) [77] print_line_cursor#85 ← print_line_cursor#1 +Coalesced [78] print_char_cursor#148 ← print_char_cursor#19 +Coalesced [83] print_line_cursor#87 ← print_line_cursor#63 +Coalesced (already) [89] print_line_cursor#88 ← print_line_cursor#1 +Coalesced (already) [91] print_char_cursor#166 ← print_char_cursor#19 +Coalesced [93] print_sword::w#9 ← print_sword::w#1 +Coalesced [96] print_word::w#5 ← print_word::w#0 +Coalesced (already) [100] print_char_cursor#165 ← print_char_cursor#19 +Coalesced [103] print_sword::w#8 ← print_sword::w#0 +Coalesced [110] print_byte::b#10 ← print_byte::b#1 +Coalesced [111] print_char_cursor#155 ← print_char_cursor#19 +Coalesced [114] print_byte::b#11 ← print_byte::b#2 +Coalesced (already) [115] print_char_cursor#156 ← print_char_cursor#19 +Coalesced [122] print_char::ch#11 ← print_char::ch#4 +Coalesced (already) [123] print_char_cursor#157 ← print_char_cursor#131 +Coalesced [127] print_char::ch#12 ← print_char::ch#5 +Coalesced (already) [128] print_char_cursor#158 ← print_char_cursor#19 +Coalesced (already) [134] print_char_cursor#164 ← print_char_cursor#127 +Coalesced [136] print_sbyte::b#12 ← print_sbyte::b#3 +Coalesced [139] print_byte::b#9 ← print_byte::b#0 +Coalesced (already) [140] print_char_cursor#154 ← print_char_cursor#19 +Coalesced (already) [144] print_char_cursor#163 ← print_char_cursor#127 +Coalesced [147] print_sbyte::b#11 ← print_sbyte::b#0 +Coalesced [150] mulf8u127::a#3 ← mulf8u127::a#1 +Coalesced [151] mulf8u127::b#3 ← mulf8u127::b#1 +Coalesced [159] mulf8s127::c#10 ← mulf8s127::c#1 +Coalesced [165] mulf8s127::c#13 ← mulf8s127::c#2 +Coalesced [170] mulf8s127::return#6 ← mulf8s127::c#3 +Coalesced [173] mulf8s127::return#5 ← mulf8s127::c#7 +Coalesced [174] mulf8s127::c#12 ← mulf8s127::c#5 +Coalesced [183] print_str::str#6 ← print_str::str#5 +Coalesced [184] print_char_cursor#144 ← print_char_cursor#136 +Coalesced [191] print_str::str#7 ← print_str::str#0 +Coalesced [192] print_char_cursor#145 ← print_char_cursor#1 +Coalesced [196] mulf8u127::a#4 ← mulf8u127::a#0 +Coalesced [197] mulf8u127::b#4 ← mulf8u127::b#0 +Coalesced [202] print_byte::b#7 ← print_byte::b#3 +Not coalescing [203] print_char_cursor#152 ← print_line_cursor#1 +Coalesced (already) [205] print_char_cursor#161 ← print_char_cursor#19 +Coalesced [208] print_byte::b#8 ← print_byte::b#4 +Coalesced (already) [209] print_char_cursor#153 ← print_char_cursor#19 +Coalesced (already) [211] print_char_cursor#162 ← print_char_cursor#19 +Coalesced [214] print_word::w#4 ← print_word::w#1 +Coalesced (already) [216] print_line_cursor#86 ← print_line_cursor#1 +Coalesced (already) [217] print_char_cursor#149 ← print_char_cursor#19 +Coalesced [233] memset::dst#3 ← memset::dst#1 +Coalesced down to 16 phi equivalence classes +Culled Empty Block (label) @12 +Culled Empty Block (label) @28 +Culled Empty Block (label) @38 +Culled Empty Block (label) @41 +Culled Empty Block (label) main::@23 +Culled Empty Block (label) print_mulf8s127::@7 +Culled Empty Block (label) print_ln::@2 +Culled Empty Block (label) print_ln::@3 +Culled Empty Block (label) print_sword::@6 +Culled Empty Block (label) print_sword::@7 +Culled Empty Block (label) print_word::@2 +Culled Empty Block (label) print_byte::@2 +Culled Empty Block (label) print_sbyte::@6 +Culled Empty Block (label) print_sbyte::@7 +Culled Empty Block (label) mulf8s127::@12 +Culled Empty Block (label) mulf8s127::@11 +Culled Empty Block (label) print_mulf8u127::@7 +Culled Empty Block (label) print_cls::@1 +Culled Empty Block (label) memset::@2 +Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memset::@6 +Renumbering block @40 to @1 +Renumbering block memset::@4 to memset::@1 +Renumbering block print_sword::@5 to print_sword::@4 +Renumbering block print_sbyte::@5 to print_sbyte::@4 +Renumbering block mulf8s127::@8 to mulf8s127::@7 +Renumbering block mulf8s127::@9 to mulf8s127::@8 +Renumbering block mulf8s127::@10 to mulf8s127::@9 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of main::@8 +Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of main::@10 +Adding NOP phi() at start of main::@12 +Adding NOP phi() at start of main::@13 +Adding NOP phi() at start of main::@14 +Adding NOP phi() at start of main::@15 +Adding NOP phi() at start of main::@16 +Adding NOP phi() at start of main::@17 +Adding NOP phi() at start of main::@18 +Adding NOP phi() at start of main::@19 +Adding NOP phi() at start of main::@20 +Adding NOP phi() at start of main::@21 +Adding NOP phi() at start of main::@22 +Adding NOP phi() at start of print_mulf8s127::@2 +Adding NOP phi() at start of print_mulf8s127::@4 +Adding NOP phi() at start of print_mulf8s127::@6 +Adding NOP phi() at start of print_sword::@3 +Adding NOP phi() at start of print_sword::@1 +Adding NOP phi() at start of print_sbyte::@3 +Adding NOP phi() at start of print_sbyte::@1 +Adding NOP phi() at start of print_mulf8u127::@2 +Adding NOP phi() at start of print_mulf8u127::@4 +Adding NOP phi() at start of print_mulf8u127::@6 +Adding NOP phi() at start of print_cls +Adding NOP phi() at start of memset + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + [5] call print_cls + to:main::@1 +main::@1: scope:[main] from main + [6] phi() + [7] call print_str + to:main::@2 +main::@2: scope:[main] from main::@1 + [8] phi() + [9] call print_ln + to:main::@3 +main::@3: scope:[main] from main::@2 + [10] phi() + [11] call print_mulf8u127 + to:main::@4 +main::@4: scope:[main] from main::@3 + [12] phi() + [13] call print_mulf8u127 + to:main::@5 +main::@5: scope:[main] from main::@4 + [14] phi() + [15] call print_mulf8u127 + to:main::@6 +main::@6: scope:[main] from main::@5 + [16] phi() + [17] call print_mulf8u127 + to:main::@7 +main::@7: scope:[main] from main::@6 + [18] phi() + [19] call print_mulf8u127 + to:main::@8 +main::@8: scope:[main] from main::@7 + [20] phi() + [21] call print_mulf8u127 + to:main::@9 +main::@9: scope:[main] from main::@8 + [22] phi() + [23] call print_mulf8u127 + to:main::@10 +main::@10: scope:[main] from main::@9 + [24] phi() + [25] call print_mulf8u127 + to:main::@11 +main::@11: scope:[main] from main::@10 + [26] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1 + [27] call print_str + to:main::@12 +main::@12: scope:[main] from main::@11 + [28] phi() + [29] call print_ln + to:main::@13 +main::@13: scope:[main] from main::@12 + [30] phi() + [31] call print_mulf8s127 + to:main::@14 +main::@14: scope:[main] from main::@13 + [32] phi() + [33] call print_mulf8s127 + to:main::@15 +main::@15: scope:[main] from main::@14 + [34] phi() + [35] call print_mulf8s127 + to:main::@16 +main::@16: scope:[main] from main::@15 + [36] phi() + [37] call print_mulf8s127 + to:main::@17 +main::@17: scope:[main] from main::@16 + [38] phi() + [39] call print_mulf8s127 + to:main::@18 +main::@18: scope:[main] from main::@17 + [40] phi() + [41] call print_mulf8s127 + to:main::@19 +main::@19: scope:[main] from main::@18 + [42] phi() + [43] call print_mulf8s127 + to:main::@20 +main::@20: scope:[main] from main::@19 + [44] phi() + [45] call print_mulf8s127 + to:main::@21 +main::@21: scope:[main] from main::@20 + [46] phi() + [47] call print_mulf8s127 + to:main::@22 +main::@22: scope:[main] from main::@21 + [48] phi() + [49] call print_mulf8s127 + to:main::@return +main::@return: scope:[main] from main::@22 + [50] return + to:@return +print_mulf8s127: scope:[print_mulf8s127] from main::@13 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@22 + [51] (signed byte) print_mulf8s127::b#10 ← phi( main::@13/(signed byte) 0 main::@14/(signed byte) $40 main::@15/(signed byte) $7f main::@16/(signed byte) $40 main::@17/(signed byte) -$40 main::@18/(signed byte) -$40 main::@19/(signed byte) $7f main::@20/(signed byte) $7f main::@21/(signed byte) -$7f main::@22/(signed byte) -$7f ) + [51] (signed byte) print_mulf8s127::a#10 ← phi( main::@13/(signed byte) 0 main::@14/(signed byte) $40 main::@15/(signed byte) $40 main::@16/(signed byte) -$40 main::@17/(signed byte) $40 main::@18/(signed byte) -$40 main::@19/(signed byte) $7f main::@20/(signed byte) -$7f main::@21/(signed byte) $7f main::@22/(signed byte) -$7f ) + [52] (signed byte) mulf8s127::a#0 ← (signed byte) print_mulf8s127::a#10 + [53] (signed byte) mulf8s127::b#0 ← (signed byte) print_mulf8s127::b#10 + [54] call mulf8s127 + [55] (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#1 + to:print_mulf8s127::@1 +print_mulf8s127::@1: scope:[print_mulf8s127] from print_mulf8s127 + [56] (signed word) print_mulf8s127::c#0 ← (signed word) mulf8s127::return#0 + [57] (signed byte) print_sbyte::b#1 ← (signed byte) print_mulf8s127::a#10 + [58] (byte*~) print_char_cursor#150 ← (byte*) print_line_cursor#1 + [59] call print_sbyte + to:print_mulf8s127::@2 +print_mulf8s127::@2: scope:[print_mulf8s127] from print_mulf8s127::@1 + [60] phi() + [61] call print_char + to:print_mulf8s127::@3 +print_mulf8s127::@3: scope:[print_mulf8s127] from print_mulf8s127::@2 + [62] (signed byte) print_sbyte::b#2 ← (signed byte) print_mulf8s127::b#10 + [63] call print_sbyte + to:print_mulf8s127::@4 +print_mulf8s127::@4: scope:[print_mulf8s127] from print_mulf8s127::@3 + [64] phi() + [65] call print_char + to:print_mulf8s127::@5 +print_mulf8s127::@5: scope:[print_mulf8s127] from print_mulf8s127::@4 + [66] (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#0 + [67] call print_sword + to:print_mulf8s127::@6 +print_mulf8s127::@6: scope:[print_mulf8s127] from print_mulf8s127::@5 + [68] phi() + [69] call print_ln + to:print_mulf8s127::@return +print_mulf8s127::@return: scope:[print_mulf8s127] from print_mulf8s127::@6 + [70] return + to:@return +print_ln: scope:[print_ln] from main::@12 main::@2 print_mulf8s127::@6 print_mulf8u127::@6 + [71] (byte*) print_char_cursor#123 ← phi( main::@12/(byte*) print_char_cursor#122 main::@2/(byte*) print_char_cursor#122 print_mulf8s127::@6/(byte*) print_char_cursor#19 print_mulf8u127::@6/(byte*) print_char_cursor#19 ) + [71] (byte*) print_line_cursor#63 ← phi( main::@12/(byte*) print_line_cursor#1 main::@2/(byte*) 1024 print_mulf8s127::@6/(byte*) print_line_cursor#1 print_mulf8u127::@6/(byte*) print_line_cursor#1 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [72] (byte*) print_line_cursor#32 ← phi( print_ln/(byte*) print_line_cursor#63 print_ln::@1/(byte*) print_line_cursor#1 ) + [73] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 + [74] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [75] return + to:@return +print_sword: scope:[print_sword] from print_mulf8s127::@5 + [76] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 + to:print_sword::@3 +print_sword::@3: scope:[print_sword] from print_sword + [77] phi() + [78] call print_char + to:print_sword::@2 +print_sword::@2: scope:[print_sword] from print_sword::@3 print_sword::@4 + [79] (signed word) print_sword::w#4 ← phi( print_sword::@4/(signed word) print_sword::w#0 print_sword::@3/(signed word) print_sword::w#1 ) + [80] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 + [81] call print_word + to:print_sword::@return +print_sword::@return: scope:[print_sword] from print_sword::@2 + [82] return + to:@return +print_sword::@1: scope:[print_sword] from print_sword + [83] phi() + [84] call print_char + to:print_sword::@4 +print_sword::@4: scope:[print_sword] from print_sword::@1 + [85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 + to:print_sword::@2 +print_char: scope:[print_char] from print_byte print_byte::@1 print_mulf8s127::@2 print_mulf8s127::@4 print_mulf8u127::@2 print_mulf8u127::@4 print_sbyte::@1 print_sbyte::@3 print_sword::@1 print_sword::@3 + [86] (byte*) print_char_cursor#80 ← phi( print_byte/(byte*) print_char_cursor#131 print_byte::@1/(byte*) print_char_cursor#19 print_mulf8s127::@2/(byte*) print_char_cursor#19 print_mulf8s127::@4/(byte*) print_char_cursor#19 print_mulf8u127::@2/(byte*) print_char_cursor#19 print_mulf8u127::@4/(byte*) print_char_cursor#19 print_sbyte::@1/(byte*) print_char_cursor#127 print_sbyte::@3/(byte*) print_char_cursor#127 print_sword::@1/(byte*) print_char_cursor#19 print_sword::@3/(byte*) print_char_cursor#19 ) + [86] (byte) print_char::ch#10 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 print_mulf8s127::@2/(byte) '*' print_mulf8s127::@4/(byte) '=' print_mulf8u127::@2/(byte) '*' print_mulf8u127::@4/(byte) '=' print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sword::@1/(byte) '-' print_sword::@3/(byte) ' ' ) + [87] *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 + [88] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#80 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [89] return + to:@return +print_word: scope:[print_word] from print_mulf8u127::@5 print_sword::@2 + [90] (word) print_word::w#2 ← phi( print_mulf8u127::@5/(word) print_word::w#1 print_sword::@2/(word) print_word::w#0 ) + [91] (byte) print_byte::b#1 ← > (word) print_word::w#2 + [92] call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [93] (byte) print_byte::b#2 ← < (word) print_word::w#2 + [94] call print_byte + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [95] return + to:@return +print_byte: scope:[print_byte] from print_mulf8u127::@1 print_mulf8u127::@3 print_sbyte::@2 print_word print_word::@1 + [96] (byte*) print_char_cursor#131 ← phi( print_mulf8u127::@1/(byte*~) print_char_cursor#152 print_mulf8u127::@3/(byte*) print_char_cursor#19 print_sbyte::@2/(byte*) print_char_cursor#19 print_word/(byte*) print_char_cursor#19 print_word::@1/(byte*) print_char_cursor#19 ) + [96] (byte) print_byte::b#5 ← phi( print_mulf8u127::@1/(byte) print_byte::b#3 print_mulf8u127::@3/(byte) print_byte::b#4 print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 ) + [97] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 + [98] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) + [99] call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [100] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f + [101] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) + [102] call print_char + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [103] return + to:@return +print_sbyte: scope:[print_sbyte] from print_mulf8s127::@1 print_mulf8s127::@3 + [104] (byte*) print_char_cursor#127 ← phi( print_mulf8s127::@1/(byte*~) print_char_cursor#150 print_mulf8s127::@3/(byte*) print_char_cursor#19 ) + [104] (signed byte) print_sbyte::b#3 ← phi( print_mulf8s127::@1/(signed byte) print_sbyte::b#1 print_mulf8s127::@3/(signed byte) print_sbyte::b#2 ) + [105] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 + to:print_sbyte::@3 +print_sbyte::@3: scope:[print_sbyte] from print_sbyte + [106] phi() + [107] call print_char + to:print_sbyte::@2 +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 + [108] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) + [109] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 + [110] call print_byte + to:print_sbyte::@return +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 + [111] return + to:@return +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + [112] phi() + [113] call print_char + to:print_sbyte::@4 +print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 + [114] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 + to:print_sbyte::@2 +mulf8s127: scope:[mulf8s127] from print_mulf8s127 + [115] (byte) mulf8u127::a#1 ← (byte)(signed byte) mulf8s127::a#0 + [116] (byte) mulf8u127::b#1 ← (byte)(signed byte) mulf8s127::b#0 + [117] call mulf8u127 + [118] (word) mulf8u127::return#3 ← (word) mulf8u127::return#1 + to:mulf8s127::@7 +mulf8s127::@7: scope:[mulf8s127] from mulf8s127 + [119] (word) mulf8s127::c#0 ← (word) mulf8u127::return#3 + [120] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@9 + to:mulf8s127::@4 +mulf8s127::@4: scope:[mulf8s127] from mulf8s127::@7 + [121] (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#0 + [122] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 << (byte) 1 + [123] (signed word) mulf8s127::c#1 ← (signed word)(word) mulf8s127::c#0 - (signed word~) mulf8s127::$13 + to:mulf8s127::@1 +mulf8s127::@1: scope:[mulf8s127] from mulf8s127::@4 mulf8s127::@9 + [124] (signed word) mulf8s127::c#5 ← phi( mulf8s127::@4/(signed word) mulf8s127::c#1 mulf8s127::@9/(signed word~) mulf8s127::c#11 ) + [125] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@2 + to:mulf8s127::@5 +mulf8s127::@5: scope:[mulf8s127] from mulf8s127::@1 + [126] (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#0 + [127] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 << (byte) 1 + [128] (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (signed word~) mulf8s127::$15 + to:mulf8s127::@2 +mulf8s127::@2: scope:[mulf8s127] from mulf8s127::@1 mulf8s127::@5 + [129] (signed word) mulf8s127::c#7 ← phi( mulf8s127::@1/(signed word) mulf8s127::c#5 mulf8s127::@5/(signed word) mulf8s127::c#2 ) + [130] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@3 + to:mulf8s127::@8 +mulf8s127::@8: scope:[mulf8s127] from mulf8s127::@2 + [131] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@3 + to:mulf8s127::@6 +mulf8s127::@6: scope:[mulf8s127] from mulf8s127::@8 + [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (signed word) $200 + to:mulf8s127::@3 +mulf8s127::@3: scope:[mulf8s127] from mulf8s127::@2 mulf8s127::@6 mulf8s127::@8 + [133] (signed word) mulf8s127::return#1 ← phi( mulf8s127::@2/(signed word) mulf8s127::c#7 mulf8s127::@6/(signed word) mulf8s127::c#3 ) + to:mulf8s127::@return +mulf8s127::@return: scope:[mulf8s127] from mulf8s127::@3 + [134] return + to:@return +mulf8s127::@9: scope:[mulf8s127] from mulf8s127::@7 + [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 + to:mulf8s127::@1 +mulf8u127: scope:[mulf8u127] from mulf8s127 print_mulf8u127 + [136] (byte) mulf8u127::b#2 ← phi( mulf8s127/(byte) mulf8u127::b#1 print_mulf8u127/(byte) mulf8u127::b#0 ) + [136] (byte) mulf8u127::a#2 ← phi( mulf8s127/(byte) mulf8u127::a#1 print_mulf8u127/(byte) mulf8u127::a#0 ) + [137] *((const byte*) mulf8u127::memA#0) ← (byte) mulf8u127::a#2 + [138] *((const byte*) mulf8u127::memB#0) ← (byte) mulf8u127::b#2 + asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } + [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) + to:mulf8u127::@return +mulf8u127::@return: scope:[mulf8u127] from mulf8u127 + [141] return + to:@return +print_str: scope:[print_str] from main::@1 main::@11 + [142] (byte*) print_char_cursor#136 ← phi( main::@1/(byte*) 1024 main::@11/(byte*~) print_char_cursor#143 ) + [142] (byte*) print_str::str#5 ← phi( main::@1/(const string) main::str main::@11/(const string) main::str1 ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + [143] (byte*) print_char_cursor#122 ← phi( print_str/(byte*) print_char_cursor#136 print_str::@2/(byte*) print_char_cursor#1 ) + [143] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 ) + [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 + to:print_str::@return +print_str::@return: scope:[print_str] from print_str::@1 + [145] return + to:@return +print_str::@2: scope:[print_str] from print_str::@1 + [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) + [147] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#122 + [148] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 + to:print_str::@1 +print_mulf8u127: scope:[print_mulf8u127] from main::@10 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 + [149] (byte) print_mulf8u127::b#10 ← phi( main::@10/(byte) $ff main::@3/(byte) 0 main::@4/(byte) $7f main::@5/(byte) $40 main::@6/(byte) $7f main::@7/(byte) $c0 main::@8/(byte) $7f main::@9/(byte) $c0 ) + [149] (byte) print_mulf8u127::a#8 ← phi( main::@10/(byte) $ff main::@3/(byte) 0 main::@4/(byte) $7f main::@5/(byte) $40 main::@6/(byte) $40 main::@7/(byte) $40 main::@8/(byte) $ff main::@9/(byte) $c0 ) + [150] (byte) mulf8u127::a#0 ← (byte) print_mulf8u127::a#8 + [151] (byte) mulf8u127::b#0 ← (byte) print_mulf8u127::b#10 + [152] call mulf8u127 + [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 + to:print_mulf8u127::@1 +print_mulf8u127::@1: scope:[print_mulf8u127] from print_mulf8u127 + [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 + [155] (byte) print_byte::b#3 ← (byte) print_mulf8u127::a#8 + [156] (byte*~) print_char_cursor#152 ← (byte*) print_line_cursor#1 + [157] call print_byte + to:print_mulf8u127::@2 +print_mulf8u127::@2: scope:[print_mulf8u127] from print_mulf8u127::@1 + [158] phi() + [159] call print_char + to:print_mulf8u127::@3 +print_mulf8u127::@3: scope:[print_mulf8u127] from print_mulf8u127::@2 + [160] (byte) print_byte::b#4 ← (byte) print_mulf8u127::b#10 + [161] call print_byte + to:print_mulf8u127::@4 +print_mulf8u127::@4: scope:[print_mulf8u127] from print_mulf8u127::@3 + [162] phi() + [163] call print_char + to:print_mulf8u127::@5 +print_mulf8u127::@5: scope:[print_mulf8u127] from print_mulf8u127::@4 + [164] (word) print_word::w#1 ← (word) print_mulf8u127::c#0 + [165] call print_word + to:print_mulf8u127::@6 +print_mulf8u127::@6: scope:[print_mulf8u127] from print_mulf8u127::@5 + [166] phi() + [167] call print_ln + to:print_mulf8u127::@return +print_mulf8u127::@return: scope:[print_mulf8u127] from print_mulf8u127::@6 + [168] return + to:@return +print_cls: scope:[print_cls] from main + [169] phi() + [170] call memset + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls + [171] return + to:@return +memset: scope:[memset] from print_cls + [172] phi() + to:memset::@1 +memset::@1: scope:[memset] from memset memset::@1 + [173] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@1/(byte*) memset::dst#1 ) + [174] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 + to:memset::@return +memset::@return: scope:[memset] from memset::@1 + [177] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(void()) main() +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(byte) memset::c +(byte*) memset::dst +(byte*) memset::dst#1 16.5 +(byte*) memset::dst#2 16.5 +(byte*) memset::end +(word) memset::num +(void*) memset::return +(void*) memset::str +(byte[$200]) mulf127_sqr1_hi +(byte[$200]) mulf127_sqr1_lo +(byte[$200]) mulf127_sqr2_hi +(byte[$200]) mulf127_sqr2_lo +(signed word()) mulf8s127((signed byte) mulf8s127::a , (signed byte) mulf8s127::b) +(signed word~) mulf8s127::$12 4.0 +(signed word~) mulf8s127::$13 4.0 +(signed word~) mulf8s127::$14 4.0 +(signed word~) mulf8s127::$15 4.0 +(signed byte) mulf8s127::a +(signed byte) mulf8s127::a#0 0.3333333333333333 +(signed byte) mulf8s127::b +(signed byte) mulf8s127::b#0 0.3333333333333333 +(signed word) mulf8s127::c +(word) mulf8s127::c#0 0.5 +(signed word) mulf8s127::c#1 4.0 +(signed word~) mulf8s127::c#11 4.0 +(signed word) mulf8s127::c#2 4.0 +(signed word) mulf8s127::c#3 4.0 +(signed word) mulf8s127::c#5 2.0 +(signed word) mulf8s127::c#7 2.6666666666666665 +(signed word) mulf8s127::return +(signed word) mulf8s127::return#0 4.0 +(signed word) mulf8s127::return#1 2.0 +(word()) mulf8u127((byte) mulf8u127::a , (byte) mulf8u127::b) +(byte) mulf8u127::a +(byte) mulf8u127::a#0 2.0 +(byte) mulf8u127::a#1 2.0 +(byte) mulf8u127::a#2 6.0 +(byte) mulf8u127::b +(byte) mulf8u127::b#0 4.0 +(byte) mulf8u127::b#1 4.0 +(byte) mulf8u127::b#2 3.0 +(byte*) mulf8u127::memA +(byte*) mulf8u127::memB +(word*) mulf8u127::res +(byte*) mulf8u127::resH +(byte*) mulf8u127::resL +(word) mulf8u127::return +(word) mulf8u127::return#0 4.0 +(word) mulf8u127::return#1 1.5 +(word) mulf8u127::return#3 4.0 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 4.0 +(byte~) print_byte::$2 4.0 +(byte) print_byte::b +(byte) print_byte::b#0 4.0 +(byte) print_byte::b#1 4.0 +(byte) print_byte::b#2 4.0 +(byte) print_byte::b#3 2.0 +(byte) print_byte::b#4 4.0 +(byte) print_byte::b#5 3.5 +(void()) print_char((byte) print_char::ch) +(byte) print_char::ch +(byte) print_char::ch#10 6.0 +(byte) print_char::ch#4 4.0 +(byte) print_char::ch#5 4.0 +(byte*) print_char_cursor +(byte*) print_char_cursor#1 11.0 +(byte*) print_char_cursor#122 4.875 +(byte*) print_char_cursor#123 4.75 +(byte*) print_char_cursor#127 2.0 +(byte*) print_char_cursor#131 3.9999999999999996 +(byte*) print_char_cursor#136 4.0 +(byte*~) print_char_cursor#143 4.0 +(byte*~) print_char_cursor#150 4.0 +(byte*~) print_char_cursor#152 4.0 +(byte*) print_char_cursor#19 0.6 +(byte*) print_char_cursor#80 12.0 +(void()) print_cls() +(byte[]) print_hextab +(byte*) print_line_cursor +(byte*) print_line_cursor#1 0.5421686746987951 +(byte*) print_line_cursor#32 24.0 +(byte*) print_line_cursor#63 8.0 +(void()) print_ln() +(void()) print_mulf8s127((signed byte) print_mulf8s127::a , (signed byte) print_mulf8s127::b) +(signed byte) print_mulf8s127::a +(signed byte) print_mulf8s127::a#10 0.6666666666666666 +(signed byte) print_mulf8s127::b +(signed byte) print_mulf8s127::b#10 0.36363636363636365 +(signed word) print_mulf8s127::c +(signed word) print_mulf8s127::c#0 0.4 +(void()) print_mulf8u127((byte) print_mulf8u127::a , (byte) print_mulf8u127::b) +(byte) print_mulf8u127::a +(byte) print_mulf8u127::a#8 0.6666666666666666 +(byte) print_mulf8u127::b +(byte) print_mulf8u127::b#10 0.36363636363636365 +(word) print_mulf8u127::c +(word) print_mulf8u127::c#0 0.4 +(void()) print_sbyte((signed byte) print_sbyte::b) +(signed byte) print_sbyte::b +(signed byte) print_sbyte::b#0 4.0 +(signed byte) print_sbyte::b#1 2.0 +(signed byte) print_sbyte::b#2 4.0 +(signed byte) print_sbyte::b#3 1.6666666666666665 +(signed byte) print_sbyte::b#5 4.0 +(byte*) print_screen +(void()) print_str((byte*) print_str::str) +(byte*) print_str::str +(byte*) print_str::str#0 22.0 +(byte*) print_str::str#3 11.5 +(byte*) print_str::str#5 2.0 +(void()) print_sword((signed word) print_sword::w) +(signed word) print_sword::w +(signed word) print_sword::w#0 4.0 +(signed word) print_sword::w#1 1.3333333333333333 +(signed word) print_sword::w#4 4.0 +(void()) print_word((word) print_word::w) +(word) print_word::w +(word) print_word::w#0 4.0 +(word) print_word::w#1 4.0 +(word) print_word::w#2 2.6666666666666665 + +Initial phi equivalence classes +[ print_mulf8s127::a#10 ] +[ print_mulf8s127::b#10 ] +[ print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] +[ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +[ print_char::ch#10 print_char::ch#4 print_char::ch#5 ] +[ print_char_cursor#80 print_char_cursor#131 print_char_cursor#123 print_char_cursor#122 print_char_cursor#19 print_char_cursor#127 print_char_cursor#152 print_char_cursor#150 print_char_cursor#136 print_char_cursor#143 print_char_cursor#1 ] +[ print_word::w#2 print_word::w#1 print_word::w#0 ] +[ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +[ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 ] +[ mulf8u127::a#2 mulf8u127::a#1 mulf8u127::a#0 ] +[ mulf8u127::b#2 mulf8u127::b#1 mulf8u127::b#0 ] +[ print_str::str#3 print_str::str#5 print_str::str#0 ] +[ print_mulf8u127::a#8 ] +[ print_mulf8u127::b#10 ] +[ memset::dst#2 memset::dst#1 ] +Added variable mulf8s127::a#0 to zero page equivalence class [ mulf8s127::a#0 ] +Added variable mulf8s127::b#0 to zero page equivalence class [ mulf8s127::b#0 ] +Added variable mulf8s127::return#0 to zero page equivalence class [ mulf8s127::return#0 ] +Added variable print_mulf8s127::c#0 to zero page equivalence class [ print_mulf8s127::c#0 ] +Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] +Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] +Added variable mulf8u127::return#3 to zero page equivalence class [ mulf8u127::return#3 ] +Added variable mulf8s127::c#0 to zero page equivalence class [ mulf8s127::c#0 ] +Added variable mulf8s127::$12 to zero page equivalence class [ mulf8s127::$12 ] +Added variable mulf8s127::$13 to zero page equivalence class [ mulf8s127::$13 ] +Added variable mulf8s127::$14 to zero page equivalence class [ mulf8s127::$14 ] +Added variable mulf8s127::$15 to zero page equivalence class [ mulf8s127::$15 ] +Added variable mulf8u127::return#1 to zero page equivalence class [ mulf8u127::return#1 ] +Added variable mulf8u127::return#0 to zero page equivalence class [ mulf8u127::return#0 ] +Added variable print_mulf8u127::c#0 to zero page equivalence class [ print_mulf8u127::c#0 ] +Complete equivalence classes +[ print_mulf8s127::a#10 ] +[ print_mulf8s127::b#10 ] +[ print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] +[ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +[ print_char::ch#10 print_char::ch#4 print_char::ch#5 ] +[ print_char_cursor#80 print_char_cursor#131 print_char_cursor#123 print_char_cursor#122 print_char_cursor#19 print_char_cursor#127 print_char_cursor#152 print_char_cursor#150 print_char_cursor#136 print_char_cursor#143 print_char_cursor#1 ] +[ print_word::w#2 print_word::w#1 print_word::w#0 ] +[ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +[ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 ] +[ mulf8u127::a#2 mulf8u127::a#1 mulf8u127::a#0 ] +[ mulf8u127::b#2 mulf8u127::b#1 mulf8u127::b#0 ] +[ print_str::str#3 print_str::str#5 print_str::str#0 ] +[ print_mulf8u127::a#8 ] +[ print_mulf8u127::b#10 ] +[ memset::dst#2 memset::dst#1 ] +[ mulf8s127::a#0 ] +[ mulf8s127::b#0 ] +[ mulf8s127::return#0 ] +[ print_mulf8s127::c#0 ] +[ print_byte::$0 ] +[ print_byte::$2 ] +[ mulf8u127::return#3 ] +[ mulf8s127::c#0 ] +[ mulf8s127::$12 ] +[ mulf8s127::$13 ] +[ mulf8s127::$14 ] +[ mulf8s127::$15 ] +[ mulf8u127::return#1 ] +[ mulf8u127::return#0 ] +[ print_mulf8u127::c#0 ] +Allocated zp ZP_BYTE:2 [ print_mulf8s127::a#10 ] +Allocated zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Allocated zp ZP_WORD:4 [ print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] +Allocated zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Allocated zp ZP_BYTE:8 [ print_char::ch#10 print_char::ch#4 print_char::ch#5 ] +Allocated zp ZP_WORD:9 [ print_char_cursor#80 print_char_cursor#131 print_char_cursor#123 print_char_cursor#122 print_char_cursor#19 print_char_cursor#127 print_char_cursor#152 print_char_cursor#150 print_char_cursor#136 print_char_cursor#143 print_char_cursor#1 ] +Allocated zp ZP_WORD:11 [ print_word::w#2 print_word::w#1 print_word::w#0 ] +Allocated zp ZP_BYTE:13 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +Allocated zp ZP_BYTE:14 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +Allocated zp ZP_WORD:15 [ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 ] +Allocated zp ZP_BYTE:17 [ mulf8u127::a#2 mulf8u127::a#1 mulf8u127::a#0 ] +Allocated zp ZP_BYTE:18 [ mulf8u127::b#2 mulf8u127::b#1 mulf8u127::b#0 ] +Allocated zp ZP_WORD:19 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Allocated zp ZP_BYTE:21 [ print_mulf8u127::a#8 ] +Allocated zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Allocated zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] +Allocated zp ZP_BYTE:25 [ mulf8s127::a#0 ] +Allocated zp ZP_BYTE:26 [ mulf8s127::b#0 ] +Allocated zp ZP_WORD:27 [ mulf8s127::return#0 ] +Allocated zp ZP_WORD:29 [ print_mulf8s127::c#0 ] +Allocated zp ZP_BYTE:31 [ print_byte::$0 ] +Allocated zp ZP_BYTE:32 [ print_byte::$2 ] +Allocated zp ZP_WORD:33 [ mulf8u127::return#3 ] +Allocated zp ZP_WORD:35 [ mulf8s127::c#0 ] +Allocated zp ZP_WORD:37 [ mulf8s127::$12 ] +Allocated zp ZP_WORD:39 [ mulf8s127::$13 ] +Allocated zp ZP_WORD:41 [ mulf8s127::$14 ] +Allocated zp ZP_WORD:43 [ mulf8s127::$15 ] +Allocated zp ZP_WORD:45 [ mulf8u127::return#1 ] +Allocated zp ZP_WORD:47 [ mulf8u127::return#0 ] +Allocated zp ZP_WORD:49 [ print_mulf8u127::c#0 ] + +INITIAL ASM + // File Comments +// An implementation of seriously fast multiply for integer values in the interval [-1;1] with the best possible precision +// NOTE: So far unsuccessful - since the handling of sign and values where a+b>sqrt2) makes the code slower than regular fast multiply +// In this model 255 binary represents 1.0 - meaning that 255*255 = 255 +// Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 +// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label print_char_cursor = 9 + .label print_line_cursor = 4 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + // [5] call print_cls + // [169] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + // [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + // main::@1 + b1: + // [7] call print_str + // [142] phi from main::@1 to print_str [phi:main::@1->print_str] + print_str_from_b1: + // [142] phi (byte*) print_char_cursor#136 = (byte*) 1024 [phi:main::@1->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + // [142] phi (byte*) print_str::str#5 = (const string) main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + // main::@2 + b2: + // [9] call print_ln + // [71] phi from main::@2 to print_ln [phi:main::@2->print_ln] + print_ln_from_b2: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#122 [phi:main::@2->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) 1024 [phi:main::@2->print_ln#1] -- pbuz1=pbuc1 + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + jmp b3 + // main::@3 + b3: + // [11] call print_mulf8u127 + // [149] phi from main::@3 to print_mulf8u127 [phi:main::@3->print_mulf8u127] + print_mulf8u127_from_b3: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) 0 [phi:main::@3->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) 0 [phi:main::@3->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #0 + sta print_mulf8u127.a + jsr print_mulf8u127 + // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + jmp b4 + // main::@4 + b4: + // [13] call print_mulf8u127 + // [149] phi from main::@4 to print_mulf8u127 [phi:main::@4->print_mulf8u127] + print_mulf8u127_from_b4: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@4->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $7f [phi:main::@4->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.a + jsr print_mulf8u127 + // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + b5_from_b4: + jmp b5 + // main::@5 + b5: + // [15] call print_mulf8u127 + // [149] phi from main::@5 to print_mulf8u127 [phi:main::@5->print_mulf8u127] + print_mulf8u127_from_b5: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $40 [phi:main::@5->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$40 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@5->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #$40 + sta print_mulf8u127.a + jsr print_mulf8u127 + // [16] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + jmp b6 + // main::@6 + b6: + // [17] call print_mulf8u127 + // [149] phi from main::@6 to print_mulf8u127 [phi:main::@6->print_mulf8u127] + print_mulf8u127_from_b6: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@6->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@6->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #$40 + sta print_mulf8u127.a + jsr print_mulf8u127 + // [18] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + jmp b7 + // main::@7 + b7: + // [19] call print_mulf8u127 + // [149] phi from main::@7 to print_mulf8u127 [phi:main::@7->print_mulf8u127] + print_mulf8u127_from_b7: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $c0 [phi:main::@7->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$c0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@7->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #$40 + sta print_mulf8u127.a + jsr print_mulf8u127 + // [20] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + b8_from_b7: + jmp b8 + // main::@8 + b8: + // [21] call print_mulf8u127 + // [149] phi from main::@8 to print_mulf8u127 [phi:main::@8->print_mulf8u127] + print_mulf8u127_from_b8: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@8->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $ff [phi:main::@8->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #$ff + sta print_mulf8u127.a + jsr print_mulf8u127 + // [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + b9_from_b8: + jmp b9 + // main::@9 + b9: + // [23] call print_mulf8u127 + // [149] phi from main::@9 to print_mulf8u127 [phi:main::@9->print_mulf8u127] + print_mulf8u127_from_b9: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $c0 [phi:main::@9->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$c0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $c0 [phi:main::@9->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #$c0 + sta print_mulf8u127.a + jsr print_mulf8u127 + // [24] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + b10_from_b9: + jmp b10 + // main::@10 + b10: + // [25] call print_mulf8u127 + // [149] phi from main::@10 to print_mulf8u127 [phi:main::@10->print_mulf8u127] + print_mulf8u127_from_b10: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $ff [phi:main::@10->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$ff + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $ff [phi:main::@10->print_mulf8u127#1] -- vbuz1=vbuc1 + lda #$ff + sta print_mulf8u127.a + jsr print_mulf8u127 + jmp b11 + // main::@11 + b11: + // [26] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [27] call print_str + // [142] phi from main::@11 to print_str [phi:main::@11->print_str] + print_str_from_b11: + // [142] phi (byte*) print_char_cursor#136 = (byte*~) print_char_cursor#143 [phi:main::@11->print_str#0] -- register_copy + // [142] phi (byte*) print_str::str#5 = (const string) main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + b12_from_b11: + jmp b12 + // main::@12 + b12: + // [29] call print_ln + // [71] phi from main::@12 to print_ln [phi:main::@12->print_ln] + print_ln_from_b12: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#122 [phi:main::@12->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:main::@12->print_ln#1] -- register_copy + jsr print_ln + // [30] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + b13_from_b12: + jmp b13 + // main::@13 + b13: + // [31] call print_mulf8s127 + // [51] phi from main::@13 to print_mulf8s127 [phi:main::@13->print_mulf8s127] + print_mulf8s127_from_b13: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) 0 [phi:main::@13->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #0 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) 0 [phi:main::@13->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #0 + sta print_mulf8s127.a + jsr print_mulf8s127 + // [32] phi from main::@13 to main::@14 [phi:main::@13->main::@14] + b14_from_b13: + jmp b14 + // main::@14 + b14: + // [33] call print_mulf8s127 + // [51] phi from main::@14 to print_mulf8s127 [phi:main::@14->print_mulf8s127] + print_mulf8s127_from_b14: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $40 [phi:main::@14->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@14->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.a + jsr print_mulf8s127 + // [34] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + b15_from_b14: + jmp b15 + // main::@15 + b15: + // [35] call print_mulf8s127 + // [51] phi from main::@15 to print_mulf8s127 [phi:main::@15->print_mulf8s127] + print_mulf8s127_from_b15: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@15->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@15->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.a + jsr print_mulf8s127 + // [36] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + b16_from_b15: + jmp b16 + // main::@16 + b16: + // [37] call print_mulf8s127 + // [51] phi from main::@16 to print_mulf8s127 [phi:main::@16->print_mulf8s127] + print_mulf8s127_from_b16: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $40 [phi:main::@16->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$40 [phi:main::@16->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.a + jsr print_mulf8s127 + // [38] phi from main::@16 to main::@17 [phi:main::@16->main::@17] + b17_from_b16: + jmp b17 + // main::@17 + b17: + // [39] call print_mulf8s127 + // [51] phi from main::@17 to print_mulf8s127 [phi:main::@17->print_mulf8s127] + print_mulf8s127_from_b17: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$40 [phi:main::@17->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@17->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.a + jsr print_mulf8s127 + // [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + b18_from_b17: + jmp b18 + // main::@18 + b18: + // [41] call print_mulf8s127 + // [51] phi from main::@18 to print_mulf8s127 [phi:main::@18->print_mulf8s127] + print_mulf8s127_from_b18: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$40 [phi:main::@18->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$40 [phi:main::@18->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.a + jsr print_mulf8s127 + // [42] phi from main::@18 to main::@19 [phi:main::@18->main::@19] + b19_from_b18: + jmp b19 + // main::@19 + b19: + // [43] call print_mulf8s127 + // [51] phi from main::@19 to print_mulf8s127 [phi:main::@19->print_mulf8s127] + print_mulf8s127_from_b19: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@19->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $7f [phi:main::@19->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.a + jsr print_mulf8s127 + // [44] phi from main::@19 to main::@20 [phi:main::@19->main::@20] + b20_from_b19: + jmp b20 + // main::@20 + b20: + // [45] call print_mulf8s127 + // [51] phi from main::@20 to print_mulf8s127 [phi:main::@20->print_mulf8s127] + print_mulf8s127_from_b20: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@20->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$7f [phi:main::@20->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.a + jsr print_mulf8s127 + // [46] phi from main::@20 to main::@21 [phi:main::@20->main::@21] + b21_from_b20: + jmp b21 + // main::@21 + b21: + // [47] call print_mulf8s127 + // [51] phi from main::@21 to print_mulf8s127 [phi:main::@21->print_mulf8s127] + print_mulf8s127_from_b21: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$7f [phi:main::@21->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $7f [phi:main::@21->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.a + jsr print_mulf8s127 + // [48] phi from main::@21 to main::@22 [phi:main::@21->main::@22] + b22_from_b21: + jmp b22 + // main::@22 + b22: + // [49] call print_mulf8s127 + // [51] phi from main::@22 to print_mulf8s127 [phi:main::@22->print_mulf8s127] + print_mulf8s127_from_b22: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$7f [phi:main::@22->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$7f [phi:main::@22->print_mulf8s127#1] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.a + jsr print_mulf8s127 + jmp breturn + // main::@return + breturn: + // [50] return + rts + str: .text "unsigned@" + str1: .text "signed@" +} + // print_mulf8s127 +// print_mulf8s127(signed byte zeropage(2) a, signed byte zeropage(3) b) +print_mulf8s127: { + .label c = $1d + .label a = 2 + .label b = 3 + // [52] (signed byte) mulf8s127::a#0 ← (signed byte) print_mulf8s127::a#10 -- vbsz1=vbsz2 + lda a + sta mulf8s127.a + // [53] (signed byte) mulf8s127::b#0 ← (signed byte) print_mulf8s127::b#10 -- vbsz1=vbsz2 + lda b + sta mulf8s127.b + // [54] call mulf8s127 + jsr mulf8s127 + // [55] (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#1 -- vwsz1=vwsz2 + lda mulf8s127.return_1 + sta mulf8s127.return + lda mulf8s127.return_1+1 + sta mulf8s127.return+1 + jmp b1 + // print_mulf8s127::@1 + b1: + // [56] (signed word) print_mulf8s127::c#0 ← (signed word) mulf8s127::return#0 -- vwsz1=vwsz2 + lda mulf8s127.return + sta c + lda mulf8s127.return+1 + sta c+1 + // [57] (signed byte) print_sbyte::b#1 ← (signed byte) print_mulf8s127::a#10 -- vbsz1=vbsz2 + lda a + sta print_sbyte.b + // [58] (byte*~) print_char_cursor#150 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [59] call print_sbyte + // [104] phi from print_mulf8s127::@1 to print_sbyte [phi:print_mulf8s127::@1->print_sbyte] + print_sbyte_from_b1: + // [104] phi (byte*) print_char_cursor#127 = (byte*~) print_char_cursor#150 [phi:print_mulf8s127::@1->print_sbyte#0] -- register_copy + // [104] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#1 [phi:print_mulf8s127::@1->print_sbyte#1] -- register_copy + jsr print_sbyte + // [60] phi from print_mulf8s127::@1 to print_mulf8s127::@2 [phi:print_mulf8s127::@1->print_mulf8s127::@2] + b2_from_b1: + jmp b2 + // print_mulf8s127::@2 + b2: + // [61] call print_char + // [86] phi from print_mulf8s127::@2 to print_char [phi:print_mulf8s127::@2->print_char] + print_char_from_b2: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@2->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '*' [phi:print_mulf8s127::@2->print_char#1] -- vbuz1=vbuc1 + lda #'*' + sta print_char.ch + jsr print_char + jmp b3 + // print_mulf8s127::@3 + b3: + // [62] (signed byte) print_sbyte::b#2 ← (signed byte) print_mulf8s127::b#10 -- vbsz1=vbsz2 + lda b + sta print_sbyte.b + // [63] call print_sbyte + // [104] phi from print_mulf8s127::@3 to print_sbyte [phi:print_mulf8s127::@3->print_sbyte] + print_sbyte_from_b3: + // [104] phi (byte*) print_char_cursor#127 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@3->print_sbyte#0] -- register_copy + // [104] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#2 [phi:print_mulf8s127::@3->print_sbyte#1] -- register_copy + jsr print_sbyte + // [64] phi from print_mulf8s127::@3 to print_mulf8s127::@4 [phi:print_mulf8s127::@3->print_mulf8s127::@4] + b4_from_b3: + jmp b4 + // print_mulf8s127::@4 + b4: + // [65] call print_char + // [86] phi from print_mulf8s127::@4 to print_char [phi:print_mulf8s127::@4->print_char] + print_char_from_b4: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@4->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '=' [phi:print_mulf8s127::@4->print_char#1] -- vbuz1=vbuc1 + lda #'=' + sta print_char.ch + jsr print_char + jmp b5 + // print_mulf8s127::@5 + b5: + // [66] (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#0 -- vwsz1=vwsz2 + lda c + sta print_sword.w + lda c+1 + sta print_sword.w+1 + // [67] call print_sword + jsr print_sword + // [68] phi from print_mulf8s127::@5 to print_mulf8s127::@6 [phi:print_mulf8s127::@5->print_mulf8s127::@6] + b6_from_b5: + jmp b6 + // print_mulf8s127::@6 + b6: + // [69] call print_ln + // [71] phi from print_mulf8s127::@6 to print_ln [phi:print_mulf8s127::@6->print_ln] + print_ln_from_b6: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@6->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:print_mulf8s127::@6->print_ln#1] -- register_copy + jsr print_ln + jmp breturn + // print_mulf8s127::@return + breturn: + // [70] return + rts +} + // print_ln +// Print a newline +print_ln: { + // [72] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + // [72] phi (byte*) print_line_cursor#32 = (byte*) print_line_cursor#63 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + // print_ln::@1 + b1: + // [73] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + // [74] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + lda print_line_cursor+1 + cmp print_char_cursor+1 + bcc b1_from_b1 + bne !+ + lda print_line_cursor + cmp print_char_cursor + bcc b1_from_b1 + !: + jmp breturn + // print_ln::@return + breturn: + // [75] return + rts +} + // print_sword +// Print a signed word as HEX +// print_sword(signed word zeropage(6) w) +print_sword: { + .label w = 6 + // [76] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 -- vwsz1_lt_0_then_la1 + lda w+1 + bmi b1_from_print_sword + // [77] phi from print_sword to print_sword::@3 [phi:print_sword->print_sword::@3] + b3_from_print_sword: + jmp b3 + // print_sword::@3 + b3: + // [78] call print_char + // [86] phi from print_sword::@3 to print_char [phi:print_sword::@3->print_char] + print_char_from_b3: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_sword::@3->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) ' ' [phi:print_sword::@3->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + // [79] phi from print_sword::@3 print_sword::@4 to print_sword::@2 [phi:print_sword::@3/print_sword::@4->print_sword::@2] + b2_from_b3: + b2_from_b4: + // [79] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#1 [phi:print_sword::@3/print_sword::@4->print_sword::@2#0] -- register_copy + jmp b2 + // print_sword::@2 + b2: + // [80] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 -- vwuz1=vwuz2 + lda w + sta print_word.w + lda w+1 + sta print_word.w+1 + // [81] call print_word + // [90] phi from print_sword::@2 to print_word [phi:print_sword::@2->print_word] + print_word_from_b2: + // [90] phi (word) print_word::w#2 = (word) print_word::w#0 [phi:print_sword::@2->print_word#0] -- register_copy + jsr print_word + jmp breturn + // print_sword::@return + breturn: + // [82] return + rts + // [83] phi from print_sword to print_sword::@1 [phi:print_sword->print_sword::@1] + b1_from_print_sword: + jmp b1 + // print_sword::@1 + b1: + // [84] call print_char + // [86] phi from print_sword::@1 to print_char [phi:print_sword::@1->print_char] + print_char_from_b1: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_sword::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '-' [phi:print_sword::@1->print_char#1] -- vbuz1=vbuc1 + lda #'-' + sta print_char.ch + jsr print_char + jmp b4 + // print_sword::@4 + b4: + // [85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 -- vwsz1=_neg_vwsz1 + sec + lda #0 + sbc w + sta w + lda #0 + sbc w+1 + sta w+1 + jmp b2_from_b4 +} + // print_char +// Print a single char +// print_char(byte zeropage(8) ch) +print_char: { + .label ch = 8 + // [87] *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 -- _deref_pbuz1=vbuz2 + lda ch + ldy #0 + sta (print_char_cursor),y + // [88] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#80 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + jmp breturn + // print_char::@return + breturn: + // [89] return + rts +} + // print_word +// Print a word as HEX +// print_word(word zeropage($b) w) +print_word: { + .label w = $b + // [91] (byte) print_byte::b#1 ← > (word) print_word::w#2 -- vbuz1=_hi_vwuz2 + lda w+1 + sta print_byte.b + // [92] call print_byte + // [96] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_word->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + // print_word::@1 + b1: + // [93] (byte) print_byte::b#2 ← < (word) print_word::w#2 -- vbuz1=_lo_vwuz2 + lda w + sta print_byte.b + // [94] call print_byte + // [96] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + // print_word::@return + breturn: + // [95] return + rts +} + // print_byte +// Print a byte as HEX +// print_byte(byte zeropage($d) b) +print_byte: { + .label _0 = $1f + .label _2 = $20 + .label b = $d + // [97] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda b + lsr + lsr + lsr + lsr + sta _0 + // [98] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _0 + lda print_hextab,y + sta print_char.ch + // [99] call print_char + // [86] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#131 [phi:print_byte->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + // print_byte::@1 + b1: + // [100] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and b + sta _2 + // [101] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _2 + lda print_hextab,y + sta print_char.ch + // [102] call print_char + // [86] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + // print_byte::@return + breturn: + // [103] return + rts +} + // print_sbyte +// Print a signed byte as HEX +// print_sbyte(signed byte zeropage($e) b) +print_sbyte: { + .label b = $e + // [105] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsz1_lt_0_then_la1 + lda b + bmi b1_from_print_sbyte + // [106] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] + b3_from_print_sbyte: + jmp b3 + // print_sbyte::@3 + b3: + // [107] call print_char + // [86] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] + print_char_from_b3: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#127 [phi:print_sbyte::@3->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + // [108] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] + b2_from_b3: + b2_from_b4: + // [108] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy + jmp b2 + // print_sbyte::@2 + b2: + // [109] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 -- vbuz1=vbuz2 + lda b + sta print_byte.b + // [110] call print_byte + // [96] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + print_byte_from_b2: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_sbyte::@2->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + // print_sbyte::@return + breturn: + // [111] return + rts + // [112] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + b1_from_print_sbyte: + jmp b1 + // print_sbyte::@1 + b1: + // [113] call print_char + // [86] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + print_char_from_b1: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#127 [phi:print_sbyte::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuz1=vbuc1 + lda #'-' + sta print_char.ch + jsr print_char + jmp b4 + // print_sbyte::@4 + b4: + // [114] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsz1=_neg_vbsz1 + lda b + eor #$ff + clc + adc #1 + sta b + jmp b2_from_b4 +} + // mulf8s127 +// mulf8s127(signed byte zeropage($19) a, signed byte zeropage($1a) b) +mulf8s127: { + .label _12 = $25 + .label _13 = $27 + .label _14 = $29 + .label _15 = $2b + .label a = $19 + .label b = $1a + .label return = $1b + .label c = $23 + .label c_1 = $f + .label c_2 = $f + .label return_1 = $f + .label c_3 = $f + .label c_5 = $f + .label c_7 = $f + .label c_11 = $f + // [115] (byte) mulf8u127::a#1 ← (byte)(signed byte) mulf8s127::a#0 -- vbuz1=vbuz2 + lda a + sta mulf8u127.a + // [116] (byte) mulf8u127::b#1 ← (byte)(signed byte) mulf8s127::b#0 -- vbuz1=vbuz2 + lda b + sta mulf8u127.b + // [117] call mulf8u127 + // [136] phi from mulf8s127 to mulf8u127 [phi:mulf8s127->mulf8u127] + mulf8u127_from_mulf8s127: + // [136] phi (byte) mulf8u127::b#2 = (byte) mulf8u127::b#1 [phi:mulf8s127->mulf8u127#0] -- register_copy + // [136] phi (byte) mulf8u127::a#2 = (byte) mulf8u127::a#1 [phi:mulf8s127->mulf8u127#1] -- register_copy + jsr mulf8u127 + // [118] (word) mulf8u127::return#3 ← (word) mulf8u127::return#1 -- vwuz1=vwuz2 + lda mulf8u127.return_1 + sta mulf8u127.return_3 + lda mulf8u127.return_1+1 + sta mulf8u127.return_3+1 + jmp b7 + // mulf8s127::@7 + b7: + // [119] (word) mulf8s127::c#0 ← (word) mulf8u127::return#3 -- vwuz1=vwuz2 + lda mulf8u127.return_3 + sta c + lda mulf8u127.return_3+1 + sta c+1 + // [120] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@9 -- vbsz1_ge_0_then_la1 + lda a + cmp #0 + bpl b9 + jmp b4 + // mulf8s127::@4 + b4: + // [121] (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#0 -- vwsz1=_sword_vbsz2 + lda b + sta _12 + ora #$7f + bmi !+ + lda #0 + !: + sta _12+1 + // [122] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 << (byte) 1 -- vwsz1=vwsz2_rol_1 + lda _12 + asl + sta _13 + lda _12+1 + rol + sta _13+1 + // [123] (signed word) mulf8s127::c#1 ← (signed word)(word) mulf8s127::c#0 - (signed word~) mulf8s127::$13 -- vwsz1=vwsz2_minus_vwsz3 + lda c + sec + sbc _13 + sta c_1 + lda c+1 + sbc _13+1 + sta c_1+1 + // [124] phi from mulf8s127::@4 mulf8s127::@9 to mulf8s127::@1 [phi:mulf8s127::@4/mulf8s127::@9->mulf8s127::@1] + b1_from_b4: + b1_from_b9: + // [124] phi (signed word) mulf8s127::c#5 = (signed word) mulf8s127::c#1 [phi:mulf8s127::@4/mulf8s127::@9->mulf8s127::@1#0] -- register_copy + jmp b1 + // mulf8s127::@1 + b1: + // [125] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@2 -- vbsz1_ge_0_then_la1 + lda b + cmp #0 + bpl b2_from_b1 + jmp b5 + // mulf8s127::@5 + b5: + // [126] (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#0 -- vwsz1=_sword_vbsz2 + lda a + sta _14 + ora #$7f + bmi !+ + lda #0 + !: + sta _14+1 + // [127] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 << (byte) 1 -- vwsz1=vwsz2_rol_1 + lda _14 + asl + sta _15 + lda _14+1 + rol + sta _15+1 + // [128] (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (signed word~) mulf8s127::$15 -- vwsz1=vwsz1_minus_vwsz2 + lda c_2 + sec + sbc _15 + sta c_2 + lda c_2+1 + sbc _15+1 + sta c_2+1 + // [129] phi from mulf8s127::@1 mulf8s127::@5 to mulf8s127::@2 [phi:mulf8s127::@1/mulf8s127::@5->mulf8s127::@2] + b2_from_b1: + b2_from_b5: + // [129] phi (signed word) mulf8s127::c#7 = (signed word) mulf8s127::c#5 [phi:mulf8s127::@1/mulf8s127::@5->mulf8s127::@2#0] -- register_copy + jmp b2 + // mulf8s127::@2 + b2: + // [130] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@3 -- vbsz1_ge_0_then_la1 + lda a + cmp #0 + bpl b3_from_b2 + jmp b8 + // mulf8s127::@8 + b8: + // [131] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@3 -- vbsz1_ge_0_then_la1 + lda b + cmp #0 + bpl b3_from_b8 + jmp b6 + // mulf8s127::@6 + b6: + // [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (signed word) $200 -- vwsz1=vwsz1_minus_vwsc1 + lda c_3 + sec + sbc #<$200 + sta c_3 + lda c_3+1 + sbc #>$200 + sta c_3+1 + // [133] phi from mulf8s127::@2 mulf8s127::@6 to mulf8s127::@3 [phi:mulf8s127::@2/mulf8s127::@6->mulf8s127::@3] + b3_from_b2: + b3_from_b6: + // [133] phi (signed word) mulf8s127::return#1 = (signed word) mulf8s127::c#7 [phi:mulf8s127::@2/mulf8s127::@6->mulf8s127::@3#0] -- register_copy + jmp b3 + // [133] phi from mulf8s127::@8 to mulf8s127::@3 [phi:mulf8s127::@8->mulf8s127::@3] + b3_from_b8: + jmp b3 + // mulf8s127::@3 + b3: + jmp breturn + // mulf8s127::@return + breturn: + // [134] return + rts + // mulf8s127::@9 + b9: + // [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 -- vwsz1=vwsz2 + lda c + sta c_11 + lda c+1 + sta c_11+1 + jmp b1_from_b9 +} + // mulf8u127 +// mulf8u127(byte zeropage($11) a, byte zeropage($12) b) +mulf8u127: { + .label memA = $fc + .label memB = $fd + .label res = $fe + .label resL = $fe + .label resH = $ff + .label a = $11 + .label b = $12 + .label return = $2f + .label return_1 = $2d + .label return_3 = $21 + // [137] *((const byte*) mulf8u127::memA#0) ← (byte) mulf8u127::a#2 -- _deref_pbuc1=vbuz1 + lda a + sta memA + // [138] *((const byte*) mulf8u127::memB#0) ← (byte) mulf8u127::b#2 -- _deref_pbuc1=vbuz1 + lda b + sta memB + // asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } + lda memA + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + ldx memB + sec + sm1: + lda mulf127_sqr1_lo,x + sm2: + sbc mulf127_sqr2_lo,x + sta resL + sm3: + lda mulf127_sqr1_hi,x + sm4: + sbc mulf127_sqr2_hi,x + sta resH + // [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) -- vwuz1=_deref_pwuc1 + lda res + sta return_1 + lda res+1 + sta return_1+1 + jmp breturn + // mulf8u127::@return + breturn: + // [141] return + rts +} + // print_str +// Print a zero-terminated string +// print_str(byte* zeropage($13) str) +print_str: { + .label str = $13 + // [143] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + // [143] phi (byte*) print_char_cursor#122 = (byte*) print_char_cursor#136 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [143] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + // print_str::@1 + b1: + // [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + // print_str::@return + breturn: + // [145] return + rts + // print_str::@2 + b2: + // [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (print_char_cursor),y + // [147] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#122 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + // [148] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} + // print_mulf8u127 +// print_mulf8u127(byte zeropage($15) a, byte zeropage($16) b) +print_mulf8u127: { + .label c = $31 + .label a = $15 + .label b = $16 + // [150] (byte) mulf8u127::a#0 ← (byte) print_mulf8u127::a#8 -- vbuz1=vbuz2 + lda a + sta mulf8u127.a + // [151] (byte) mulf8u127::b#0 ← (byte) print_mulf8u127::b#10 -- vbuz1=vbuz2 + lda b + sta mulf8u127.b + // [152] call mulf8u127 + // [136] phi from print_mulf8u127 to mulf8u127 [phi:print_mulf8u127->mulf8u127] + mulf8u127_from_print_mulf8u127: + // [136] phi (byte) mulf8u127::b#2 = (byte) mulf8u127::b#0 [phi:print_mulf8u127->mulf8u127#0] -- register_copy + // [136] phi (byte) mulf8u127::a#2 = (byte) mulf8u127::a#0 [phi:print_mulf8u127->mulf8u127#1] -- register_copy + jsr mulf8u127 + // [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 -- vwuz1=vwuz2 + lda mulf8u127.return_1 + sta mulf8u127.return + lda mulf8u127.return_1+1 + sta mulf8u127.return+1 + jmp b1 + // print_mulf8u127::@1 + b1: + // [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 -- vwuz1=vwuz2 + lda mulf8u127.return + sta c + lda mulf8u127.return+1 + sta c+1 + // [155] (byte) print_byte::b#3 ← (byte) print_mulf8u127::a#8 -- vbuz1=vbuz2 + lda a + sta print_byte.b + // [156] (byte*~) print_char_cursor#152 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [157] call print_byte + // [96] phi from print_mulf8u127::@1 to print_byte [phi:print_mulf8u127::@1->print_byte] + print_byte_from_b1: + // [96] phi (byte*) print_char_cursor#131 = (byte*~) print_char_cursor#152 [phi:print_mulf8u127::@1->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:print_mulf8u127::@1->print_byte#1] -- register_copy + jsr print_byte + // [158] phi from print_mulf8u127::@1 to print_mulf8u127::@2 [phi:print_mulf8u127::@1->print_mulf8u127::@2] + b2_from_b1: + jmp b2 + // print_mulf8u127::@2 + b2: + // [159] call print_char + // [86] phi from print_mulf8u127::@2 to print_char [phi:print_mulf8u127::@2->print_char] + print_char_from_b2: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@2->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '*' [phi:print_mulf8u127::@2->print_char#1] -- vbuz1=vbuc1 + lda #'*' + sta print_char.ch + jsr print_char + jmp b3 + // print_mulf8u127::@3 + b3: + // [160] (byte) print_byte::b#4 ← (byte) print_mulf8u127::b#10 -- vbuz1=vbuz2 + lda b + sta print_byte.b + // [161] call print_byte + // [96] phi from print_mulf8u127::@3 to print_byte [phi:print_mulf8u127::@3->print_byte] + print_byte_from_b3: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@3->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:print_mulf8u127::@3->print_byte#1] -- register_copy + jsr print_byte + // [162] phi from print_mulf8u127::@3 to print_mulf8u127::@4 [phi:print_mulf8u127::@3->print_mulf8u127::@4] + b4_from_b3: + jmp b4 + // print_mulf8u127::@4 + b4: + // [163] call print_char + // [86] phi from print_mulf8u127::@4 to print_char [phi:print_mulf8u127::@4->print_char] + print_char_from_b4: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@4->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '=' [phi:print_mulf8u127::@4->print_char#1] -- vbuz1=vbuc1 + lda #'=' + sta print_char.ch + jsr print_char + jmp b5 + // print_mulf8u127::@5 + b5: + // [164] (word) print_word::w#1 ← (word) print_mulf8u127::c#0 -- vwuz1=vwuz2 + lda c + sta print_word.w + lda c+1 + sta print_word.w+1 + // [165] call print_word + // [90] phi from print_mulf8u127::@5 to print_word [phi:print_mulf8u127::@5->print_word] + print_word_from_b5: + // [90] phi (word) print_word::w#2 = (word) print_word::w#1 [phi:print_mulf8u127::@5->print_word#0] -- register_copy + jsr print_word + // [166] phi from print_mulf8u127::@5 to print_mulf8u127::@6 [phi:print_mulf8u127::@5->print_mulf8u127::@6] + b6_from_b5: + jmp b6 + // print_mulf8u127::@6 + b6: + // [167] call print_ln + // [71] phi from print_mulf8u127::@6 to print_ln [phi:print_mulf8u127::@6->print_ln] + print_ln_from_b6: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@6->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:print_mulf8u127::@6->print_ln#1] -- register_copy + jsr print_ln + jmp breturn + // print_mulf8u127::@return + breturn: + // [168] return + rts +} + // print_cls +// Clear the screen. Also resets current line/char cursor. +print_cls: { + // [170] call memset + // [172] phi from print_cls to memset [phi:print_cls->memset] + memset_from_print_cls: + jsr memset + jmp breturn + // print_cls::@return + breturn: + // [171] return + rts +} + // memset +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +memset: { + .const c = ' ' + .const num = $3e8 + .label str = $400 + .label end = str+num + .label dst = $17 + // [173] phi from memset to memset::@1 [phi:memset->memset::@1] + b1_from_memset: + // [173] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + lda #str + sta dst+1 + jmp b1 + // [173] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1] + b1_from_b1: + // [173] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy + jmp b1 + // memset::@1 + b1: + // [174] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y + // [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b1_from_b1 + lda dst + cmp #round((i/127*i/127)*127/4) + // g(x) = <((( x - 255) * ( x - 255 ))/4) + .align $100 +mulf127_sqr2_lo: +.fill 512, round(((i-255)/127*(i-255)/127)*127/4) + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [26] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1 [ print_char_cursor#143 print_line_cursor#1 ] ( main:2 [ print_char_cursor#143 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [55] (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#1 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ print_mulf8s127::a#10 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Statement [56] (signed word) print_mulf8s127::c#0 ← (signed word) mulf8s127::return#0 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] ) always clobbers reg byte a +Statement [58] (byte*~) print_char_cursor#150 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +Statement [66] (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#0 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [73] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 [ print_line_cursor#1 print_char_cursor#123 ] ( main:2::print_ln:9 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_ln:29 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:31::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:33::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:35::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:37::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:39::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:41::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:43::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:45::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:47::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:49::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:11::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:13::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:15::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:17::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:19::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:21::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:23::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:25::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] ) always clobbers reg byte a +Statement [74] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#123 ] ( main:2::print_ln:9 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_ln:29 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:31::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:33::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:35::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:37::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:39::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:41::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:43::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:45::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:47::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:49::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:11::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:13::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:15::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:17::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:19::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:21::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:23::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:25::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] ) always clobbers reg byte a +Statement [76] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#19 ] ( main:2::print_mulf8s127:31::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:33::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:35::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:37::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:39::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:41::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:43::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:45::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:47::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:49::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [80] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::print_mulf8s127:31::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:33::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:35::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:37::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:39::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:41::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:43::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:45::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:47::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:49::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a +Statement [85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::print_mulf8s127:31::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:33::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:35::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:37::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:39::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:41::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:43::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:45::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:47::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:49::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a +Statement [87] *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 [ print_char_cursor#80 ] ( main:2::print_mulf8s127:31::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +Statement [91] (byte) print_byte::b#1 ← > (word) print_word::w#2 [ print_char_cursor#19 print_word::w#2 print_byte::b#1 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:11::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:13::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:15::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:17::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:19::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:21::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:23::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:25::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] ) always clobbers reg byte a +Statement [93] (byte) print_byte::b#2 ← < (word) print_word::w#2 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:11::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:13::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:15::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:17::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:19::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:21::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:23::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:25::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [97] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#131 print_byte::b#5 print_byte::$0 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Statement [100] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [114] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::print_mulf8s127:31::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:33::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:35::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:37::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:39::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:41::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:43::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:45::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:47::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:49::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:31::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:33::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:35::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:37::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:39::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:41::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:43::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:45::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:47::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:49::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a +Statement [118] (word) mulf8u127::return#3 ← (word) mulf8u127::return#1 [ mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ mulf8s127::a#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ mulf8s127::b#0 ] +Statement [119] (word) mulf8s127::c#0 ← (word) mulf8u127::return#3 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] ) always clobbers reg byte a +Statement [121] (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] ) always clobbers reg byte a +Statement [122] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 << (byte) 1 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] ) always clobbers reg byte a +Statement [123] (signed word) mulf8s127::c#1 ← (signed word)(word) mulf8s127::c#0 - (signed word~) mulf8s127::$13 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] ) always clobbers reg byte a +Statement [126] (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] ) always clobbers reg byte a +Statement [127] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 << (byte) 1 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] ) always clobbers reg byte a +Statement [128] (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (signed word~) mulf8s127::$15 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] ) always clobbers reg byte a +Statement [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (signed word) $200 [ mulf8s127::c#3 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] ) always clobbers reg byte a +Statement [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ) always clobbers reg byte a +Statement asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ print_mulf8s127::a#10 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:25 [ mulf8s127::a#0 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:26 [ mulf8s127::b#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ print_mulf8u127::a#8 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:21 [ print_mulf8u127::a#8 ] +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Statement [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) [ mulf8u127::return#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:33::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:35::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:37::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:39::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:41::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:43::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:45::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:47::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:49::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8u127:11::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:13::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:15::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:17::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:19::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:21::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:23::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:25::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] ) always clobbers reg byte a +Statement [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ) always clobbers reg byte a +Statement [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a +Statement [156] (byte*~) print_char_cursor#152 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a +Statement [164] (word) print_word::w#1 ← (word) print_mulf8u127::c#0 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] ) always clobbers reg byte a +Statement [174] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:170 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 [ memset::dst#1 ] ( main:2::print_cls:5::memset:170 [ memset::dst#1 ] ) always clobbers reg byte a +Statement [26] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1 [ print_char_cursor#143 print_line_cursor#1 ] ( main:2 [ print_char_cursor#143 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [55] (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#1 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::return#0 ] ) always clobbers reg byte a +Statement [56] (signed word) print_mulf8s127::c#0 ← (signed word) mulf8s127::return#0 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 print_mulf8s127::c#0 ] ) always clobbers reg byte a +Statement [58] (byte*~) print_char_cursor#150 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#1 print_char_cursor#150 ] ) always clobbers reg byte a +Statement [66] (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#0 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] ( main:2::print_mulf8s127:31 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:33 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:35 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:37 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:39 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:41 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:43 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:45 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:47 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:49 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [73] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 [ print_line_cursor#1 print_char_cursor#123 ] ( main:2::print_ln:9 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_ln:29 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:31::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:33::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:35::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:37::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:39::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:41::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:43::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:45::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:47::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:49::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:11::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:13::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:15::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:17::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:19::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:21::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:23::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:25::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] ) always clobbers reg byte a +Statement [74] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#123 ] ( main:2::print_ln:9 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_ln:29 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:31::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:33::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:35::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:37::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:39::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:41::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:43::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:45::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:47::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8s127:49::print_ln:69 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:11::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:13::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:15::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:17::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:19::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:21::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:23::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] main:2::print_mulf8u127:25::print_ln:167 [ print_line_cursor#1 print_char_cursor#123 ] ) always clobbers reg byte a +Statement [76] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 [ print_sword::w#1 print_char_cursor#19 ] ( main:2::print_mulf8s127:31::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:33::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:35::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:37::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:39::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:41::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:43::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:45::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:47::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] main:2::print_mulf8s127:49::print_sword:67 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#19 ] ) always clobbers reg byte a +Statement [80] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 [ print_char_cursor#19 print_word::w#0 ] ( main:2::print_mulf8s127:31::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:33::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:35::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:37::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:39::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:41::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:43::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:45::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:47::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] main:2::print_mulf8s127:49::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a +Statement [85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::print_mulf8s127:31::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:33::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:35::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:37::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:39::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:41::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:43::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:45::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:47::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] main:2::print_mulf8s127:49::print_sword:67 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a +Statement [87] *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 [ print_char_cursor#80 ] ( main:2::print_mulf8s127:31::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_char:61 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_char:65 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_char:78 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_char:84 [ print_line_cursor#1 print_sword::w#1 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92::print_char:99 [ print_line_cursor#1 print_word::w#2 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94::print_char:99 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110::print_char:99 [ print_line_cursor#1 print_mulf8s127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:157::print_char:99 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:161::print_char:99 [ print_line_cursor#1 print_mulf8u127::c#0 print_byte::b#5 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92::print_char:102 [ print_line_cursor#1 print_word::w#2 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94::print_char:102 [ print_line_cursor#1 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110::print_char:102 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:157::print_char:102 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_byte:161::print_char:102 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_char:107 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_char:107 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:59::print_char:113 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:31::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:33::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:35::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:37::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:39::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:41::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:43::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:45::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:47::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8s127:49::print_sbyte:63::print_char:113 [ print_line_cursor#1 print_mulf8s127::c#0 print_sbyte::b#3 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_char:159 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:11::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:13::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:15::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:17::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:19::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:21::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:23::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] main:2::print_mulf8u127:25::print_char:163 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#80 ] ) always clobbers reg byte y +Statement [91] (byte) print_byte::b#1 ← > (word) print_word::w#2 [ print_char_cursor#19 print_word::w#2 print_byte::b#1 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:11::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:13::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:15::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:17::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:19::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:21::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:23::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] main:2::print_mulf8u127:25::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_word::w#2 print_byte::b#1 ] ) always clobbers reg byte a +Statement [93] (byte) print_byte::b#2 ← < (word) print_word::w#2 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:11::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:13::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:15::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:17::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:19::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:21::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:23::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::print_mulf8u127:25::print_word:165 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [97] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#131 print_byte::b#5 print_byte::$0 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:11::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:13::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:15::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:17::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:19::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:21::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:23::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] main:2::print_mulf8u127:25::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#131 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a +Statement [100] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_word:165::print_byte:92 [ print_line_cursor#1 print_word::w#2 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:31::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sword:67::print_word:81::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_word:165::print_byte:94 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:31::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sbyte:59::print_byte:110 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:31::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:33::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:35::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:37::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:39::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:41::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:43::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:45::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:47::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8s127:49::print_sbyte:63::print_byte:110 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_byte:157 [ print_line_cursor#1 print_mulf8u127::b#10 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:11::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:13::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:15::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:17::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:19::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:21::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:23::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] main:2::print_mulf8u127:25::print_byte:161 [ print_line_cursor#1 print_mulf8u127::c#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [114] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::print_mulf8s127:31::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:33::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:35::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:37::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:39::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:41::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:43::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:45::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:47::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:49::print_sbyte:59 [ print_line_cursor#1 print_mulf8s127::b#10 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:31::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:33::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:35::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:37::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:39::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:41::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:43::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:45::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:47::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::print_mulf8s127:49::print_sbyte:63 [ print_line_cursor#1 print_mulf8s127::c#0 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a +Statement [118] (word) mulf8u127::return#3 ← (word) mulf8u127::return#1 [ mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#3 ] ) always clobbers reg byte a +Statement [119] (word) mulf8s127::c#0 ← (word) mulf8u127::return#3 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 ] ) always clobbers reg byte a +Statement [121] (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$12 ] ) always clobbers reg byte a +Statement [122] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 << (byte) 1 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#0 mulf8s127::$13 ] ) always clobbers reg byte a +Statement [123] (signed word) mulf8s127::c#1 ← (signed word)(word) mulf8s127::c#0 - (signed word~) mulf8s127::$13 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#1 ] ) always clobbers reg byte a +Statement [126] (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$14 ] ) always clobbers reg byte a +Statement [127] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 << (byte) 1 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#5 mulf8s127::$15 ] ) always clobbers reg byte a +Statement [128] (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (signed word~) mulf8s127::$15 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#2 ] ) always clobbers reg byte a +Statement [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (signed word) $200 [ mulf8s127::c#3 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::c#3 ] ) always clobbers reg byte a +Statement [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 [ mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ( main:2::print_mulf8s127:31::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:33::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:35::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:37::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:39::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:41::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:43::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:45::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:47::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] main:2::print_mulf8s127:49::mulf8s127:54 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8s127::c#11 ] ) always clobbers reg byte a +Statement asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } always clobbers reg byte a reg byte x +Statement [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) [ mulf8u127::return#1 ] ( main:2::print_mulf8s127:31::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:33::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:35::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:37::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:39::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:41::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:43::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:45::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:47::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8s127:49::mulf8s127:54::mulf8u127:117 [ print_line_cursor#1 print_mulf8s127::a#10 print_mulf8s127::b#10 mulf8s127::a#0 mulf8s127::b#0 mulf8u127::return#1 ] main:2::print_mulf8u127:11::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:13::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:15::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:17::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:19::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:21::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:23::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] main:2::print_mulf8u127:25::mulf8u127:152 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#1 ] ) always clobbers reg byte a +Statement [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) [ print_char_cursor#122 print_str::str#3 ] ( main:2::print_str:7 [ print_char_cursor#122 print_str::str#3 ] main:2::print_str:27 [ print_line_cursor#1 print_char_cursor#122 print_str::str#3 ] ) always clobbers reg byte a reg byte y +Statement [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 mulf8u127::return#0 ] ) always clobbers reg byte a +Statement [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_mulf8u127::a#8 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a +Statement [156] (byte*~) print_char_cursor#152 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#152 print_mulf8u127::b#10 print_mulf8u127::c#0 ] ) always clobbers reg byte a +Statement [164] (word) print_word::w#1 ← (word) print_mulf8u127::c#0 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] ( main:2::print_mulf8u127:11 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:13 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:15 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:17 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:19 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:21 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:23 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] main:2::print_mulf8u127:25 [ print_line_cursor#1 print_char_cursor#19 print_word::w#1 ] ) always clobbers reg byte a +Statement [174] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:170 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 [ memset::dst#1 ] ( main:2::print_cls:5::memset:170 [ memset::dst#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ print_mulf8s127::a#10 ] : zp ZP_BYTE:2 , reg byte y , +Potential registers zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] : zp ZP_BYTE:3 , +Potential registers zp ZP_WORD:4 [ print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_BYTE:8 [ print_char::ch#10 print_char::ch#4 print_char::ch#5 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:9 [ print_char_cursor#80 print_char_cursor#131 print_char_cursor#123 print_char_cursor#122 print_char_cursor#19 print_char_cursor#127 print_char_cursor#152 print_char_cursor#150 print_char_cursor#136 print_char_cursor#143 print_char_cursor#1 ] : zp ZP_WORD:9 , +Potential registers zp ZP_WORD:11 [ print_word::w#2 print_word::w#1 print_word::w#0 ] : zp ZP_WORD:11 , +Potential registers zp ZP_BYTE:13 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] : zp ZP_BYTE:13 , reg byte x , +Potential registers zp ZP_BYTE:14 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] : zp ZP_BYTE:14 , reg byte x , +Potential registers zp ZP_WORD:15 [ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 ] : zp ZP_WORD:15 , +Potential registers zp ZP_BYTE:17 [ mulf8u127::a#2 mulf8u127::a#1 mulf8u127::a#0 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:18 [ mulf8u127::b#2 mulf8u127::b#1 mulf8u127::b#0 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:19 [ print_str::str#3 print_str::str#5 print_str::str#0 ] : zp ZP_WORD:19 , +Potential registers zp ZP_BYTE:21 [ print_mulf8u127::a#8 ] : zp ZP_BYTE:21 , reg byte y , +Potential registers zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] : zp ZP_BYTE:22 , +Potential registers zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:23 , +Potential registers zp ZP_BYTE:25 [ mulf8s127::a#0 ] : zp ZP_BYTE:25 , reg byte y , +Potential registers zp ZP_BYTE:26 [ mulf8s127::b#0 ] : zp ZP_BYTE:26 , reg byte y , +Potential registers zp ZP_WORD:27 [ mulf8s127::return#0 ] : zp ZP_WORD:27 , +Potential registers zp ZP_WORD:29 [ print_mulf8s127::c#0 ] : zp ZP_WORD:29 , +Potential registers zp ZP_BYTE:31 [ print_byte::$0 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ print_byte::$2 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:33 [ mulf8u127::return#3 ] : zp ZP_WORD:33 , +Potential registers zp ZP_WORD:35 [ mulf8s127::c#0 ] : zp ZP_WORD:35 , +Potential registers zp ZP_WORD:37 [ mulf8s127::$12 ] : zp ZP_WORD:37 , +Potential registers zp ZP_WORD:39 [ mulf8s127::$13 ] : zp ZP_WORD:39 , +Potential registers zp ZP_WORD:41 [ mulf8s127::$14 ] : zp ZP_WORD:41 , +Potential registers zp ZP_WORD:43 [ mulf8s127::$15 ] : zp ZP_WORD:43 , +Potential registers zp ZP_WORD:45 [ mulf8u127::return#1 ] : zp ZP_WORD:45 , +Potential registers zp ZP_WORD:47 [ mulf8u127::return#0 ] : zp ZP_WORD:47 , +Potential registers zp ZP_WORD:49 [ print_mulf8u127::c#0 ] : zp ZP_WORD:49 , + +REGISTER UPLIFT SCOPES +Uplift Scope [] 55.23: zp ZP_WORD:9 [ print_char_cursor#80 print_char_cursor#131 print_char_cursor#123 print_char_cursor#122 print_char_cursor#19 print_char_cursor#127 print_char_cursor#152 print_char_cursor#150 print_char_cursor#136 print_char_cursor#143 print_char_cursor#1 ] 32.54: zp ZP_WORD:4 [ print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] +Uplift Scope [mulf8s127] 22.67: zp ZP_WORD:15 [ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 ] 4: zp ZP_WORD:27 [ mulf8s127::return#0 ] 4: zp ZP_WORD:37 [ mulf8s127::$12 ] 4: zp ZP_WORD:39 [ mulf8s127::$13 ] 4: zp ZP_WORD:41 [ mulf8s127::$14 ] 4: zp ZP_WORD:43 [ mulf8s127::$15 ] 0.5: zp ZP_WORD:35 [ mulf8s127::c#0 ] 0.33: zp ZP_BYTE:25 [ mulf8s127::a#0 ] 0.33: zp ZP_BYTE:26 [ mulf8s127::b#0 ] +Uplift Scope [print_str] 35.5: zp ZP_WORD:19 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplift Scope [memset] 33: zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [mulf8u127] 11: zp ZP_BYTE:18 [ mulf8u127::b#2 mulf8u127::b#1 mulf8u127::b#0 ] 10: zp ZP_BYTE:17 [ mulf8u127::a#2 mulf8u127::a#1 mulf8u127::a#0 ] 4: zp ZP_WORD:33 [ mulf8u127::return#3 ] 4: zp ZP_WORD:47 [ mulf8u127::return#0 ] 1.5: zp ZP_WORD:45 [ mulf8u127::return#1 ] +Uplift Scope [print_byte] 21.5: zp ZP_BYTE:13 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] 4: zp ZP_BYTE:31 [ print_byte::$0 ] 4: zp ZP_BYTE:32 [ print_byte::$2 ] +Uplift Scope [print_sbyte] 15.67: zp ZP_BYTE:14 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +Uplift Scope [print_char] 14: zp ZP_BYTE:8 [ print_char::ch#10 print_char::ch#4 print_char::ch#5 ] +Uplift Scope [print_word] 10.67: zp ZP_WORD:11 [ print_word::w#2 print_word::w#1 print_word::w#0 ] +Uplift Scope [print_sword] 9.33: zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplift Scope [print_mulf8u127] 0.67: zp ZP_BYTE:21 [ print_mulf8u127::a#8 ] 0.4: zp ZP_WORD:49 [ print_mulf8u127::c#0 ] 0.36: zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Uplift Scope [print_mulf8s127] 0.67: zp ZP_BYTE:2 [ print_mulf8s127::a#10 ] 0.4: zp ZP_WORD:29 [ print_mulf8s127::c#0 ] 0.36: zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Uplift Scope [RADIX] +Uplift Scope [print_ln] +Uplift Scope [print_cls] +Uplift Scope [main] + +Uplifting [] best 3057 combination zp ZP_WORD:9 [ print_char_cursor#80 print_char_cursor#131 print_char_cursor#123 print_char_cursor#122 print_char_cursor#19 print_char_cursor#127 print_char_cursor#152 print_char_cursor#150 print_char_cursor#136 print_char_cursor#143 print_char_cursor#1 ] zp ZP_WORD:4 [ print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] +Uplifting [mulf8s127] best 3044 combination zp ZP_WORD:15 [ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 ] zp ZP_WORD:27 [ mulf8s127::return#0 ] zp ZP_WORD:37 [ mulf8s127::$12 ] zp ZP_WORD:39 [ mulf8s127::$13 ] zp ZP_WORD:41 [ mulf8s127::$14 ] zp ZP_WORD:43 [ mulf8s127::$15 ] zp ZP_WORD:35 [ mulf8s127::c#0 ] reg byte y [ mulf8s127::a#0 ] zp ZP_BYTE:26 [ mulf8s127::b#0 ] +Uplifting [print_str] best 3044 combination zp ZP_WORD:19 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplifting [memset] best 3044 combination zp ZP_WORD:23 [ memset::dst#2 memset::dst#1 ] +Uplifting [mulf8u127] best 3028 combination reg byte x [ mulf8u127::b#2 mulf8u127::b#1 mulf8u127::b#0 ] reg byte a [ mulf8u127::a#2 mulf8u127::a#1 mulf8u127::a#0 ] zp ZP_WORD:33 [ mulf8u127::return#3 ] zp ZP_WORD:47 [ mulf8u127::return#0 ] zp ZP_WORD:45 [ mulf8u127::return#1 ] +Uplifting [print_byte] best 3005 combination reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_sbyte] best 2993 combination reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +Uplifting [print_char] best 2960 combination reg byte a [ print_char::ch#10 print_char::ch#4 print_char::ch#5 ] +Uplifting [print_word] best 2960 combination zp ZP_WORD:11 [ print_word::w#2 print_word::w#1 print_word::w#0 ] +Uplifting [print_sword] best 2960 combination zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [print_mulf8u127] best 2936 combination reg byte y [ print_mulf8u127::a#8 ] zp ZP_WORD:49 [ print_mulf8u127::c#0 ] zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Uplifting [print_mulf8s127] best 2904 combination reg byte y [ print_mulf8s127::a#10 ] zp ZP_WORD:29 [ print_mulf8s127::c#0 ] zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Uplifting [RADIX] best 2904 combination +Uplifting [print_ln] best 2904 combination +Uplifting [print_cls] best 2904 combination +Uplifting [main] best 2904 combination +Attempting to uplift remaining variables inzp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Uplifting [print_mulf8s127] best 2904 combination zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] +Attempting to uplift remaining variables inzp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Uplifting [print_mulf8u127] best 2904 combination zp ZP_BYTE:22 [ print_mulf8u127::b#10 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ mulf8s127::b#0 ] +Uplifting [mulf8s127] best 2904 combination zp ZP_BYTE:26 [ mulf8s127::b#0 ] +Coalescing zero page register with common assignment [ zp ZP_WORD:15 [ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 ] ] with [ zp ZP_WORD:35 [ mulf8s127::c#0 ] ] - score: 2 +Coalescing zero page register with common assignment [ zp ZP_BYTE:3 [ print_mulf8s127::b#10 ] ] with [ zp ZP_BYTE:26 [ mulf8s127::b#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp ZP_WORD:11 [ print_word::w#2 print_word::w#1 print_word::w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#2 print_word::w#1 print_word::w#0 ] ] with [ zp ZP_WORD:29 [ print_mulf8s127::c#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:15 [ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 mulf8s127::c#0 ] ] with [ zp ZP_WORD:27 [ mulf8s127::return#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:33 [ mulf8u127::return#3 ] ] with [ zp ZP_WORD:45 [ mulf8u127::return#1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ mulf8s127::$12 ] ] with [ zp ZP_WORD:39 [ mulf8s127::$13 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:41 [ mulf8s127::$14 ] ] with [ zp ZP_WORD:43 [ mulf8s127::$15 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:47 [ mulf8u127::return#0 ] ] with [ zp ZP_WORD:49 [ print_mulf8u127::c#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#2 print_word::w#1 print_word::w#0 print_mulf8s127::c#0 ] ] with [ zp ZP_WORD:15 [ mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 mulf8s127::c#0 mulf8s127::return#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#2 print_word::w#1 print_word::w#0 print_mulf8s127::c#0 mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 mulf8s127::c#0 mulf8s127::return#0 ] ] with [ zp ZP_WORD:47 [ mulf8u127::return#0 print_mulf8u127::c#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#2 print_word::w#1 print_word::w#0 print_mulf8s127::c#0 mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 mulf8s127::c#0 mulf8s127::return#0 mulf8u127::return#0 print_mulf8u127::c#0 ] ] with [ zp ZP_WORD:33 [ mulf8u127::return#3 mulf8u127::return#1 ] ] - score: 2 +Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ print_mulf8s127::b#10 mulf8s127::b#0 ] +Allocated (was zp ZP_WORD:4) zp ZP_WORD:3 [ print_line_cursor#32 print_line_cursor#63 print_line_cursor#1 ] +Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#2 print_word::w#1 print_word::w#0 print_mulf8s127::c#0 mulf8s127::return#1 mulf8s127::c#7 mulf8s127::c#5 mulf8s127::c#1 mulf8s127::c#11 mulf8s127::c#2 mulf8s127::c#3 mulf8s127::c#0 mulf8s127::return#0 mulf8u127::return#0 print_mulf8u127::c#0 mulf8u127::return#3 mulf8u127::return#1 ] +Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ print_char_cursor#80 print_char_cursor#131 print_char_cursor#123 print_char_cursor#122 print_char_cursor#19 print_char_cursor#127 print_char_cursor#152 print_char_cursor#150 print_char_cursor#136 print_char_cursor#143 print_char_cursor#1 ] +Allocated (was zp ZP_WORD:19) zp ZP_WORD:9 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:11 [ print_mulf8u127::b#10 ] +Allocated (was zp ZP_WORD:23) zp ZP_WORD:12 [ memset::dst#2 memset::dst#1 ] +Allocated (was zp ZP_WORD:37) zp ZP_WORD:14 [ mulf8s127::$12 mulf8s127::$13 ] +Allocated (was zp ZP_WORD:41) zp ZP_WORD:16 [ mulf8s127::$14 mulf8s127::$15 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// An implementation of seriously fast multiply for integer values in the interval [-1;1] with the best possible precision +// NOTE: So far unsuccessful - since the handling of sign and values where a+b>sqrt2) makes the code slower than regular fast multiply +// In this model 255 binary represents 1.0 - meaning that 255*255 = 255 +// Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 +// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label print_char_cursor = 7 + .label print_line_cursor = 3 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + // [5] call print_cls + // [169] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + // [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + // main::@1 + b1: + // [7] call print_str + // [142] phi from main::@1 to print_str [phi:main::@1->print_str] + print_str_from_b1: + // [142] phi (byte*) print_char_cursor#136 = (byte*) 1024 [phi:main::@1->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + // [142] phi (byte*) print_str::str#5 = (const string) main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + // main::@2 + b2: + // [9] call print_ln + // [71] phi from main::@2 to print_ln [phi:main::@2->print_ln] + print_ln_from_b2: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#122 [phi:main::@2->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) 1024 [phi:main::@2->print_ln#1] -- pbuz1=pbuc1 + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + jmp b3 + // main::@3 + b3: + // [11] call print_mulf8u127 + // [149] phi from main::@3 to print_mulf8u127 [phi:main::@3->print_mulf8u127] + print_mulf8u127_from_b3: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) 0 [phi:main::@3->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) 0 [phi:main::@3->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #0 + jsr print_mulf8u127 + // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + jmp b4 + // main::@4 + b4: + // [13] call print_mulf8u127 + // [149] phi from main::@4 to print_mulf8u127 [phi:main::@4->print_mulf8u127] + print_mulf8u127_from_b4: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@4->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $7f [phi:main::@4->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$7f + jsr print_mulf8u127 + // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + b5_from_b4: + jmp b5 + // main::@5 + b5: + // [15] call print_mulf8u127 + // [149] phi from main::@5 to print_mulf8u127 [phi:main::@5->print_mulf8u127] + print_mulf8u127_from_b5: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $40 [phi:main::@5->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$40 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@5->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$40 + jsr print_mulf8u127 + // [16] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + jmp b6 + // main::@6 + b6: + // [17] call print_mulf8u127 + // [149] phi from main::@6 to print_mulf8u127 [phi:main::@6->print_mulf8u127] + print_mulf8u127_from_b6: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@6->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@6->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$40 + jsr print_mulf8u127 + // [18] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + jmp b7 + // main::@7 + b7: + // [19] call print_mulf8u127 + // [149] phi from main::@7 to print_mulf8u127 [phi:main::@7->print_mulf8u127] + print_mulf8u127_from_b7: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $c0 [phi:main::@7->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$c0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@7->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$40 + jsr print_mulf8u127 + // [20] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + b8_from_b7: + jmp b8 + // main::@8 + b8: + // [21] call print_mulf8u127 + // [149] phi from main::@8 to print_mulf8u127 [phi:main::@8->print_mulf8u127] + print_mulf8u127_from_b8: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@8->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $ff [phi:main::@8->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$ff + jsr print_mulf8u127 + // [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + b9_from_b8: + jmp b9 + // main::@9 + b9: + // [23] call print_mulf8u127 + // [149] phi from main::@9 to print_mulf8u127 [phi:main::@9->print_mulf8u127] + print_mulf8u127_from_b9: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $c0 [phi:main::@9->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$c0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $c0 [phi:main::@9->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$c0 + jsr print_mulf8u127 + // [24] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + b10_from_b9: + jmp b10 + // main::@10 + b10: + // [25] call print_mulf8u127 + // [149] phi from main::@10 to print_mulf8u127 [phi:main::@10->print_mulf8u127] + print_mulf8u127_from_b10: + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $ff [phi:main::@10->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$ff + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $ff [phi:main::@10->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$ff + jsr print_mulf8u127 + jmp b11 + // main::@11 + b11: + // [26] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [27] call print_str + // [142] phi from main::@11 to print_str [phi:main::@11->print_str] + print_str_from_b11: + // [142] phi (byte*) print_char_cursor#136 = (byte*~) print_char_cursor#143 [phi:main::@11->print_str#0] -- register_copy + // [142] phi (byte*) print_str::str#5 = (const string) main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + b12_from_b11: + jmp b12 + // main::@12 + b12: + // [29] call print_ln + // [71] phi from main::@12 to print_ln [phi:main::@12->print_ln] + print_ln_from_b12: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#122 [phi:main::@12->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:main::@12->print_ln#1] -- register_copy + jsr print_ln + // [30] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + b13_from_b12: + jmp b13 + // main::@13 + b13: + // [31] call print_mulf8s127 + // [51] phi from main::@13 to print_mulf8s127 [phi:main::@13->print_mulf8s127] + print_mulf8s127_from_b13: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) 0 [phi:main::@13->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #0 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) 0 [phi:main::@13->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #0 + jsr print_mulf8s127 + // [32] phi from main::@13 to main::@14 [phi:main::@13->main::@14] + b14_from_b13: + jmp b14 + // main::@14 + b14: + // [33] call print_mulf8s127 + // [51] phi from main::@14 to print_mulf8s127 [phi:main::@14->print_mulf8s127] + print_mulf8s127_from_b14: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $40 [phi:main::@14->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@14->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$40 + jsr print_mulf8s127 + // [34] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + b15_from_b14: + jmp b15 + // main::@15 + b15: + // [35] call print_mulf8s127 + // [51] phi from main::@15 to print_mulf8s127 [phi:main::@15->print_mulf8s127] + print_mulf8s127_from_b15: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@15->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@15->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$40 + jsr print_mulf8s127 + // [36] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + b16_from_b15: + jmp b16 + // main::@16 + b16: + // [37] call print_mulf8s127 + // [51] phi from main::@16 to print_mulf8s127 [phi:main::@16->print_mulf8s127] + print_mulf8s127_from_b16: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $40 [phi:main::@16->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$40 [phi:main::@16->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #-$40 + jsr print_mulf8s127 + // [38] phi from main::@16 to main::@17 [phi:main::@16->main::@17] + b17_from_b16: + jmp b17 + // main::@17 + b17: + // [39] call print_mulf8s127 + // [51] phi from main::@17 to print_mulf8s127 [phi:main::@17->print_mulf8s127] + print_mulf8s127_from_b17: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$40 [phi:main::@17->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@17->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$40 + jsr print_mulf8s127 + // [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + b18_from_b17: + jmp b18 + // main::@18 + b18: + // [41] call print_mulf8s127 + // [51] phi from main::@18 to print_mulf8s127 [phi:main::@18->print_mulf8s127] + print_mulf8s127_from_b18: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$40 [phi:main::@18->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$40 [phi:main::@18->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #-$40 + jsr print_mulf8s127 + // [42] phi from main::@18 to main::@19 [phi:main::@18->main::@19] + b19_from_b18: + jmp b19 + // main::@19 + b19: + // [43] call print_mulf8s127 + // [51] phi from main::@19 to print_mulf8s127 [phi:main::@19->print_mulf8s127] + print_mulf8s127_from_b19: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@19->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $7f [phi:main::@19->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$7f + jsr print_mulf8s127 + // [44] phi from main::@19 to main::@20 [phi:main::@19->main::@20] + b20_from_b19: + jmp b20 + // main::@20 + b20: + // [45] call print_mulf8s127 + // [51] phi from main::@20 to print_mulf8s127 [phi:main::@20->print_mulf8s127] + print_mulf8s127_from_b20: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@20->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$7f [phi:main::@20->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #-$7f + jsr print_mulf8s127 + // [46] phi from main::@20 to main::@21 [phi:main::@20->main::@21] + b21_from_b20: + jmp b21 + // main::@21 + b21: + // [47] call print_mulf8s127 + // [51] phi from main::@21 to print_mulf8s127 [phi:main::@21->print_mulf8s127] + print_mulf8s127_from_b21: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$7f [phi:main::@21->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $7f [phi:main::@21->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$7f + jsr print_mulf8s127 + // [48] phi from main::@21 to main::@22 [phi:main::@21->main::@22] + b22_from_b21: + jmp b22 + // main::@22 + b22: + // [49] call print_mulf8s127 + // [51] phi from main::@22 to print_mulf8s127 [phi:main::@22->print_mulf8s127] + print_mulf8s127_from_b22: + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$7f [phi:main::@22->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$7f [phi:main::@22->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #-$7f + jsr print_mulf8s127 + jmp breturn + // main::@return + breturn: + // [50] return + rts + str: .text "unsigned@" + str1: .text "signed@" +} + // print_mulf8s127 +// print_mulf8s127(signed byte register(Y) a, signed byte zeropage(2) b) +print_mulf8s127: { + .label c = 5 + .label b = 2 + // [52] (signed byte) mulf8s127::a#0 ← (signed byte) print_mulf8s127::a#10 + // [53] (signed byte) mulf8s127::b#0 ← (signed byte) print_mulf8s127::b#10 + // [54] call mulf8s127 + jsr mulf8s127 + // [55] (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#1 + jmp b1 + // print_mulf8s127::@1 + b1: + // [56] (signed word) print_mulf8s127::c#0 ← (signed word) mulf8s127::return#0 + // [57] (signed byte) print_sbyte::b#1 ← (signed byte) print_mulf8s127::a#10 -- vbsxx=vbsyy + tya + tax + // [58] (byte*~) print_char_cursor#150 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [59] call print_sbyte + // [104] phi from print_mulf8s127::@1 to print_sbyte [phi:print_mulf8s127::@1->print_sbyte] + print_sbyte_from_b1: + // [104] phi (byte*) print_char_cursor#127 = (byte*~) print_char_cursor#150 [phi:print_mulf8s127::@1->print_sbyte#0] -- register_copy + // [104] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#1 [phi:print_mulf8s127::@1->print_sbyte#1] -- register_copy + jsr print_sbyte + // [60] phi from print_mulf8s127::@1 to print_mulf8s127::@2 [phi:print_mulf8s127::@1->print_mulf8s127::@2] + b2_from_b1: + jmp b2 + // print_mulf8s127::@2 + b2: + // [61] call print_char + // [86] phi from print_mulf8s127::@2 to print_char [phi:print_mulf8s127::@2->print_char] + print_char_from_b2: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@2->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '*' [phi:print_mulf8s127::@2->print_char#1] -- vbuaa=vbuc1 + lda #'*' + jsr print_char + jmp b3 + // print_mulf8s127::@3 + b3: + // [62] (signed byte) print_sbyte::b#2 ← (signed byte) print_mulf8s127::b#10 -- vbsxx=vbsz1 + ldx b + // [63] call print_sbyte + // [104] phi from print_mulf8s127::@3 to print_sbyte [phi:print_mulf8s127::@3->print_sbyte] + print_sbyte_from_b3: + // [104] phi (byte*) print_char_cursor#127 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@3->print_sbyte#0] -- register_copy + // [104] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#2 [phi:print_mulf8s127::@3->print_sbyte#1] -- register_copy + jsr print_sbyte + // [64] phi from print_mulf8s127::@3 to print_mulf8s127::@4 [phi:print_mulf8s127::@3->print_mulf8s127::@4] + b4_from_b3: + jmp b4 + // print_mulf8s127::@4 + b4: + // [65] call print_char + // [86] phi from print_mulf8s127::@4 to print_char [phi:print_mulf8s127::@4->print_char] + print_char_from_b4: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@4->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '=' [phi:print_mulf8s127::@4->print_char#1] -- vbuaa=vbuc1 + lda #'=' + jsr print_char + jmp b5 + // print_mulf8s127::@5 + b5: + // [66] (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#0 + // [67] call print_sword + jsr print_sword + // [68] phi from print_mulf8s127::@5 to print_mulf8s127::@6 [phi:print_mulf8s127::@5->print_mulf8s127::@6] + b6_from_b5: + jmp b6 + // print_mulf8s127::@6 + b6: + // [69] call print_ln + // [71] phi from print_mulf8s127::@6 to print_ln [phi:print_mulf8s127::@6->print_ln] + print_ln_from_b6: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@6->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:print_mulf8s127::@6->print_ln#1] -- register_copy + jsr print_ln + jmp breturn + // print_mulf8s127::@return + breturn: + // [70] return + rts +} + // print_ln +// Print a newline +print_ln: { + // [72] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + // [72] phi (byte*) print_line_cursor#32 = (byte*) print_line_cursor#63 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + // print_ln::@1 + b1: + // [73] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + // [74] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#123) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + lda print_line_cursor+1 + cmp print_char_cursor+1 + bcc b1_from_b1 + bne !+ + lda print_line_cursor + cmp print_char_cursor + bcc b1_from_b1 + !: + jmp breturn + // print_ln::@return + breturn: + // [75] return + rts +} + // print_sword +// Print a signed word as HEX +// print_sword(signed word zeropage(5) w) +print_sword: { + .label w = 5 + // [76] if((signed word) print_sword::w#1<(signed byte) 0) goto print_sword::@1 -- vwsz1_lt_0_then_la1 + lda w+1 + bmi b1_from_print_sword + // [77] phi from print_sword to print_sword::@3 [phi:print_sword->print_sword::@3] + b3_from_print_sword: + jmp b3 + // print_sword::@3 + b3: + // [78] call print_char + // [86] phi from print_sword::@3 to print_char [phi:print_sword::@3->print_char] + print_char_from_b3: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_sword::@3->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) ' ' [phi:print_sword::@3->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + // [79] phi from print_sword::@3 print_sword::@4 to print_sword::@2 [phi:print_sword::@3/print_sword::@4->print_sword::@2] + b2_from_b3: + b2_from_b4: + // [79] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#1 [phi:print_sword::@3/print_sword::@4->print_sword::@2#0] -- register_copy + jmp b2 + // print_sword::@2 + b2: + // [80] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 + // [81] call print_word + // [90] phi from print_sword::@2 to print_word [phi:print_sword::@2->print_word] + print_word_from_b2: + // [90] phi (word) print_word::w#2 = (word) print_word::w#0 [phi:print_sword::@2->print_word#0] -- register_copy + jsr print_word + jmp breturn + // print_sword::@return + breturn: + // [82] return + rts + // [83] phi from print_sword to print_sword::@1 [phi:print_sword->print_sword::@1] + b1_from_print_sword: + jmp b1 + // print_sword::@1 + b1: + // [84] call print_char + // [86] phi from print_sword::@1 to print_char [phi:print_sword::@1->print_char] + print_char_from_b1: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_sword::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '-' [phi:print_sword::@1->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + jmp b4 + // print_sword::@4 + b4: + // [85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 -- vwsz1=_neg_vwsz1 + sec + lda #0 + sbc w + sta w + lda #0 + sbc w+1 + sta w+1 + jmp b2_from_b4 +} + // print_char +// Print a single char +// print_char(byte register(A) ch) +print_char: { + // [87] *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 -- _deref_pbuz1=vbuaa + ldy #0 + sta (print_char_cursor),y + // [88] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#80 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + jmp breturn + // print_char::@return + breturn: + // [89] return + rts +} + // print_word +// Print a word as HEX +// print_word(word zeropage(5) w) +print_word: { + .label w = 5 + // [91] (byte) print_byte::b#1 ← > (word) print_word::w#2 -- vbuxx=_hi_vwuz1 + lda w+1 + tax + // [92] call print_byte + // [96] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_word->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + // print_word::@1 + b1: + // [93] (byte) print_byte::b#2 ← < (word) print_word::w#2 -- vbuxx=_lo_vwuz1 + lda w + tax + // [94] call print_byte + // [96] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + // print_word::@return + breturn: + // [95] return + rts +} + // print_byte +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + // [97] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + // [98] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda print_hextab,y + // [99] call print_char + // [86] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#131 [phi:print_byte->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + // print_byte::@1 + b1: + // [100] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 + lda #$f + axs #0 + // [101] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx + lda print_hextab,x + // [102] call print_char + // [86] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + // print_byte::@return + breturn: + // [103] return + rts +} + // print_sbyte +// Print a signed byte as HEX +// print_sbyte(signed byte register(X) b) +print_sbyte: { + // [105] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 + cpx #0 + bmi b1_from_print_sbyte + // [106] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] + b3_from_print_sbyte: + jmp b3 + // print_sbyte::@3 + b3: + // [107] call print_char + // [86] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] + print_char_from_b3: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#127 [phi:print_sbyte::@3->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + // [108] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] + b2_from_b3: + b2_from_b4: + // [108] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy + jmp b2 + // print_sbyte::@2 + b2: + // [109] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 + // [110] call print_byte + // [96] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + print_byte_from_b2: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_sbyte::@2->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + // print_sbyte::@return + breturn: + // [111] return + rts + // [112] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + b1_from_print_sbyte: + jmp b1 + // print_sbyte::@1 + b1: + // [113] call print_char + // [86] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + print_char_from_b1: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#127 [phi:print_sbyte::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + jmp b4 + // print_sbyte::@4 + b4: + // [114] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx + txa + eor #$ff + clc + adc #1 + tax + jmp b2_from_b4 +} + // mulf8s127 +// mulf8s127(signed byte register(Y) a, signed byte zeropage(2) b) +mulf8s127: { + .label _12 = $e + .label _13 = $e + .label _14 = $10 + .label _15 = $10 + .label b = 2 + .label return = 5 + .label c = 5 + // [115] (byte) mulf8u127::a#1 ← (byte)(signed byte) mulf8s127::a#0 -- vbuaa=vbuyy + tya + // [116] (byte) mulf8u127::b#1 ← (byte)(signed byte) mulf8s127::b#0 -- vbuxx=vbuz1 + ldx b + // [117] call mulf8u127 + // [136] phi from mulf8s127 to mulf8u127 [phi:mulf8s127->mulf8u127] + mulf8u127_from_mulf8s127: + // [136] phi (byte) mulf8u127::b#2 = (byte) mulf8u127::b#1 [phi:mulf8s127->mulf8u127#0] -- register_copy + // [136] phi (byte) mulf8u127::a#2 = (byte) mulf8u127::a#1 [phi:mulf8s127->mulf8u127#1] -- register_copy + jsr mulf8u127 + // [118] (word) mulf8u127::return#3 ← (word) mulf8u127::return#1 + jmp b7 + // mulf8s127::@7 + b7: + // [119] (word) mulf8s127::c#0 ← (word) mulf8u127::return#3 + // [120] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@9 -- vbsyy_ge_0_then_la1 + cpy #0 + bpl b9 + jmp b4 + // mulf8s127::@4 + b4: + // [121] (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#0 -- vwsz1=_sword_vbsz2 + lda b + sta _12 + ora #$7f + bmi !+ + lda #0 + !: + sta _12+1 + // [122] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl _13 + rol _13+1 + // [123] (signed word) mulf8s127::c#1 ← (signed word)(word) mulf8s127::c#0 - (signed word~) mulf8s127::$13 -- vwsz1=vwsz1_minus_vwsz2 + lda c + sec + sbc _13 + sta c + lda c+1 + sbc _13+1 + sta c+1 + // [124] phi from mulf8s127::@4 mulf8s127::@9 to mulf8s127::@1 [phi:mulf8s127::@4/mulf8s127::@9->mulf8s127::@1] + b1_from_b4: + b1_from_b9: + // [124] phi (signed word) mulf8s127::c#5 = (signed word) mulf8s127::c#1 [phi:mulf8s127::@4/mulf8s127::@9->mulf8s127::@1#0] -- register_copy + jmp b1 + // mulf8s127::@1 + b1: + // [125] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@2 -- vbsz1_ge_0_then_la1 + lda b + cmp #0 + bpl b2_from_b1 + jmp b5 + // mulf8s127::@5 + b5: + // [126] (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#0 -- vwsz1=_sword_vbsyy + tya + sta _14 + ora #$7f + bmi !+ + lda #0 + !: + sta _14+1 + // [127] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl _15 + rol _15+1 + // [128] (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (signed word~) mulf8s127::$15 -- vwsz1=vwsz1_minus_vwsz2 + lda c + sec + sbc _15 + sta c + lda c+1 + sbc _15+1 + sta c+1 + // [129] phi from mulf8s127::@1 mulf8s127::@5 to mulf8s127::@2 [phi:mulf8s127::@1/mulf8s127::@5->mulf8s127::@2] + b2_from_b1: + b2_from_b5: + // [129] phi (signed word) mulf8s127::c#7 = (signed word) mulf8s127::c#5 [phi:mulf8s127::@1/mulf8s127::@5->mulf8s127::@2#0] -- register_copy + jmp b2 + // mulf8s127::@2 + b2: + // [130] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@3 -- vbsyy_ge_0_then_la1 + cpy #0 + bpl b3_from_b2 + jmp b8 + // mulf8s127::@8 + b8: + // [131] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@3 -- vbsz1_ge_0_then_la1 + lda b + cmp #0 + bpl b3_from_b8 + jmp b6 + // mulf8s127::@6 + b6: + // [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (signed word) $200 -- vwsz1=vwsz1_minus_vwsc1 + lda c + sec + sbc #<$200 + sta c + lda c+1 + sbc #>$200 + sta c+1 + // [133] phi from mulf8s127::@2 mulf8s127::@6 to mulf8s127::@3 [phi:mulf8s127::@2/mulf8s127::@6->mulf8s127::@3] + b3_from_b2: + b3_from_b6: + // [133] phi (signed word) mulf8s127::return#1 = (signed word) mulf8s127::c#7 [phi:mulf8s127::@2/mulf8s127::@6->mulf8s127::@3#0] -- register_copy + jmp b3 + // [133] phi from mulf8s127::@8 to mulf8s127::@3 [phi:mulf8s127::@8->mulf8s127::@3] + b3_from_b8: + jmp b3 + // mulf8s127::@3 + b3: + jmp breturn + // mulf8s127::@return + breturn: + // [134] return + rts + // mulf8s127::@9 + b9: + // [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 + jmp b1_from_b9 +} + // mulf8u127 +// mulf8u127(byte register(A) a, byte register(X) b) +mulf8u127: { + .label memA = $fc + .label memB = $fd + .label res = $fe + .label resL = $fe + .label resH = $ff + .label return = 5 + // [137] *((const byte*) mulf8u127::memA#0) ← (byte) mulf8u127::a#2 -- _deref_pbuc1=vbuaa + sta memA + // [138] *((const byte*) mulf8u127::memB#0) ← (byte) mulf8u127::b#2 -- _deref_pbuc1=vbuxx + stx memB + // asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } + lda memA + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + ldx memB + sec + sm1: + lda mulf127_sqr1_lo,x + sm2: + sbc mulf127_sqr2_lo,x + sta resL + sm3: + lda mulf127_sqr1_hi,x + sm4: + sbc mulf127_sqr2_hi,x + sta resH + // [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) -- vwuz1=_deref_pwuc1 + lda res + sta return + lda res+1 + sta return+1 + jmp breturn + // mulf8u127::@return + breturn: + // [141] return + rts +} + // print_str +// Print a zero-terminated string +// print_str(byte* zeropage(9) str) +print_str: { + .label str = 9 + // [143] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + // [143] phi (byte*) print_char_cursor#122 = (byte*) print_char_cursor#136 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [143] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + // print_str::@1 + b1: + // [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + // print_str::@return + breturn: + // [145] return + rts + // print_str::@2 + b2: + // [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (print_char_cursor),y + // [147] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#122 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + // [148] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} + // print_mulf8u127 +// print_mulf8u127(byte register(Y) a, byte zeropage($b) b) +print_mulf8u127: { + .label c = 5 + .label b = $b + // [150] (byte) mulf8u127::a#0 ← (byte) print_mulf8u127::a#8 -- vbuaa=vbuyy + tya + // [151] (byte) mulf8u127::b#0 ← (byte) print_mulf8u127::b#10 -- vbuxx=vbuz1 + ldx b + // [152] call mulf8u127 + // [136] phi from print_mulf8u127 to mulf8u127 [phi:print_mulf8u127->mulf8u127] + mulf8u127_from_print_mulf8u127: + // [136] phi (byte) mulf8u127::b#2 = (byte) mulf8u127::b#0 [phi:print_mulf8u127->mulf8u127#0] -- register_copy + // [136] phi (byte) mulf8u127::a#2 = (byte) mulf8u127::a#0 [phi:print_mulf8u127->mulf8u127#1] -- register_copy + jsr mulf8u127 + // [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 + jmp b1 + // print_mulf8u127::@1 + b1: + // [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 + // [155] (byte) print_byte::b#3 ← (byte) print_mulf8u127::a#8 -- vbuxx=vbuyy + tya + tax + // [156] (byte*~) print_char_cursor#152 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // [157] call print_byte + // [96] phi from print_mulf8u127::@1 to print_byte [phi:print_mulf8u127::@1->print_byte] + print_byte_from_b1: + // [96] phi (byte*) print_char_cursor#131 = (byte*~) print_char_cursor#152 [phi:print_mulf8u127::@1->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:print_mulf8u127::@1->print_byte#1] -- register_copy + jsr print_byte + // [158] phi from print_mulf8u127::@1 to print_mulf8u127::@2 [phi:print_mulf8u127::@1->print_mulf8u127::@2] + b2_from_b1: + jmp b2 + // print_mulf8u127::@2 + b2: + // [159] call print_char + // [86] phi from print_mulf8u127::@2 to print_char [phi:print_mulf8u127::@2->print_char] + print_char_from_b2: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@2->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '*' [phi:print_mulf8u127::@2->print_char#1] -- vbuaa=vbuc1 + lda #'*' + jsr print_char + jmp b3 + // print_mulf8u127::@3 + b3: + // [160] (byte) print_byte::b#4 ← (byte) print_mulf8u127::b#10 -- vbuxx=vbuz1 + ldx b + // [161] call print_byte + // [96] phi from print_mulf8u127::@3 to print_byte [phi:print_mulf8u127::@3->print_byte] + print_byte_from_b3: + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@3->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:print_mulf8u127::@3->print_byte#1] -- register_copy + jsr print_byte + // [162] phi from print_mulf8u127::@3 to print_mulf8u127::@4 [phi:print_mulf8u127::@3->print_mulf8u127::@4] + b4_from_b3: + jmp b4 + // print_mulf8u127::@4 + b4: + // [163] call print_char + // [86] phi from print_mulf8u127::@4 to print_char [phi:print_mulf8u127::@4->print_char] + print_char_from_b4: + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@4->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '=' [phi:print_mulf8u127::@4->print_char#1] -- vbuaa=vbuc1 + lda #'=' + jsr print_char + jmp b5 + // print_mulf8u127::@5 + b5: + // [164] (word) print_word::w#1 ← (word) print_mulf8u127::c#0 + // [165] call print_word + // [90] phi from print_mulf8u127::@5 to print_word [phi:print_mulf8u127::@5->print_word] + print_word_from_b5: + // [90] phi (word) print_word::w#2 = (word) print_word::w#1 [phi:print_mulf8u127::@5->print_word#0] -- register_copy + jsr print_word + // [166] phi from print_mulf8u127::@5 to print_mulf8u127::@6 [phi:print_mulf8u127::@5->print_mulf8u127::@6] + b6_from_b5: + jmp b6 + // print_mulf8u127::@6 + b6: + // [167] call print_ln + // [71] phi from print_mulf8u127::@6 to print_ln [phi:print_mulf8u127::@6->print_ln] + print_ln_from_b6: + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@6->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:print_mulf8u127::@6->print_ln#1] -- register_copy + jsr print_ln + jmp breturn + // print_mulf8u127::@return + breturn: + // [168] return + rts +} + // print_cls +// Clear the screen. Also resets current line/char cursor. +print_cls: { + // [170] call memset + // [172] phi from print_cls to memset [phi:print_cls->memset] + memset_from_print_cls: + jsr memset + jmp breturn + // print_cls::@return + breturn: + // [171] return + rts +} + // memset +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +memset: { + .const c = ' ' + .const num = $3e8 + .label str = $400 + .label end = str+num + .label dst = $c + // [173] phi from memset to memset::@1 [phi:memset->memset::@1] + b1_from_memset: + // [173] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + lda #str + sta dst+1 + jmp b1 + // [173] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1] + b1_from_b1: + // [173] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy + jmp b1 + // memset::@1 + b1: + // [174] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y + // [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b1_from_b1 + lda dst + cmp #round((i/127*i/127)*127/4) + // g(x) = <((( x - 255) * ( x - 255 ))/4) + .align $100 +mulf127_sqr2_lo: +.fill 512, round(((i-255)/127*(i-255)/127)*127/4) + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp b7 +Removing instruction jmp b8 +Removing instruction jmp b9 +Removing instruction jmp b10 +Removing instruction jmp b11 +Removing instruction jmp b12 +Removing instruction jmp b13 +Removing instruction jmp b14 +Removing instruction jmp b15 +Removing instruction jmp b16 +Removing instruction jmp b17 +Removing instruction jmp b18 +Removing instruction jmp b19 +Removing instruction jmp b20 +Removing instruction jmp b21 +Removing instruction jmp b22 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b3 +Removing instruction jmp b2 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b3 +Removing instruction jmp b2 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b7 +Removing instruction jmp b4 +Removing instruction jmp b1 +Removing instruction jmp b5 +Removing instruction jmp b2 +Removing instruction jmp b8 +Removing instruction jmp b6 +Removing instruction jmp b3 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing instruction ldy #0 with TAY +Replacing instruction ldy #$7f with TAY +Replacing instruction ldy #$40 with TAY +Replacing instruction ldy #$c0 with TAY +Replacing instruction ldy #$ff with TAY +Replacing instruction ldy #0 with TAY +Replacing instruction ldy #$40 with TAY +Replacing instruction ldy #-$40 with TAY +Replacing instruction ldy #$7f with TAY +Replacing instruction ldy #-$7f with TAY +Removing instruction lda memA +Removing instruction ldx memB +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_print_sword with b1 +Replacing label b2_from_b4 with b2 +Replacing label b1_from_print_sbyte with b1 +Replacing label b2_from_b4 with b2 +Replacing label b2_from_b1 with b2 +Replacing label b3_from_b2 with b3_from_b6 +Replacing label b3_from_b8 with b3 +Replacing label b1_from_b9 with b1 +Replacing label b1_from_b2 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_main: +Removing instruction print_str_from_b1: +Removing instruction b2_from_b1: +Removing instruction print_ln_from_b2: +Removing instruction b3_from_b2: +Removing instruction print_mulf8u127_from_b3: +Removing instruction b4_from_b3: +Removing instruction print_mulf8u127_from_b4: +Removing instruction b5_from_b4: +Removing instruction print_mulf8u127_from_b5: +Removing instruction b6_from_b5: +Removing instruction print_mulf8u127_from_b6: +Removing instruction b7_from_b6: +Removing instruction print_mulf8u127_from_b7: +Removing instruction b8_from_b7: +Removing instruction print_mulf8u127_from_b8: +Removing instruction b9_from_b8: +Removing instruction print_mulf8u127_from_b9: +Removing instruction b10_from_b9: +Removing instruction print_mulf8u127_from_b10: +Removing instruction b12_from_b11: +Removing instruction print_ln_from_b12: +Removing instruction b13_from_b12: +Removing instruction print_mulf8s127_from_b13: +Removing instruction b14_from_b13: +Removing instruction print_mulf8s127_from_b14: +Removing instruction b15_from_b14: +Removing instruction print_mulf8s127_from_b15: +Removing instruction b16_from_b15: +Removing instruction print_mulf8s127_from_b16: +Removing instruction b17_from_b16: +Removing instruction print_mulf8s127_from_b17: +Removing instruction b18_from_b17: +Removing instruction print_mulf8s127_from_b18: +Removing instruction b19_from_b18: +Removing instruction print_mulf8s127_from_b19: +Removing instruction b20_from_b19: +Removing instruction print_mulf8s127_from_b20: +Removing instruction b21_from_b20: +Removing instruction print_mulf8s127_from_b21: +Removing instruction b22_from_b21: +Removing instruction print_mulf8s127_from_b22: +Removing instruction b2_from_b1: +Removing instruction print_char_from_b2: +Removing instruction b4_from_b3: +Removing instruction print_char_from_b4: +Removing instruction b6_from_b5: +Removing instruction print_ln_from_b6: +Removing instruction b1_from_print_ln: +Removing instruction b1_from_b1: +Removing instruction b3_from_print_sword: +Removing instruction print_char_from_b3: +Removing instruction b2_from_b3: +Removing instruction b2_from_b4: +Removing instruction print_word_from_b2: +Removing instruction b1_from_print_sword: +Removing instruction print_char_from_b1: +Removing instruction b3_from_print_sbyte: +Removing instruction print_char_from_b3: +Removing instruction b2_from_b3: +Removing instruction b2_from_b4: +Removing instruction print_byte_from_b2: +Removing instruction b1_from_print_sbyte: +Removing instruction print_char_from_b1: +Removing instruction b1_from_b4: +Removing instruction b1_from_b9: +Removing instruction b2_from_b1: +Removing instruction b2_from_b5: +Removing instruction b3_from_b2: +Removing instruction b3_from_b8: +Removing instruction breturn: +Removing instruction b1_from_print_str: +Removing instruction b1_from_b2: +Removing instruction b2_from_b1: +Removing instruction print_char_from_b2: +Removing instruction b4_from_b3: +Removing instruction print_char_from_b4: +Removing instruction print_word_from_b5: +Removing instruction b6_from_b5: +Removing instruction print_ln_from_b6: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction print_cls_from_main: +Removing instruction b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction b7: +Removing instruction b8: +Removing instruction b9: +Removing instruction b10: +Removing instruction b11: +Removing instruction print_str_from_b11: +Removing instruction b12: +Removing instruction b13: +Removing instruction b14: +Removing instruction b15: +Removing instruction b16: +Removing instruction b17: +Removing instruction b18: +Removing instruction b19: +Removing instruction b20: +Removing instruction b21: +Removing instruction b22: +Removing instruction breturn: +Removing instruction b1: +Removing instruction print_sbyte_from_b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction print_sbyte_from_b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction b3: +Removing instruction breturn: +Removing instruction b4: +Removing instruction breturn: +Removing instruction print_byte_from_print_word: +Removing instruction b1: +Removing instruction print_byte_from_b1: +Removing instruction breturn: +Removing instruction print_char_from_print_byte: +Removing instruction b1: +Removing instruction print_char_from_b1: +Removing instruction breturn: +Removing instruction b3: +Removing instruction breturn: +Removing instruction b4: +Removing instruction mulf8u127_from_mulf8s127: +Removing instruction b7: +Removing instruction b4: +Removing instruction b5: +Removing instruction b8: +Removing instruction b6: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction mulf8u127_from_print_mulf8u127: +Removing instruction b1: +Removing instruction print_byte_from_b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction print_byte_from_b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction breturn: +Removing instruction memset_from_print_cls: +Removing instruction breturn: +Removing instruction b1_from_memset: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Skipping double jump to b1 in bpl b9 +Skipping double jump to b3 in bpl b3_from_b6 +Replacing jump to rts with rts in jmp b3 +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label b3_from_b6 to b4 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Removing instruction b4: +Removing instruction b9: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction jmp b1 +Succesful ASM optimization Pass5UnreachableCodeElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(const byte) RADIX::BINARY BINARY = (number) 2 +(const byte) RADIX::DECIMAL DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL OCTAL = (number) 8 +(void()) main() +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@14 +(label) main::@15 +(label) main::@16 +(label) main::@17 +(label) main::@18 +(label) main::@19 +(label) main::@2 +(label) main::@20 +(label) main::@21 +(label) main::@22 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(const string) main::str str = (string) "unsigned@" +(const string) main::str1 str1 = (string) "signed@" +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(label) memset::@1 +(label) memset::@return +(byte) memset::c +(const byte) memset::c#0 c = (byte) ' ' +(byte*) memset::dst +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#2 dst zp ZP_WORD:12 16.5 +(byte*) memset::end +(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 +(word) memset::num +(const word) memset::num#0 num = (word) $3e8 +(void*) memset::return +(void*) memset::str +(const void*) memset::str#0 str = (void*)(byte*) 1024 +(byte[$200]) mulf127_sqr1_hi +(const byte[$200]) mulf127_sqr1_hi#0 mulf127_sqr1_hi = kickasm {{ .fill 512, >round((i/127*i/127)*127/4) }} +(byte[$200]) mulf127_sqr1_lo +(const byte[$200]) mulf127_sqr1_lo#0 mulf127_sqr1_lo = kickasm {{ .fill 512, round(((i-255)/127*(i-255)/127)*127/4) }} +(byte[$200]) mulf127_sqr2_lo +(const byte[$200]) mulf127_sqr2_lo#0 mulf127_sqr2_lo = kickasm {{ .fill 512, sqrt2) makes the code slower than regular fast multiply +// In this model 255 binary represents 1.0 - meaning that 255*255 = 255 +// Uses principles from C=Hacking #16 https://codebase64.org/doku.php?id=magazines:chacking16 +// Utilizes the fact that a*b = ((a+b)/2)^2 - ((a-b)/2)^2 + // Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + .label print_char_cursor = 7 + .label print_line_cursor = 3 + // @begin + // [1] phi from @begin to @1 [phi:@begin->@1] + // @1 + // [2] call main + // [4] phi from @1 to main [phi:@1->main] + // [3] phi from @1 to @end [phi:@1->@end] + // @end + // main +main: { + // print_cls() + // [5] call print_cls + // [169] phi from main to print_cls [phi:main->print_cls] + jsr print_cls + // [6] phi from main to main::@1 [phi:main->main::@1] + // main::@1 + // print_str("unsigned") + // [7] call print_str + // [142] phi from main::@1 to print_str [phi:main::@1->print_str] + // [142] phi (byte*) print_char_cursor#136 = (byte*) 1024 [phi:main::@1->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + // [142] phi (byte*) print_str::str#5 = (const string) main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // main::@2 + // print_ln() + // [9] call print_ln + // [71] phi from main::@2 to print_ln [phi:main::@2->print_ln] + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#122 [phi:main::@2->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) 1024 [phi:main::@2->print_ln#1] -- pbuz1=pbuc1 + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // main::@3 + // print_mulf8u127(0,0) + // [11] call print_mulf8u127 + // [149] phi from main::@3 to print_mulf8u127 [phi:main::@3->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) 0 [phi:main::@3->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) 0 [phi:main::@3->print_mulf8u127#1] -- vbuyy=vbuc1 + tay + jsr print_mulf8u127 + // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // main::@4 + // print_mulf8u127(127,127) + // [13] call print_mulf8u127 + // [149] phi from main::@4 to print_mulf8u127 [phi:main::@4->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@4->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $7f [phi:main::@4->print_mulf8u127#1] -- vbuyy=vbuc1 + tay + jsr print_mulf8u127 + // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // main::@5 + // print_mulf8u127(64,64) + // [15] call print_mulf8u127 + // [149] phi from main::@5 to print_mulf8u127 [phi:main::@5->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $40 [phi:main::@5->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$40 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@5->print_mulf8u127#1] -- vbuyy=vbuc1 + tay + jsr print_mulf8u127 + // [16] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // main::@6 + // print_mulf8u127(64,127) + // [17] call print_mulf8u127 + // [149] phi from main::@6 to print_mulf8u127 [phi:main::@6->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@6->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@6->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$40 + jsr print_mulf8u127 + // [18] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // main::@7 + // print_mulf8u127(64,192) + // [19] call print_mulf8u127 + // [149] phi from main::@7 to print_mulf8u127 [phi:main::@7->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $c0 [phi:main::@7->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$c0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $40 [phi:main::@7->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$40 + jsr print_mulf8u127 + // [20] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // main::@8 + // print_mulf8u127(255,127) + // [21] call print_mulf8u127 + // [149] phi from main::@8 to print_mulf8u127 [phi:main::@8->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $7f [phi:main::@8->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$7f + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $ff [phi:main::@8->print_mulf8u127#1] -- vbuyy=vbuc1 + ldy #$ff + jsr print_mulf8u127 + // [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // main::@9 + // print_mulf8u127(192,192) + // [23] call print_mulf8u127 + // [149] phi from main::@9 to print_mulf8u127 [phi:main::@9->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $c0 [phi:main::@9->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$c0 + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $c0 [phi:main::@9->print_mulf8u127#1] -- vbuyy=vbuc1 + tay + jsr print_mulf8u127 + // [24] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + // main::@10 + // print_mulf8u127(255,255) + // [25] call print_mulf8u127 + // [149] phi from main::@10 to print_mulf8u127 [phi:main::@10->print_mulf8u127] + // [149] phi (byte) print_mulf8u127::b#10 = (byte) $ff [phi:main::@10->print_mulf8u127#0] -- vbuz1=vbuc1 + lda #$ff + sta print_mulf8u127.b + // [149] phi (byte) print_mulf8u127::a#8 = (byte) $ff [phi:main::@10->print_mulf8u127#1] -- vbuyy=vbuc1 + tay + jsr print_mulf8u127 + // main::@11 + // [26] (byte*~) print_char_cursor#143 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // print_str("signed") + // [27] call print_str + // [142] phi from main::@11 to print_str [phi:main::@11->print_str] + // [142] phi (byte*) print_char_cursor#136 = (byte*~) print_char_cursor#143 [phi:main::@11->print_str#0] -- register_copy + // [142] phi (byte*) print_str::str#5 = (const string) main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + // [28] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // main::@12 + // print_ln() + // [29] call print_ln + // [71] phi from main::@12 to print_ln [phi:main::@12->print_ln] + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#122 [phi:main::@12->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:main::@12->print_ln#1] -- register_copy + jsr print_ln + // [30] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // main::@13 + // print_mulf8s127(0,0) + // [31] call print_mulf8s127 + // [51] phi from main::@13 to print_mulf8s127 [phi:main::@13->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) 0 [phi:main::@13->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #0 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) 0 [phi:main::@13->print_mulf8s127#1] -- vbsyy=vbsc1 + tay + jsr print_mulf8s127 + // [32] phi from main::@13 to main::@14 [phi:main::@13->main::@14] + // main::@14 + // print_mulf8s127(64,64) + // [33] call print_mulf8s127 + // [51] phi from main::@14 to print_mulf8s127 [phi:main::@14->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $40 [phi:main::@14->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@14->print_mulf8s127#1] -- vbsyy=vbsc1 + tay + jsr print_mulf8s127 + // [34] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // main::@15 + // print_mulf8s127(64,127) + // [35] call print_mulf8s127 + // [51] phi from main::@15 to print_mulf8s127 [phi:main::@15->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@15->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@15->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$40 + jsr print_mulf8s127 + // [36] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // main::@16 + // print_mulf8s127(-64,64) + // [37] call print_mulf8s127 + // [51] phi from main::@16 to print_mulf8s127 [phi:main::@16->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $40 [phi:main::@16->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$40 [phi:main::@16->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #-$40 + jsr print_mulf8s127 + // [38] phi from main::@16 to main::@17 [phi:main::@16->main::@17] + // main::@17 + // print_mulf8s127(64,-64) + // [39] call print_mulf8s127 + // [51] phi from main::@17 to print_mulf8s127 [phi:main::@17->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$40 [phi:main::@17->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $40 [phi:main::@17->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$40 + jsr print_mulf8s127 + // [40] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // main::@18 + // print_mulf8s127(-64,-64) + // [41] call print_mulf8s127 + // [51] phi from main::@18 to print_mulf8s127 [phi:main::@18->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$40 [phi:main::@18->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$40 + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$40 [phi:main::@18->print_mulf8s127#1] -- vbsyy=vbsc1 + tay + jsr print_mulf8s127 + // [42] phi from main::@18 to main::@19 [phi:main::@18->main::@19] + // main::@19 + // print_mulf8s127(127,127) + // [43] call print_mulf8s127 + // [51] phi from main::@19 to print_mulf8s127 [phi:main::@19->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@19->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $7f [phi:main::@19->print_mulf8s127#1] -- vbsyy=vbsc1 + tay + jsr print_mulf8s127 + // [44] phi from main::@19 to main::@20 [phi:main::@19->main::@20] + // main::@20 + // print_mulf8s127(-127,127) + // [45] call print_mulf8s127 + // [51] phi from main::@20 to print_mulf8s127 [phi:main::@20->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) $7f [phi:main::@20->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$7f [phi:main::@20->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #-$7f + jsr print_mulf8s127 + // [46] phi from main::@20 to main::@21 [phi:main::@20->main::@21] + // main::@21 + // print_mulf8s127(127,-127) + // [47] call print_mulf8s127 + // [51] phi from main::@21 to print_mulf8s127 [phi:main::@21->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$7f [phi:main::@21->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) $7f [phi:main::@21->print_mulf8s127#1] -- vbsyy=vbsc1 + ldy #$7f + jsr print_mulf8s127 + // [48] phi from main::@21 to main::@22 [phi:main::@21->main::@22] + // main::@22 + // print_mulf8s127(-127,-127) + // [49] call print_mulf8s127 + // [51] phi from main::@22 to print_mulf8s127 [phi:main::@22->print_mulf8s127] + // [51] phi (signed byte) print_mulf8s127::b#10 = (signed byte) -$7f [phi:main::@22->print_mulf8s127#0] -- vbsz1=vbsc1 + lda #-$7f + sta print_mulf8s127.b + // [51] phi (signed byte) print_mulf8s127::a#10 = (signed byte) -$7f [phi:main::@22->print_mulf8s127#1] -- vbsyy=vbsc1 + tay + jsr print_mulf8s127 + // main::@return + // } + // [50] return + rts + str: .text "unsigned@" + str1: .text "signed@" +} + // print_mulf8s127 +// print_mulf8s127(signed byte register(Y) a, signed byte zeropage(2) b) +print_mulf8s127: { + .label c = 5 + .label b = 2 + // mulf8s127(a,b) + // [52] (signed byte) mulf8s127::a#0 ← (signed byte) print_mulf8s127::a#10 + // [53] (signed byte) mulf8s127::b#0 ← (signed byte) print_mulf8s127::b#10 + // [54] call mulf8s127 + jsr mulf8s127 + // [55] (signed word) mulf8s127::return#0 ← (signed word) mulf8s127::return#1 + // print_mulf8s127::@1 + // c = mulf8s127(a,b) + // [56] (signed word) print_mulf8s127::c#0 ← (signed word) mulf8s127::return#0 + // print_sbyte(a) + // [57] (signed byte) print_sbyte::b#1 ← (signed byte) print_mulf8s127::a#10 -- vbsxx=vbsyy + tya + tax + // [58] (byte*~) print_char_cursor#150 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // print_sbyte(a) + // [59] call print_sbyte + // [104] phi from print_mulf8s127::@1 to print_sbyte [phi:print_mulf8s127::@1->print_sbyte] + // [104] phi (byte*) print_char_cursor#127 = (byte*~) print_char_cursor#150 [phi:print_mulf8s127::@1->print_sbyte#0] -- register_copy + // [104] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#1 [phi:print_mulf8s127::@1->print_sbyte#1] -- register_copy + jsr print_sbyte + // [60] phi from print_mulf8s127::@1 to print_mulf8s127::@2 [phi:print_mulf8s127::@1->print_mulf8s127::@2] + // print_mulf8s127::@2 + // print_char('*') + // [61] call print_char + // [86] phi from print_mulf8s127::@2 to print_char [phi:print_mulf8s127::@2->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@2->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '*' [phi:print_mulf8s127::@2->print_char#1] -- vbuaa=vbuc1 + lda #'*' + jsr print_char + // print_mulf8s127::@3 + // print_sbyte(b) + // [62] (signed byte) print_sbyte::b#2 ← (signed byte) print_mulf8s127::b#10 -- vbsxx=vbsz1 + ldx b + // [63] call print_sbyte + // [104] phi from print_mulf8s127::@3 to print_sbyte [phi:print_mulf8s127::@3->print_sbyte] + // [104] phi (byte*) print_char_cursor#127 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@3->print_sbyte#0] -- register_copy + // [104] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#2 [phi:print_mulf8s127::@3->print_sbyte#1] -- register_copy + jsr print_sbyte + // [64] phi from print_mulf8s127::@3 to print_mulf8s127::@4 [phi:print_mulf8s127::@3->print_mulf8s127::@4] + // print_mulf8s127::@4 + // print_char('=') + // [65] call print_char + // [86] phi from print_mulf8s127::@4 to print_char [phi:print_mulf8s127::@4->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@4->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '=' [phi:print_mulf8s127::@4->print_char#1] -- vbuaa=vbuc1 + lda #'=' + jsr print_char + // print_mulf8s127::@5 + // print_sword(c) + // [66] (signed word) print_sword::w#1 ← (signed word) print_mulf8s127::c#0 + // [67] call print_sword + jsr print_sword + // [68] phi from print_mulf8s127::@5 to print_mulf8s127::@6 [phi:print_mulf8s127::@5->print_mulf8s127::@6] + // print_mulf8s127::@6 + // print_ln() + // [69] call print_ln + // [71] phi from print_mulf8s127::@6 to print_ln [phi:print_mulf8s127::@6->print_ln] + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#19 [phi:print_mulf8s127::@6->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:print_mulf8s127::@6->print_ln#1] -- register_copy + jsr print_ln + // print_mulf8s127::@return + // } + // [70] return + rts +} + // print_ln +// Print a newline +print_ln: { + // [72] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + // [72] phi (byte*) print_line_cursor#32 = (byte*) print_line_cursor#63 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + // print_ln::@1 + b1: + // print_line_cursor + $28 + // [73] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#32 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + // while (print_line_cursorprint_sword::@3] + // print_sword::@3 + // print_char(' ') + // [78] call print_char + // [86] phi from print_sword::@3 to print_char [phi:print_sword::@3->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_sword::@3->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) ' ' [phi:print_sword::@3->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + // [79] phi from print_sword::@3 print_sword::@4 to print_sword::@2 [phi:print_sword::@3/print_sword::@4->print_sword::@2] + // [79] phi (signed word) print_sword::w#4 = (signed word) print_sword::w#1 [phi:print_sword::@3/print_sword::@4->print_sword::@2#0] -- register_copy + // print_sword::@2 + b2: + // print_word((word)w) + // [80] (word) print_word::w#0 ← (word)(signed word) print_sword::w#4 + // [81] call print_word + // [90] phi from print_sword::@2 to print_word [phi:print_sword::@2->print_word] + // [90] phi (word) print_word::w#2 = (word) print_word::w#0 [phi:print_sword::@2->print_word#0] -- register_copy + jsr print_word + // print_sword::@return + // } + // [82] return + rts + // [83] phi from print_sword to print_sword::@1 [phi:print_sword->print_sword::@1] + // print_sword::@1 + b1: + // print_char('-') + // [84] call print_char + // [86] phi from print_sword::@1 to print_char [phi:print_sword::@1->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_sword::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '-' [phi:print_sword::@1->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + // print_sword::@4 + // w = -w + // [85] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 -- vwsz1=_neg_vwsz1 + sec + lda #0 + sbc w + sta w + lda #0 + sbc w+1 + sta w+1 + jmp b2 +} + // print_char +// Print a single char +// print_char(byte register(A) ch) +print_char: { + // *(print_char_cursor++) = ch + // [87] *((byte*) print_char_cursor#80) ← (byte) print_char::ch#10 -- _deref_pbuz1=vbuaa + ldy #0 + sta (print_char_cursor),y + // *(print_char_cursor++) = ch; + // [88] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#80 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + // print_char::@return + // } + // [89] return + rts +} + // print_word +// Print a word as HEX +// print_word(word zeropage(5) w) +print_word: { + .label w = 5 + // print_byte(>w) + // [91] (byte) print_byte::b#1 ← > (word) print_word::w#2 -- vbuxx=_hi_vwuz1 + lda w+1 + tax + // [92] call print_byte + // [96] phi from print_word to print_byte [phi:print_word->print_byte] + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_word->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + // print_word::@1 + // print_byte(print_byte] + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_word::@1->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + // print_word::@return + // } + // [95] return + rts +} + // print_byte +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + // b>>4 + // [97] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + // print_char(print_hextab[b>>4]) + // [98] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda print_hextab,y + // [99] call print_char + // [86] phi from print_byte to print_char [phi:print_byte->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#131 [phi:print_byte->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + // print_byte::@1 + // b&$f + // [100] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 + lda #$f + axs #0 + // print_char(print_hextab[b&$f]) + // [101] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx + lda print_hextab,x + // [102] call print_char + // [86] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_byte::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + // print_byte::@return + // } + // [103] return + rts +} + // print_sbyte +// Print a signed byte as HEX +// print_sbyte(signed byte register(X) b) +print_sbyte: { + // if(b<0) + // [105] if((signed byte) print_sbyte::b#3<(signed byte) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 + cpx #0 + bmi b1 + // [106] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] + // print_sbyte::@3 + // print_char(' ') + // [107] call print_char + // [86] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#127 [phi:print_sbyte::@3->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + // [108] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] + // [108] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy + // print_sbyte::@2 + b2: + // print_byte((byte)b) + // [109] (byte) print_byte::b#0 ← (byte)(signed byte) print_sbyte::b#5 + // [110] call print_byte + // [96] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_sbyte::@2->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#0 [phi:print_sbyte::@2->print_byte#1] -- register_copy + jsr print_byte + // print_sbyte::@return + // } + // [111] return + rts + // [112] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + // print_sbyte::@1 + b1: + // print_char('-') + // [113] call print_char + // [86] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#127 [phi:print_sbyte::@1->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + // print_sbyte::@4 + // b = -b + // [114] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx + txa + eor #$ff + clc + adc #1 + tax + jmp b2 +} + // mulf8s127 +// mulf8s127(signed byte register(Y) a, signed byte zeropage(2) b) +mulf8s127: { + .label _12 = $e + .label _13 = $e + .label _14 = $10 + .label _15 = $10 + .label b = 2 + .label return = 5 + .label c = 5 + // mulf8u127((unsigned char)a, (unsigned char)b) + // [115] (byte) mulf8u127::a#1 ← (byte)(signed byte) mulf8s127::a#0 -- vbuaa=vbuyy + tya + // [116] (byte) mulf8u127::b#1 ← (byte)(signed byte) mulf8s127::b#0 -- vbuxx=vbuz1 + ldx b + // [117] call mulf8u127 + // [136] phi from mulf8s127 to mulf8u127 [phi:mulf8s127->mulf8u127] + // [136] phi (byte) mulf8u127::b#2 = (byte) mulf8u127::b#1 [phi:mulf8s127->mulf8u127#0] -- register_copy + // [136] phi (byte) mulf8u127::a#2 = (byte) mulf8u127::a#1 [phi:mulf8s127->mulf8u127#1] -- register_copy + jsr mulf8u127 + // mulf8u127((unsigned char)a, (unsigned char)b) + // [118] (word) mulf8u127::return#3 ← (word) mulf8u127::return#1 + // mulf8s127::@7 + // [119] (word) mulf8s127::c#0 ← (word) mulf8u127::return#3 + // if(a<0) + // [120] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@9 -- vbsyy_ge_0_then_la1 + cpy #0 + bpl b1 + // mulf8s127::@4 + // (signed word)b + // [121] (signed word~) mulf8s127::$12 ← (signed word)(signed byte) mulf8s127::b#0 -- vwsz1=_sword_vbsz2 + lda b + sta _12 + ora #$7f + bmi !+ + lda #0 + !: + sta _12+1 + // (signed word)b*2 + // [122] (signed word~) mulf8s127::$13 ← (signed word~) mulf8s127::$12 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl _13 + rol _13+1 + // c -= (signed word)b*2 + // [123] (signed word) mulf8s127::c#1 ← (signed word)(word) mulf8s127::c#0 - (signed word~) mulf8s127::$13 -- vwsz1=vwsz1_minus_vwsz2 + lda c + sec + sbc _13 + sta c + lda c+1 + sbc _13+1 + sta c+1 + // [124] phi from mulf8s127::@4 mulf8s127::@9 to mulf8s127::@1 [phi:mulf8s127::@4/mulf8s127::@9->mulf8s127::@1] + // [124] phi (signed word) mulf8s127::c#5 = (signed word) mulf8s127::c#1 [phi:mulf8s127::@4/mulf8s127::@9->mulf8s127::@1#0] -- register_copy + // mulf8s127::@1 + b1: + // if(b<0) + // [125] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@2 -- vbsz1_ge_0_then_la1 + lda b + cmp #0 + bpl b2 + // mulf8s127::@5 + // (signed word)a + // [126] (signed word~) mulf8s127::$14 ← (signed word)(signed byte) mulf8s127::a#0 -- vwsz1=_sword_vbsyy + tya + sta _14 + ora #$7f + bmi !+ + lda #0 + !: + sta _14+1 + // (signed word)a*2 + // [127] (signed word~) mulf8s127::$15 ← (signed word~) mulf8s127::$14 << (byte) 1 -- vwsz1=vwsz1_rol_1 + asl _15 + rol _15+1 + // c -= (signed word)a*2 + // [128] (signed word) mulf8s127::c#2 ← (signed word) mulf8s127::c#5 - (signed word~) mulf8s127::$15 -- vwsz1=vwsz1_minus_vwsz2 + lda c + sec + sbc _15 + sta c + lda c+1 + sbc _15+1 + sta c+1 + // [129] phi from mulf8s127::@1 mulf8s127::@5 to mulf8s127::@2 [phi:mulf8s127::@1/mulf8s127::@5->mulf8s127::@2] + // [129] phi (signed word) mulf8s127::c#7 = (signed word) mulf8s127::c#5 [phi:mulf8s127::@1/mulf8s127::@5->mulf8s127::@2#0] -- register_copy + // mulf8s127::@2 + b2: + // if(a<0 && b<0) + // [130] if((signed byte) mulf8s127::a#0>=(signed byte) 0) goto mulf8s127::@3 -- vbsyy_ge_0_then_la1 + cpy #0 + bpl b3 + // mulf8s127::@8 + // [131] if((signed byte) mulf8s127::b#0>=(signed byte) 0) goto mulf8s127::@3 -- vbsz1_ge_0_then_la1 + lda b + cmp #0 + bpl b3 + // mulf8s127::@6 + // c -= 0x200 + // [132] (signed word) mulf8s127::c#3 ← (signed word) mulf8s127::c#7 - (signed word) $200 -- vwsz1=vwsz1_minus_vwsc1 + lda c + sec + sbc #<$200 + sta c + lda c+1 + sbc #>$200 + sta c+1 + // [133] phi from mulf8s127::@2 mulf8s127::@6 to mulf8s127::@3 [phi:mulf8s127::@2/mulf8s127::@6->mulf8s127::@3] + // [133] phi (signed word) mulf8s127::return#1 = (signed word) mulf8s127::c#7 [phi:mulf8s127::@2/mulf8s127::@6->mulf8s127::@3#0] -- register_copy + rts + // [133] phi from mulf8s127::@8 to mulf8s127::@3 [phi:mulf8s127::@8->mulf8s127::@3] + // mulf8s127::@3 + b3: + // mulf8s127::@return + // } + // [134] return + rts + // mulf8s127::@9 + // [135] (signed word~) mulf8s127::c#11 ← (signed word)(word) mulf8s127::c#0 +} + // mulf8u127 +// mulf8u127(byte register(A) a, byte register(X) b) +mulf8u127: { + .label memA = $fc + .label memB = $fd + .label res = $fe + .label resL = $fe + .label resH = $ff + .label return = 5 + // *memA = a + // [137] *((const byte*) mulf8u127::memA#0) ← (byte) mulf8u127::a#2 -- _deref_pbuc1=vbuaa + sta memA + // *memB = b + // [138] *((const byte*) mulf8u127::memB#0) ← (byte) mulf8u127::b#2 -- _deref_pbuc1=vbuxx + stx memB + // asm + // asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamulf127_sqr1_lo,x sm2: sbcmulf127_sqr2_lo,x staresL sm3: ldamulf127_sqr1_hi,x sm4: sbcmulf127_sqr2_hi,x staresH } + sta sm1+1 + sta sm3+1 + eor #$ff + sta sm2+1 + sta sm4+1 + sec + sm1: + lda mulf127_sqr1_lo,x + sm2: + sbc mulf127_sqr2_lo,x + sta resL + sm3: + lda mulf127_sqr1_hi,x + sm4: + sbc mulf127_sqr2_hi,x + sta resH + // return *res; + // [140] (word) mulf8u127::return#1 ← *((const word*) mulf8u127::res#0) -- vwuz1=_deref_pwuc1 + lda res + sta return + lda res+1 + sta return+1 + // mulf8u127::@return + // } + // [141] return + rts +} + // print_str +// Print a zero-terminated string +// print_str(byte* zeropage(9) str) +print_str: { + .label str = 9 + // [143] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + // [143] phi (byte*) print_char_cursor#122 = (byte*) print_char_cursor#136 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + // [143] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + // print_str::@1 + b1: + // while(*str!='@') + // [144] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + // print_str::@return + // } + // [145] return + rts + // print_str::@2 + b2: + // *(print_char_cursor++) = *(str++) + // [146] *((byte*) print_char_cursor#122) ← *((byte*) print_str::str#3) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + sta (print_char_cursor),y + // *(print_char_cursor++) = *(str++); + // [147] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#122 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + // [148] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1 +} + // print_mulf8u127 +// print_mulf8u127(byte register(Y) a, byte zeropage($b) b) +print_mulf8u127: { + .label c = 5 + .label b = $b + // mulf8u127(a,b) + // [150] (byte) mulf8u127::a#0 ← (byte) print_mulf8u127::a#8 -- vbuaa=vbuyy + tya + // [151] (byte) mulf8u127::b#0 ← (byte) print_mulf8u127::b#10 -- vbuxx=vbuz1 + ldx b + // [152] call mulf8u127 + // [136] phi from print_mulf8u127 to mulf8u127 [phi:print_mulf8u127->mulf8u127] + // [136] phi (byte) mulf8u127::b#2 = (byte) mulf8u127::b#0 [phi:print_mulf8u127->mulf8u127#0] -- register_copy + // [136] phi (byte) mulf8u127::a#2 = (byte) mulf8u127::a#0 [phi:print_mulf8u127->mulf8u127#1] -- register_copy + jsr mulf8u127 + // mulf8u127(a,b) + // [153] (word) mulf8u127::return#0 ← (word) mulf8u127::return#1 + // print_mulf8u127::@1 + // c = mulf8u127(a,b) + // [154] (word) print_mulf8u127::c#0 ← (word) mulf8u127::return#0 + // print_byte(a) + // [155] (byte) print_byte::b#3 ← (byte) print_mulf8u127::a#8 -- vbuxx=vbuyy + tya + tax + // [156] (byte*~) print_char_cursor#152 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + // print_byte(a) + // [157] call print_byte + // [96] phi from print_mulf8u127::@1 to print_byte [phi:print_mulf8u127::@1->print_byte] + // [96] phi (byte*) print_char_cursor#131 = (byte*~) print_char_cursor#152 [phi:print_mulf8u127::@1->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:print_mulf8u127::@1->print_byte#1] -- register_copy + jsr print_byte + // [158] phi from print_mulf8u127::@1 to print_mulf8u127::@2 [phi:print_mulf8u127::@1->print_mulf8u127::@2] + // print_mulf8u127::@2 + // print_char('*') + // [159] call print_char + // [86] phi from print_mulf8u127::@2 to print_char [phi:print_mulf8u127::@2->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@2->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '*' [phi:print_mulf8u127::@2->print_char#1] -- vbuaa=vbuc1 + lda #'*' + jsr print_char + // print_mulf8u127::@3 + // print_byte(b) + // [160] (byte) print_byte::b#4 ← (byte) print_mulf8u127::b#10 -- vbuxx=vbuz1 + ldx b + // [161] call print_byte + // [96] phi from print_mulf8u127::@3 to print_byte [phi:print_mulf8u127::@3->print_byte] + // [96] phi (byte*) print_char_cursor#131 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@3->print_byte#0] -- register_copy + // [96] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:print_mulf8u127::@3->print_byte#1] -- register_copy + jsr print_byte + // [162] phi from print_mulf8u127::@3 to print_mulf8u127::@4 [phi:print_mulf8u127::@3->print_mulf8u127::@4] + // print_mulf8u127::@4 + // print_char('=') + // [163] call print_char + // [86] phi from print_mulf8u127::@4 to print_char [phi:print_mulf8u127::@4->print_char] + // [86] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@4->print_char#0] -- register_copy + // [86] phi (byte) print_char::ch#10 = (byte) '=' [phi:print_mulf8u127::@4->print_char#1] -- vbuaa=vbuc1 + lda #'=' + jsr print_char + // print_mulf8u127::@5 + // print_word(c) + // [164] (word) print_word::w#1 ← (word) print_mulf8u127::c#0 + // [165] call print_word + // [90] phi from print_mulf8u127::@5 to print_word [phi:print_mulf8u127::@5->print_word] + // [90] phi (word) print_word::w#2 = (word) print_word::w#1 [phi:print_mulf8u127::@5->print_word#0] -- register_copy + jsr print_word + // [166] phi from print_mulf8u127::@5 to print_mulf8u127::@6 [phi:print_mulf8u127::@5->print_mulf8u127::@6] + // print_mulf8u127::@6 + // print_ln() + // [167] call print_ln + // [71] phi from print_mulf8u127::@6 to print_ln [phi:print_mulf8u127::@6->print_ln] + // [71] phi (byte*) print_char_cursor#123 = (byte*) print_char_cursor#19 [phi:print_mulf8u127::@6->print_ln#0] -- register_copy + // [71] phi (byte*) print_line_cursor#63 = (byte*) print_line_cursor#1 [phi:print_mulf8u127::@6->print_ln#1] -- register_copy + jsr print_ln + // print_mulf8u127::@return + // } + // [168] return + rts +} + // print_cls +// Clear the screen. Also resets current line/char cursor. +print_cls: { + // memset(print_screen, ' ', 1000) + // [170] call memset + // [172] phi from print_cls to memset [phi:print_cls->memset] + jsr memset + // print_cls::@return + // } + // [171] return + rts +} + // memset +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +memset: { + .const c = ' ' + .const num = $3e8 + .label str = $400 + .label end = str+num + .label dst = $c + // [173] phi from memset to memset::@1 [phi:memset->memset::@1] + // [173] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + lda #str + sta dst+1 + // [173] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1] + // [173] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy + // memset::@1 + b1: + // *dst = c + // [174] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + lda #c + ldy #0 + sta (dst),y + // for(char* dst = str; dst!=end; dst++) + // [175] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc dst + bne !+ + inc dst+1 + !: + // [176] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 + lda dst+1 + cmp #>end + bne b1 + lda dst + cmp #round((i/127*i/127)*127/4) + // g(x) = <((( x - 255) * ( x - 255 ))/4) + .align $100 +mulf127_sqr2_lo: +.fill 512, round(((i-255)/127*(i-255)/127)*127/4) + diff --git a/src/test/ref/fastmultiply-127.sym b/src/test/ref/fastmultiply-127.sym new file mode 100644 index 000000000..9e14803ee --- /dev/null +++ b/src/test/ref/fastmultiply-127.sym @@ -0,0 +1,237 @@ +(label) @1 +(label) @begin +(label) @end +(const byte) RADIX::BINARY BINARY = (number) 2 +(const byte) RADIX::DECIMAL DECIMAL = (number) $a +(const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10 +(const byte) RADIX::OCTAL OCTAL = (number) 8 +(void()) main() +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@14 +(label) main::@15 +(label) main::@16 +(label) main::@17 +(label) main::@18 +(label) main::@19 +(label) main::@2 +(label) main::@20 +(label) main::@21 +(label) main::@22 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(const string) main::str str = (string) "unsigned@" +(const string) main::str1 str1 = (string) "signed@" +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +(label) memset::@1 +(label) memset::@return +(byte) memset::c +(const byte) memset::c#0 c = (byte) ' ' +(byte*) memset::dst +(byte*) memset::dst#1 dst zp ZP_WORD:12 16.5 +(byte*) memset::dst#2 dst zp ZP_WORD:12 16.5 +(byte*) memset::end +(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 +(word) memset::num +(const word) memset::num#0 num = (word) $3e8 +(void*) memset::return +(void*) memset::str +(const void*) memset::str#0 str = (void*)(byte*) 1024 +(byte[$200]) mulf127_sqr1_hi +(const byte[$200]) mulf127_sqr1_hi#0 mulf127_sqr1_hi = kickasm {{ .fill 512, >round((i/127*i/127)*127/4) }} +(byte[$200]) mulf127_sqr1_lo +(const byte[$200]) mulf127_sqr1_lo#0 mulf127_sqr1_lo = kickasm {{ .fill 512, round(((i-255)/127*(i-255)/127)*127/4) }} +(byte[$200]) mulf127_sqr2_lo +(const byte[$200]) mulf127_sqr2_lo#0 mulf127_sqr2_lo = kickasm {{ .fill 512, main::@1] + // [6] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] b1_from_b1: - jmp b1 - // [6] phi from main::@3 to main::@1 [phi:main::@3->main::@1] b1_from_b3: - // [6] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#0] -- register_copy + // [6] phi (byte) main::c#4 = (byte) main::c#4 [phi:main::@1/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -1031,22 +1026,22 @@ Potential registers zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] : zp ZP_BYTE:13 REGISTER UPLIFT SCOPES Uplift Scope [flip] 2,054.43: zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] 2,005: zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] 2,002: zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] 353.5: zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] 176.75: zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] Uplift Scope [plot] 2,502.5: zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] 2,104.5: zp ZP_BYTE:6 [ plot::i#2 plot::i#3 plot::i#1 ] 267.83: zp ZP_WORD:3 [ plot::line#4 plot::line#1 ] 180.36: zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] -Uplift Scope [main] 218.83: zp ZP_BYTE:2 [ main::c#4 main::c#1 ] +Uplift Scope [main] 886.17: zp ZP_BYTE:2 [ main::c#4 main::c#1 ] Uplift Scope [prepare] 38.5: zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] Uplift Scope [] -Uplifting [flip] best 140276 combination reg byte y [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] reg byte x [ flip::i#2 flip::i#1 ] zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] +Uplifting [flip] best 137276 combination reg byte y [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] reg byte x [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] reg byte x [ flip::i#2 flip::i#1 ] zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] Limited combination testing to 100 combinations of 243 possible. -Uplifting [plot] best 121976 combination reg byte y [ plot::x#2 plot::x#1 ] reg byte x [ plot::i#2 plot::i#3 plot::i#1 ] zp ZP_WORD:3 [ plot::line#4 plot::line#1 ] zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] -Uplifting [main] best 118376 combination reg byte x [ main::c#4 main::c#1 ] -Uplifting [prepare] best 118256 combination reg byte x [ prepare::i#2 prepare::i#1 ] -Uplifting [] best 118256 combination +Uplifting [plot] best 118976 combination reg byte y [ plot::x#2 plot::x#1 ] reg byte x [ plot::i#2 plot::i#3 plot::i#1 ] zp ZP_WORD:3 [ plot::line#4 plot::line#1 ] zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] +Uplifting [main] best 115376 combination reg byte x [ main::c#4 main::c#1 ] +Uplifting [prepare] best 115256 combination reg byte x [ prepare::i#2 prepare::i#1 ] +Uplifting [] best 115256 combination Attempting to uplift remaining variables inzp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] -Uplifting [flip] best 118256 combination zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] +Uplifting [flip] best 115256 combination zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] -Uplifting [plot] best 118256 combination zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] +Uplifting [plot] best 115256 combination zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] -Uplifting [flip] best 118256 combination zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] +Uplifting [flip] best 115256 combination zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ plot::line#4 plot::line#1 ] Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ plot::y#4 plot::y#1 ] Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:5 [ flip::r#4 flip::r#1 ] @@ -1089,12 +1084,10 @@ main: { // [6] phi (byte) main::c#4 = (byte) $19 [phi:main/main::@5->main::@1#0] -- vbuxx=vbuc1 ldx #$19 jmp b1 - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] b1_from_b1: - jmp b1 - // [6] phi from main::@3 to main::@1 [phi:main::@3->main::@1] b1_from_b3: - // [6] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#0] -- register_copy + // [6] phi (byte) main::c#4 = (byte) main::c#4 [phi:main::@1/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -1350,6 +1343,7 @@ Removing instruction jmp breturn Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b1 with b1 Replacing label b1_from_b3 with b1 Replacing label b2_from_b2 with b2 Replacing label b1_from_b3 with b1 @@ -1362,6 +1356,7 @@ Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b1_from_main: +Removing instruction b1_from_b1: Removing instruction b1_from_b3: Removing instruction b4_from_b3: Removing instruction flip_from_b4: @@ -1394,10 +1389,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Skipping double jump to b1 in bne b1_from_b1 -Succesful ASM optimization Pass5DoubleJumpElimination Relabelling long label b1_from_b5 to b3 -Relabelling long label b1_from_b1 to b4 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp b1 Removing instruction jmp b1 @@ -1407,12 +1399,8 @@ Removing instruction jmp b2 Removing instruction jmp b4 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b4: -Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination FINAL SYMBOL TABLE (label) @1 @@ -1458,7 +1446,7 @@ FINAL SYMBOL TABLE (label) main::@5 (byte) main::c (byte) main::c#1 reg byte x 151.5 -(byte) main::c#4 reg byte x 67.33333333333333 +(byte) main::c#4 reg byte x 734.6666666666666 (void()) plot() (label) plot::@1 (label) plot::@2 @@ -1525,9 +1513,8 @@ main: { b3: // [6] phi (byte) main::c#4 = (byte) $19 [phi:main/main::@5->main::@1#0] -- vbuxx=vbuc1 ldx #$19 - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [6] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [6] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#0] -- register_copy + // [6] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] + // [6] phi (byte) main::c#4 = (byte) main::c#4 [phi:main::@1/main::@3->main::@1#0] -- register_copy // main::@1 b1: // while(*RASTER!=254) diff --git a/src/test/ref/flipper-rex2.sym b/src/test/ref/flipper-rex2.sym index 7e9d46e91..7bcc9fb9d 100644 --- a/src/test/ref/flipper-rex2.sym +++ b/src/test/ref/flipper-rex2.sym @@ -41,7 +41,7 @@ (label) main::@5 (byte) main::c (byte) main::c#1 reg byte x 151.5 -(byte) main::c#4 reg byte x 67.33333333333333 +(byte) main::c#4 reg byte x 734.6666666666666 (void()) plot() (label) plot::@1 (label) plot::@2 diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index f48648654..f1693dea3 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -423,12 +423,6 @@ Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$0 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 -Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 -Self Phi Eliminated (byte*) init_font_hex::charset#3 -Self Phi Eliminated (byte) init_font_hex::c1#2 -Self Phi Eliminated (byte) init_font_hex::c#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 @@ -436,6 +430,9 @@ Identical Phi Values (byte*) init_font_hex::charset#3 (byte*) init_font_hex::cha Identical Phi Values (byte) init_font_hex::c1#2 (byte) init_font_hex::c1#4 Identical Phi Values (byte) init_font_hex::c#2 (byte) init_font_hex::c#5 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) init_font_hex::$3 [20] if((byte) init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 Simple Condition (bool~) init_font_hex::$4 [30] if((byte) init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 Simple Condition (bool~) init_font_hex::$5 [35] if((byte) init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 @@ -466,7 +463,7 @@ Resolved ranged next value [18] init_font_hex::i#1 ← ++ init_font_hex::i#2 to Resolved ranged comparison value [20] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 Resolved ranged next value [28] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ Resolved ranged comparison value [30] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 -Resolved ranged next value [33] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged next value [33] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++ Resolved ranged comparison value [35] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 Resolved ranged next value [63] main::c#1 ← ++ main::c#2 to ++ Resolved ranged comparison value [65] if(main::c#1!=rangelast(0,$ff)) goto main::@1 to (number) 0 @@ -489,12 +486,6 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 -Self Phi Eliminated (byte) init_font_hex::c#5 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 -Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0 diff --git a/src/test/ref/forclassicmin.log b/src/test/ref/forclassicmin.log index 023888d3b..45c5bd6a9 100644 --- a/src/test/ref/forclassicmin.log +++ b/src/test/ref/forclassicmin.log @@ -63,8 +63,6 @@ Finalized unsigned number type (byte) $64 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) SCREEN#0 = (byte*~) $0 (byte*) SCREEN#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) SCREEN#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) SCREEN#2 (byte*) SCREEN#0 Identical Phi Values (byte*) SCREEN#1 (byte*) SCREEN#2 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index f47d20e0c..901b594b4 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -187,9 +187,6 @@ Alias (byte) idx#10 = (byte) idx#2 (byte) idx#9 (byte) idx#3 Alias (byte) idx#12 = (byte) idx#5 (byte) idx#6 Alias (byte) idx#16 = (byte) idx#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (void()*) do10::fn#2 -Self Phi Eliminated (byte*) print::msg#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (void()*) do10::fn#2 (void()*) do10::fn#3 Identical Phi Values (byte) idx#13 (byte) idx#16 Identical Phi Values (byte) idx#0 (byte) idx#12 diff --git a/src/test/ref/function-pointer-noarg-call-6.log b/src/test/ref/function-pointer-noarg-call-6.log index 7c1e8ef07..85d7ed9d9 100644 --- a/src/test/ref/function-pointer-noarg-call-6.log +++ b/src/test/ref/function-pointer-noarg-call-6.log @@ -80,8 +80,6 @@ Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification Alias (void()*) main::cls#0 = (void()*~) main::$0 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (void()*) main::cls#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (void()*) main::cls#1 (void()*) main::cls#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$2 [8] if((byte*) main::cols#1<(word)(number) $d800+(number) $3e8) goto main::@1 diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 9c878389f..10ca1a31b 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -127,8 +127,6 @@ Alias (void()*) main::f#0 = (void()*~) main::$0 Alias (byte) idx#1 = (byte) idx#4 (byte) idx#2 Alias (byte) idx#0 = (byte) idx#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (void()*) do10::fn#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (void()*) do10::fn#2 (void()*) do10::fn#0 Identical Phi Values (void()*) do10::fn#1 (void()*) do10::fn#2 Identical Phi Values (byte) idx#5 (byte) idx#0 diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index 9722f4138..4bce1199e 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -169,9 +169,6 @@ Alias (byte*) msg#10 = (byte*) msg#3 Alias (byte) idx#0 = (byte) idx#6 Alias (byte*) msg#4 = (byte*) msg#7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (void()*) do10::fn#2 -Self Phi Eliminated (byte*) msg#6 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (void()*) do10::fn#2 (void()*) do10::fn#3 Identical Phi Values (byte*) msg#9 (byte*) msg#10 Identical Phi Values (byte) idx#5 (byte) idx#0 diff --git a/src/test/ref/helloworld2-inline.log b/src/test/ref/helloworld2-inline.log index d43ba7cab..ebe02a2bf 100644 --- a/src/test/ref/helloworld2-inline.log +++ b/src/test/ref/helloworld2-inline.log @@ -157,11 +157,6 @@ Alias (byte*) main::hello#0 = (byte*) main::print21_msg#0 (byte*) main::print21_ Alias (byte*) main::print21_at#0 = (byte*) main::print21_at#2 Alias (byte*) main::print22_at#0 = (byte*~) main::$1 (byte*) main::print22_at#2 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::print21_msg#1 -Self Phi Eliminated (byte*) main::print21_at#1 -Self Phi Eliminated (byte*) main::print22_msg#1 -Self Phi Eliminated (byte*) main::print22_at#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) main::print21_msg#1 (byte*) main::hello#0 Identical Phi Values (byte*) main::print21_at#1 (byte*) main::print21_at#0 Identical Phi Values (byte*) main::print22_msg#1 (byte*) main::hello#0 diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index 487f865d9..5e16e84f3 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -111,9 +111,6 @@ Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) print2::at#1 = (byte*~) main::$1 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print2::msg#2 -Self Phi Eliminated (byte*) print2::at#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) print2::msg#2 (byte*) print2::msg#3 Identical Phi Values (byte*) print2::at#2 (byte*) print2::at#3 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/hex2dec.cfg b/src/test/ref/hex2dec.cfg index a645295f4..1bcbf3ecd 100644 --- a/src/test/ref/hex2dec.cfg +++ b/src/test/ref/hex2dec.cfg @@ -60,11 +60,11 @@ utoa10w: scope:[utoa10w] from main::@8 [35] phi() to:utoa10w::@1 utoa10w::@1: scope:[utoa10w] from utoa10w utoa10w::@2 utoa10w::@6 - [36] (byte*) utoa10w::dst#11 ← phi( utoa10w/(byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50 utoa10w::@6/(byte*) utoa10w::dst#4 ) - [36] (byte) utoa10w::bStarted#2 ← phi( utoa10w/(byte) 0 utoa10w::@2/(byte) 1 ) + [36] (byte*) utoa10w::dst#11 ← phi( utoa10w/(byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50 utoa10w::@6/(byte*) utoa10w::dst#4 utoa10w::@2/(byte*) utoa10w::dst#11 ) + [36] (byte) utoa10w::bStarted#2 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::bStarted#2 utoa10w::@2/(byte) 1 ) [36] (byte) utoa10w::digit#3 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::digit#7 utoa10w::@2/(byte) utoa10w::digit#1 ) - [36] (word) utoa10w::value#10 ← phi( utoa10w/(word) utoa10w::value#0 utoa10w::@2/(word) utoa10w::value#1 ) - [36] (byte) utoa10w::i#2 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::i#1 ) + [36] (word) utoa10w::value#10 ← phi( utoa10w/(word) utoa10w::value#0 utoa10w::@6/(word) utoa10w::value#10 utoa10w::@2/(word) utoa10w::value#1 ) + [36] (byte) utoa10w::i#2 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::i#1 utoa10w::@2/(byte) utoa10w::i#2 ) [37] (byte~) utoa10w::$8 ← (byte) utoa10w::i#2 << (byte) 1 [38] if((word) utoa10w::value#10>=*((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$8)) goto utoa10w::@2 to:utoa10w::@3 diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index ee2d5b59e..62400253f 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -824,12 +824,6 @@ Alias (byte) utoa10w::i#2 = (byte) utoa10w::i#5 Alias (word) utoa10w::value#10 = (word) utoa10w::value#4 Alias (byte) utoa10w::bStarted#2 = (byte) utoa10w::bStarted#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::screen#10 -Self Phi Eliminated (byte) utoa10w::i#2 -Self Phi Eliminated (word) utoa10w::value#10 -Self Phi Eliminated (byte) utoa10w::bStarted#2 -Self Phi Eliminated (byte*) utoa10w::dst#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) main::screen#10 (byte*) main::screen#11 Identical Phi Values (word) utoa10w::value#5 (word) utoa10w::value#0 Identical Phi Values (byte*) utoa10w::dst#10 (byte*) utoa10w::dst#0 @@ -1018,7 +1012,7 @@ Adding NOP phi() at start of cls CALL GRAPH Calls in [] to main:3 Calls in [main] to cls:7 utoa16w:18 utoa16w:22 utoa16w:26 utoa16w:30 utoa16w:34 utoa10w:39 -Calls in [utoa16w] to utoa16n:81 utoa16n:89 utoa16n:97 utoa16n:101 +Calls in [utoa16w] to utoa16n:85 utoa16n:93 utoa16n:101 utoa16n:105 Created 15 initial phi equivalence classes Coalesced [17] utoa16w::dst#14 ← utoa16w::dst#0 @@ -1028,24 +1022,28 @@ Coalesced [29] utoa16w::dst#12 ← utoa16w::dst#3 Coalesced [33] utoa16w::dst#13 ← utoa16w::dst#4 Coalesced [45] main::i#3 ← main::i#1 Coalesced [46] utoa10w::value#11 ← utoa10w::value#0 -Coalesced [55] utoa10w::dst#16 ← utoa10w::dst#1 -Coalesced [57] utoa10w::dst#13 ← utoa10w::dst#7 +Coalesced [55] utoa10w::dst#17 ← utoa10w::dst#1 +Coalesced [57] utoa10w::dst#14 ← utoa10w::dst#7 Coalesced [66] utoa10w::i#9 ← utoa10w::i#1 -Coalesced [67] utoa10w::digit#9 ← utoa10w::digit#7 -Coalesced [68] utoa10w::dst#12 ← utoa10w::dst#4 -Coalesced (already) [69] utoa10w::dst#15 ← utoa10w::dst#11 -Coalesced (already) [70] utoa10w::dst#14 ← utoa10w::dst#11 -Coalesced (already) [71] utoa10w::digit#11 ← utoa10w::digit#3 -Coalesced [75] utoa10w::value#12 ← utoa10w::value#1 -Coalesced [76] utoa10w::digit#10 ← utoa10w::digit#1 -Coalesced [80] utoa16n::nybble#8 ← utoa16n::nybble#0 -Coalesced [87] utoa16n::nybble#9 ← utoa16n::nybble#1 -Coalesced [88] utoa16n::started#9 ← utoa16n::started#1 -Coalesced [95] utoa16n::nybble#10 ← utoa16n::nybble#2 -Coalesced [96] utoa16n::started#10 ← utoa16n::started#2 -Coalesced [100] utoa16n::nybble#11 ← utoa16n::nybble#3 -Coalesced [113] utoa16n::return#10 ← utoa16n::started#7 -Coalesced [120] cls::sc#3 ← cls::sc#1 +Coalesced (already) [67] utoa10w::value#12 ← utoa10w::value#10 +Coalesced [68] utoa10w::digit#9 ← utoa10w::digit#7 +Coalesced (already) [69] utoa10w::bStarted#8 ← utoa10w::bStarted#2 +Coalesced [70] utoa10w::dst#12 ← utoa10w::dst#4 +Coalesced (already) [71] utoa10w::dst#16 ← utoa10w::dst#11 +Coalesced (already) [72] utoa10w::dst#15 ← utoa10w::dst#11 +Coalesced (already) [73] utoa10w::digit#11 ← utoa10w::digit#3 +Coalesced (already) [77] utoa10w::i#10 ← utoa10w::i#2 +Coalesced [78] utoa10w::value#13 ← utoa10w::value#1 +Coalesced [79] utoa10w::digit#10 ← utoa10w::digit#1 +Coalesced (already) [80] utoa10w::dst#13 ← utoa10w::dst#11 +Coalesced [84] utoa16n::nybble#8 ← utoa16n::nybble#0 +Coalesced [91] utoa16n::nybble#9 ← utoa16n::nybble#1 +Coalesced [92] utoa16n::started#9 ← utoa16n::started#1 +Coalesced [99] utoa16n::nybble#10 ← utoa16n::nybble#2 +Coalesced [100] utoa16n::started#10 ← utoa16n::started#2 +Coalesced [104] utoa16n::nybble#11 ← utoa16n::nybble#3 +Coalesced [117] utoa16n::return#10 ← utoa16n::started#7 +Coalesced [124] cls::sc#3 ← cls::sc#1 Coalesced down to 11 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @6 @@ -1148,11 +1146,11 @@ utoa10w: scope:[utoa10w] from main::@8 [35] phi() to:utoa10w::@1 utoa10w::@1: scope:[utoa10w] from utoa10w utoa10w::@2 utoa10w::@6 - [36] (byte*) utoa10w::dst#11 ← phi( utoa10w/(byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50 utoa10w::@6/(byte*) utoa10w::dst#4 ) - [36] (byte) utoa10w::bStarted#2 ← phi( utoa10w/(byte) 0 utoa10w::@2/(byte) 1 ) + [36] (byte*) utoa10w::dst#11 ← phi( utoa10w/(byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50 utoa10w::@6/(byte*) utoa10w::dst#4 utoa10w::@2/(byte*) utoa10w::dst#11 ) + [36] (byte) utoa10w::bStarted#2 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::bStarted#2 utoa10w::@2/(byte) 1 ) [36] (byte) utoa10w::digit#3 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::digit#7 utoa10w::@2/(byte) utoa10w::digit#1 ) - [36] (word) utoa10w::value#10 ← phi( utoa10w/(word) utoa10w::value#0 utoa10w::@2/(word) utoa10w::value#1 ) - [36] (byte) utoa10w::i#2 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::i#1 ) + [36] (word) utoa10w::value#10 ← phi( utoa10w/(word) utoa10w::value#0 utoa10w::@6/(word) utoa10w::value#10 utoa10w::@2/(word) utoa10w::value#1 ) + [36] (byte) utoa10w::i#2 ← phi( utoa10w/(byte) 0 utoa10w::@6/(byte) utoa10w::i#1 utoa10w::@2/(byte) utoa10w::i#2 ) [37] (byte~) utoa10w::$8 ← (byte) utoa10w::i#2 << (byte) 1 [38] if((word) utoa10w::value#10>=*((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$8)) goto utoa10w::@2 to:utoa10w::@3 @@ -1291,24 +1289,24 @@ VARIABLE REGISTER WEIGHTS (byte~) utoa10w::$8 202.0 (byte~) utoa10w::$9 202.0 (byte) utoa10w::bStarted -(byte) utoa10w::bStarted#2 20.2 +(byte) utoa10w::bStarted#2 25.25 (byte) utoa10w::digit (byte) utoa10w::digit#1 67.33333333333333 (byte) utoa10w::digit#3 84.16666666666666 (byte) utoa10w::digit#7 67.33333333333333 (byte*) utoa10w::dst (byte*) utoa10w::dst#1 202.0 -(byte*) utoa10w::dst#11 72.14285714285714 +(byte*) utoa10w::dst#11 70.7 (byte*) utoa10w::dst#2 4.0 (byte*) utoa10w::dst#4 61.39999999999999 (byte*) utoa10w::dst#7 303.0 (byte) utoa10w::i (byte) utoa10w::i#1 151.5 -(byte) utoa10w::i#2 55.090909090909086 +(byte) utoa10w::i#2 62.153846153846146 (word) utoa10w::value (word) utoa10w::value#0 6.5 (word) utoa10w::value#1 202.0 -(word) utoa10w::value#10 21.78571428571429 +(word) utoa10w::value#10 36.214285714285715 (byte()) utoa16n((byte) utoa16n::nybble , (word**) utoa16n::dst , (byte) utoa16n::started) (word**) utoa16n::dst (byte) utoa16n::nybble @@ -1683,8 +1681,10 @@ utoa10w: { // [36] phi from utoa10w::@6 to utoa10w::@1 [phi:utoa10w::@6->utoa10w::@1] b1_from_b6: // [36] phi (byte*) utoa10w::dst#11 = (byte*) utoa10w::dst#4 [phi:utoa10w::@6->utoa10w::@1#0] -- register_copy - // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#7 [phi:utoa10w::@6->utoa10w::@1#1] -- register_copy - // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#1 [phi:utoa10w::@6->utoa10w::@1#2] -- register_copy + // [36] phi (byte) utoa10w::bStarted#2 = (byte) utoa10w::bStarted#2 [phi:utoa10w::@6->utoa10w::@1#1] -- register_copy + // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#7 [phi:utoa10w::@6->utoa10w::@1#2] -- register_copy + // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#10 [phi:utoa10w::@6->utoa10w::@1#3] -- register_copy + // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#1 [phi:utoa10w::@6->utoa10w::@1#4] -- register_copy jmp b1 // utoa10w::@1 b1: @@ -1811,11 +1811,13 @@ utoa10w: { sta value+1 // [36] phi from utoa10w::@2 to utoa10w::@1 [phi:utoa10w::@2->utoa10w::@1] b1_from_b2: - // [36] phi (byte) utoa10w::bStarted#2 = (byte) 1 [phi:utoa10w::@2->utoa10w::@1#0] -- vbuz1=vbuc1 + // [36] phi (byte*) utoa10w::dst#11 = (byte*) utoa10w::dst#11 [phi:utoa10w::@2->utoa10w::@1#0] -- register_copy + // [36] phi (byte) utoa10w::bStarted#2 = (byte) 1 [phi:utoa10w::@2->utoa10w::@1#1] -- vbuz1=vbuc1 lda #1 sta bStarted - // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#1 [phi:utoa10w::@2->utoa10w::@1#1] -- register_copy - // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#1 [phi:utoa10w::@2->utoa10w::@1#2] -- register_copy + // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#1 [phi:utoa10w::@2->utoa10w::@1#2] -- register_copy + // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#1 [phi:utoa10w::@2->utoa10w::@1#3] -- register_copy + // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#2 [phi:utoa10w::@2->utoa10w::@1#4] -- register_copy jmp b1 } // utoa16w @@ -2057,15 +2059,16 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ ut Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ utoa10w::bStarted#2 ] Statement [38] if((word) utoa10w::value#10>=*((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$8)) goto utoa10w::@2 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 ] ) always clobbers reg byte a Statement [39] (byte~) utoa10w::$2 ← (byte) utoa10w::i#2 & (byte) 1 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 utoa10w::$2 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 utoa10w::$2 ] ) always clobbers reg byte a -Statement [42] *((byte*) utoa10w::dst#11) ← *((const byte[]) DIGITS#0 + (byte) utoa10w::digit#3) [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 ] ) always clobbers reg byte a reg byte y +Statement [42] *((byte*) utoa10w::dst#11) ← *((const byte[]) DIGITS#0 + (byte) utoa10w::digit#3) [ utoa10w::i#2 utoa10w::value#10 utoa10w::bStarted#2 utoa10w::dst#11 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::bStarted#2 utoa10w::dst#11 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ utoa10w::i#2 utoa10w::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ utoa10w::bStarted#2 ] Statement [48] (byte~) utoa10w::$0 ← (byte)(word) utoa10w::value#10 [ utoa10w::dst#4 utoa10w::$0 ] ( main:2::utoa10w:30 [ utoa10w::dst#4 utoa10w::$0 ] ) always clobbers reg byte a Statement [49] *((byte*) utoa10w::dst#4) ← *((const byte[]) DIGITS#0 + (byte~) utoa10w::$0) [ utoa10w::dst#4 ] ( main:2::utoa10w:30 [ utoa10w::dst#4 ] ) always clobbers reg byte a reg byte y Statement [50] (byte*) utoa10w::dst#2 ← ++ (byte*) utoa10w::dst#4 [ utoa10w::dst#2 ] ( main:2::utoa10w:30 [ utoa10w::dst#2 ] ) always clobbers reg byte a Statement [51] *((byte*) utoa10w::dst#2) ← (byte) 0 [ ] ( main:2::utoa10w:30 [ ] ) always clobbers reg byte a reg byte y -Statement [53] (byte) utoa10w::digit#1 ← (byte) utoa10w::digit#3 + *((const byte[]) UTOA10_VAL#0 + (byte) utoa10w::i#2) [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#1 ] ) always clobbers reg byte a -Statement [54] (byte~) utoa10w::$9 ← (byte) utoa10w::i#2 << (byte) 1 [ utoa10w::value#10 utoa10w::digit#1 utoa10w::$9 ] ( main:2::utoa10w:30 [ utoa10w::value#10 utoa10w::digit#1 utoa10w::$9 ] ) always clobbers reg byte a -Statement [55] (word) utoa10w::value#1 ← (word) utoa10w::value#10 - *((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$9) [ utoa10w::value#1 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::value#1 utoa10w::digit#1 ] ) always clobbers reg byte a +Statement [53] (byte) utoa10w::digit#1 ← (byte) utoa10w::digit#3 + *((const byte[]) UTOA10_VAL#0 + (byte) utoa10w::i#2) [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 ] ) always clobbers reg byte a +Statement [54] (byte~) utoa10w::$9 ← (byte) utoa10w::i#2 << (byte) 1 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 utoa10w::$9 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 utoa10w::$9 ] ) always clobbers reg byte a +Statement [55] (word) utoa10w::value#1 ← (word) utoa10w::value#10 - *((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$9) [ utoa10w::i#2 utoa10w::dst#11 utoa10w::value#1 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::dst#11 utoa10w::value#1 utoa10w::digit#1 ] ) always clobbers reg byte a Statement [57] (byte~) utoa16w::$0 ← > (word) utoa16w::value#5 [ utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] ( main:2::utoa16w:13 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:16 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:19 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:22 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:25 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] ) always clobbers reg byte a Statement [58] (byte) utoa16n::nybble#0 ← (byte~) utoa16w::$0 >> (byte) 4 [ utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] ( main:2::utoa16w:13 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:16 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:19 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:22 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:25 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] ) always clobbers reg byte a Statement [62] (byte~) utoa16w::$4 ← > (word) utoa16w::value#5 [ utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] ( main:2::utoa16w:13 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:16 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:19 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:22 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:25 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] ) always clobbers reg byte a @@ -2097,14 +2100,14 @@ Statement [34] if(*((const byte[]) main::msg#0 + (byte) main::i#1)!=(byte) 0) go Statement [37] (byte~) utoa10w::$8 ← (byte) utoa10w::i#2 << (byte) 1 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 utoa10w::$8 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 utoa10w::$8 ] ) always clobbers reg byte a Statement [38] if((word) utoa10w::value#10>=*((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$8)) goto utoa10w::@2 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 ] ) always clobbers reg byte a Statement [39] (byte~) utoa10w::$2 ← (byte) utoa10w::i#2 & (byte) 1 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 utoa10w::$2 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#3 utoa10w::bStarted#2 utoa10w::dst#11 utoa10w::$2 ] ) always clobbers reg byte a -Statement [42] *((byte*) utoa10w::dst#11) ← *((const byte[]) DIGITS#0 + (byte) utoa10w::digit#3) [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 ] ) always clobbers reg byte a reg byte y +Statement [42] *((byte*) utoa10w::dst#11) ← *((const byte[]) DIGITS#0 + (byte) utoa10w::digit#3) [ utoa10w::i#2 utoa10w::value#10 utoa10w::bStarted#2 utoa10w::dst#11 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::bStarted#2 utoa10w::dst#11 ] ) always clobbers reg byte a reg byte y Statement [48] (byte~) utoa10w::$0 ← (byte)(word) utoa10w::value#10 [ utoa10w::dst#4 utoa10w::$0 ] ( main:2::utoa10w:30 [ utoa10w::dst#4 utoa10w::$0 ] ) always clobbers reg byte a Statement [49] *((byte*) utoa10w::dst#4) ← *((const byte[]) DIGITS#0 + (byte~) utoa10w::$0) [ utoa10w::dst#4 ] ( main:2::utoa10w:30 [ utoa10w::dst#4 ] ) always clobbers reg byte a reg byte y Statement [50] (byte*) utoa10w::dst#2 ← ++ (byte*) utoa10w::dst#4 [ utoa10w::dst#2 ] ( main:2::utoa10w:30 [ utoa10w::dst#2 ] ) always clobbers reg byte a Statement [51] *((byte*) utoa10w::dst#2) ← (byte) 0 [ ] ( main:2::utoa10w:30 [ ] ) always clobbers reg byte a reg byte y -Statement [53] (byte) utoa10w::digit#1 ← (byte) utoa10w::digit#3 + *((const byte[]) UTOA10_VAL#0 + (byte) utoa10w::i#2) [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::digit#1 ] ) always clobbers reg byte a -Statement [54] (byte~) utoa10w::$9 ← (byte) utoa10w::i#2 << (byte) 1 [ utoa10w::value#10 utoa10w::digit#1 utoa10w::$9 ] ( main:2::utoa10w:30 [ utoa10w::value#10 utoa10w::digit#1 utoa10w::$9 ] ) always clobbers reg byte a -Statement [55] (word) utoa10w::value#1 ← (word) utoa10w::value#10 - *((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$9) [ utoa10w::value#1 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::value#1 utoa10w::digit#1 ] ) always clobbers reg byte a +Statement [53] (byte) utoa10w::digit#1 ← (byte) utoa10w::digit#3 + *((const byte[]) UTOA10_VAL#0 + (byte) utoa10w::i#2) [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 ] ) always clobbers reg byte a +Statement [54] (byte~) utoa10w::$9 ← (byte) utoa10w::i#2 << (byte) 1 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 utoa10w::$9 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::value#10 utoa10w::dst#11 utoa10w::digit#1 utoa10w::$9 ] ) always clobbers reg byte a +Statement [55] (word) utoa10w::value#1 ← (word) utoa10w::value#10 - *((const word[]) UTOA10_SUB#0 + (byte~) utoa10w::$9) [ utoa10w::i#2 utoa10w::dst#11 utoa10w::value#1 utoa10w::digit#1 ] ( main:2::utoa10w:30 [ utoa10w::i#2 utoa10w::dst#11 utoa10w::value#1 utoa10w::digit#1 ] ) always clobbers reg byte a Statement [57] (byte~) utoa16w::$0 ← > (word) utoa16w::value#5 [ utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] ( main:2::utoa16w:13 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:16 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:19 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:22 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] main:2::utoa16w:25 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::$0 ] ) always clobbers reg byte a Statement [58] (byte) utoa16n::nybble#0 ← (byte~) utoa16w::$0 >> (byte) 4 [ utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] ( main:2::utoa16w:13 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:16 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:19 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:22 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] main:2::utoa16w:25 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16n::nybble#0 ] ) always clobbers reg byte a Statement [62] (byte~) utoa16w::$4 ← > (word) utoa16w::value#5 [ utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] ( main:2::utoa16w:13 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:16 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:19 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:22 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] main:2::utoa16w:25 [ main::time_start#0 utoa16w::value#5 utoa16w::dst#5 utoa16w::started#1 utoa16w::$4 ] ) always clobbers reg byte a @@ -2119,7 +2122,7 @@ Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg by Potential registers zp ZP_BYTE:3 [ utoa10w::i#2 utoa10w::i#1 ] : zp ZP_BYTE:3 , reg byte x , Potential registers zp ZP_WORD:4 [ utoa10w::value#10 utoa10w::value#0 utoa10w::value#1 ] : zp ZP_WORD:4 , Potential registers zp ZP_BYTE:6 [ utoa10w::digit#3 utoa10w::digit#7 utoa10w::digit#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 [ utoa10w::bStarted#2 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ utoa10w::bStarted#2 ] : zp ZP_BYTE:7 , reg byte x , Potential registers zp ZP_WORD:8 [ utoa10w::dst#7 utoa10w::dst#11 utoa10w::dst#4 utoa10w::dst#1 ] : zp ZP_WORD:8 , Potential registers zp ZP_WORD:10 [ utoa16w::value#5 ] : zp ZP_WORD:10 , Potential registers zp ZP_WORD:12 [ utoa16w::dst#5 utoa16w::dst#1 utoa16w::dst#2 utoa16w::dst#3 utoa16w::dst#4 utoa16w::dst#0 ] : zp ZP_WORD:12 , @@ -2147,7 +2150,7 @@ Potential registers zp ZP_BYTE:36 [ utoa16w::$8 ] : zp ZP_BYTE:36 , reg byte a , Potential registers zp ZP_BYTE:37 [ utoa16w::$12 ] : zp ZP_BYTE:37 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [utoa10w] 638.54: zp ZP_WORD:8 [ utoa10w::dst#7 utoa10w::dst#11 utoa10w::dst#4 utoa10w::dst#1 ] 230.29: zp ZP_WORD:4 [ utoa10w::value#10 utoa10w::value#0 utoa10w::value#1 ] 218.83: zp ZP_BYTE:6 [ utoa10w::digit#3 utoa10w::digit#7 utoa10w::digit#1 ] 206.59: zp ZP_BYTE:3 [ utoa10w::i#2 utoa10w::i#1 ] 202: zp ZP_BYTE:24 [ utoa10w::$8 ] 202: zp ZP_BYTE:25 [ utoa10w::$2 ] 202: zp ZP_BYTE:29 [ utoa10w::$9 ] 20.2: zp ZP_BYTE:7 [ utoa10w::bStarted#2 ] 4: zp ZP_BYTE:26 [ utoa10w::$0 ] 4: zp ZP_WORD:27 [ utoa10w::dst#2 ] +Uplift Scope [utoa10w] 637.1: zp ZP_WORD:8 [ utoa10w::dst#7 utoa10w::dst#11 utoa10w::dst#4 utoa10w::dst#1 ] 244.71: zp ZP_WORD:4 [ utoa10w::value#10 utoa10w::value#0 utoa10w::value#1 ] 218.83: zp ZP_BYTE:6 [ utoa10w::digit#3 utoa10w::digit#7 utoa10w::digit#1 ] 213.65: zp ZP_BYTE:3 [ utoa10w::i#2 utoa10w::i#1 ] 202: zp ZP_BYTE:24 [ utoa10w::$8 ] 202: zp ZP_BYTE:25 [ utoa10w::$2 ] 202: zp ZP_BYTE:29 [ utoa10w::$9 ] 25.25: zp ZP_BYTE:7 [ utoa10w::bStarted#2 ] 4: zp ZP_BYTE:26 [ utoa10w::$0 ] 4: zp ZP_WORD:27 [ utoa10w::dst#2 ] Uplift Scope [main] 353.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 202: zp ZP_BYTE:19 [ main::$2 ] 202: zp ZP_BYTE:20 [ main::rst#0 ] 101: zp ZP_BYTE:18 [ main::$1 ] 11: zp ZP_BYTE:22 [ main::time_end#0 ] 11: zp ZP_BYTE:23 [ main::time#0 ] 1.29: zp ZP_BYTE:21 [ main::time_start#0 ] Uplift Scope [utoa16w] 112.11: zp ZP_WORD:12 [ utoa16w::dst#5 utoa16w::dst#1 utoa16w::dst#2 utoa16w::dst#3 utoa16w::dst#4 utoa16w::dst#0 ] 4: zp ZP_BYTE:30 [ utoa16w::$0 ] 4: zp ZP_BYTE:33 [ utoa16w::$4 ] 4: zp ZP_BYTE:36 [ utoa16w::$8 ] 4: zp ZP_BYTE:37 [ utoa16w::$12 ] 1.33: zp ZP_BYTE:32 [ utoa16w::started#1 ] 1.33: zp ZP_BYTE:35 [ utoa16w::started#2 ] 0.5: zp ZP_WORD:10 [ utoa16w::value#5 ] Uplift Scope [utoa16n] 14.4: zp ZP_BYTE:14 [ utoa16n::nybble#4 utoa16n::nybble#0 utoa16n::nybble#1 utoa16n::nybble#2 utoa16n::nybble#3 ] 11.14: zp ZP_BYTE:15 [ utoa16n::return#4 utoa16n::started#7 utoa16n::started#1 utoa16n::started#2 ] 4: zp ZP_BYTE:31 [ utoa16n::return#0 ] 4: zp ZP_BYTE:34 [ utoa16n::return#1 ] @@ -2155,7 +2158,7 @@ Uplift Scope [cls] 33: zp ZP_WORD:16 [ cls::sc#2 cls::sc#1 ] Uplift Scope [] Uplifting [utoa10w] best 28961 combination zp ZP_WORD:8 [ utoa10w::dst#7 utoa10w::dst#11 utoa10w::dst#4 utoa10w::dst#1 ] zp ZP_WORD:4 [ utoa10w::value#10 utoa10w::value#0 utoa10w::value#1 ] zp ZP_BYTE:6 [ utoa10w::digit#3 utoa10w::digit#7 utoa10w::digit#1 ] reg byte x [ utoa10w::i#2 utoa10w::i#1 ] reg byte a [ utoa10w::$8 ] reg byte a [ utoa10w::$2 ] zp ZP_BYTE:29 [ utoa10w::$9 ] zp ZP_BYTE:7 [ utoa10w::bStarted#2 ] zp ZP_BYTE:26 [ utoa10w::$0 ] zp ZP_WORD:27 [ utoa10w::dst#2 ] -Limited combination testing to 100 combinations of 4608 possible. +Limited combination testing to 100 combinations of 3072 possible. Uplifting [main] best 26561 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$2 ] reg byte a [ main::rst#0 ] zp ZP_BYTE:18 [ main::$1 ] zp ZP_BYTE:22 [ main::time_end#0 ] zp ZP_BYTE:23 [ main::time#0 ] zp ZP_BYTE:21 [ main::time_start#0 ] Limited combination testing to 100 combinations of 3456 possible. Uplifting [utoa16w] best 26537 combination zp ZP_WORD:12 [ utoa16w::dst#5 utoa16w::dst#1 utoa16w::dst#2 utoa16w::dst#3 utoa16w::dst#4 utoa16w::dst#0 ] reg byte a [ utoa16w::$0 ] reg byte a [ utoa16w::$4 ] reg byte a [ utoa16w::$8 ] reg byte a [ utoa16w::$12 ] zp ZP_BYTE:32 [ utoa16w::started#1 ] zp ZP_BYTE:35 [ utoa16w::started#2 ] zp ZP_WORD:10 [ utoa16w::value#5 ] @@ -2420,8 +2423,10 @@ utoa10w: { // [36] phi from utoa10w::@6 to utoa10w::@1 [phi:utoa10w::@6->utoa10w::@1] b1_from_b6: // [36] phi (byte*) utoa10w::dst#11 = (byte*) utoa10w::dst#4 [phi:utoa10w::@6->utoa10w::@1#0] -- register_copy - // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#7 [phi:utoa10w::@6->utoa10w::@1#1] -- register_copy - // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#1 [phi:utoa10w::@6->utoa10w::@1#2] -- register_copy + // [36] phi (byte) utoa10w::bStarted#2 = (byte) utoa10w::bStarted#2 [phi:utoa10w::@6->utoa10w::@1#1] -- register_copy + // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#7 [phi:utoa10w::@6->utoa10w::@1#2] -- register_copy + // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#10 [phi:utoa10w::@6->utoa10w::@1#3] -- register_copy + // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#1 [phi:utoa10w::@6->utoa10w::@1#4] -- register_copy jmp b1 // utoa10w::@1 b1: @@ -2538,11 +2543,13 @@ utoa10w: { sta value+1 // [36] phi from utoa10w::@2 to utoa10w::@1 [phi:utoa10w::@2->utoa10w::@1] b1_from_b2: - // [36] phi (byte) utoa10w::bStarted#2 = (byte) 1 [phi:utoa10w::@2->utoa10w::@1#0] -- vbuz1=vbuc1 + // [36] phi (byte*) utoa10w::dst#11 = (byte*) utoa10w::dst#11 [phi:utoa10w::@2->utoa10w::@1#0] -- register_copy + // [36] phi (byte) utoa10w::bStarted#2 = (byte) 1 [phi:utoa10w::@2->utoa10w::@1#1] -- vbuz1=vbuc1 lda #1 sta bStarted - // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#1 [phi:utoa10w::@2->utoa10w::@1#1] -- register_copy - // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#1 [phi:utoa10w::@2->utoa10w::@1#2] -- register_copy + // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#1 [phi:utoa10w::@2->utoa10w::@1#2] -- register_copy + // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#1 [phi:utoa10w::@2->utoa10w::@1#3] -- register_copy + // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#2 [phi:utoa10w::@2->utoa10w::@1#4] -- register_copy jmp b1 } // utoa16w @@ -2890,24 +2897,24 @@ FINAL SYMBOL TABLE (label) utoa10w::@8 (label) utoa10w::@return (byte) utoa10w::bStarted -(byte) utoa10w::bStarted#2 bStarted zp ZP_BYTE:5 20.2 +(byte) utoa10w::bStarted#2 bStarted zp ZP_BYTE:5 25.25 (byte) utoa10w::digit (byte) utoa10w::digit#1 digit zp ZP_BYTE:4 67.33333333333333 (byte) utoa10w::digit#3 digit zp ZP_BYTE:4 84.16666666666666 (byte) utoa10w::digit#7 digit zp ZP_BYTE:4 67.33333333333333 (byte*) utoa10w::dst (byte*) utoa10w::dst#1 dst zp ZP_WORD:6 202.0 -(byte*) utoa10w::dst#11 dst zp ZP_WORD:6 72.14285714285714 +(byte*) utoa10w::dst#11 dst zp ZP_WORD:6 70.7 (byte*) utoa10w::dst#2 dst zp ZP_WORD:6 4.0 (byte*) utoa10w::dst#4 dst zp ZP_WORD:6 61.39999999999999 (byte*) utoa10w::dst#7 dst zp ZP_WORD:6 303.0 (byte) utoa10w::i (byte) utoa10w::i#1 reg byte x 151.5 -(byte) utoa10w::i#2 reg byte x 55.090909090909086 +(byte) utoa10w::i#2 reg byte x 62.153846153846146 (word) utoa10w::value (word) utoa10w::value#0 value zp ZP_WORD:2 6.5 (word) utoa10w::value#1 value zp ZP_WORD:2 202.0 -(word) utoa10w::value#10 value zp ZP_WORD:2 21.78571428571429 +(word) utoa10w::value#10 value zp ZP_WORD:2 36.214285714285715 (byte()) utoa16n((byte) utoa16n::nybble , (word**) utoa16n::dst , (byte) utoa16n::started) (label) utoa16n::@1 (label) utoa16n::@2 @@ -3195,8 +3202,10 @@ utoa10w: { tax // [36] phi from utoa10w::@6 to utoa10w::@1 [phi:utoa10w::@6->utoa10w::@1] // [36] phi (byte*) utoa10w::dst#11 = (byte*) utoa10w::dst#4 [phi:utoa10w::@6->utoa10w::@1#0] -- register_copy - // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#7 [phi:utoa10w::@6->utoa10w::@1#1] -- register_copy - // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#1 [phi:utoa10w::@6->utoa10w::@1#2] -- register_copy + // [36] phi (byte) utoa10w::bStarted#2 = (byte) utoa10w::bStarted#2 [phi:utoa10w::@6->utoa10w::@1#1] -- register_copy + // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#7 [phi:utoa10w::@6->utoa10w::@1#2] -- register_copy + // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#10 [phi:utoa10w::@6->utoa10w::@1#3] -- register_copy + // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#1 [phi:utoa10w::@6->utoa10w::@1#4] -- register_copy // utoa10w::@1 b1: // value>=UTOA10_SUB[i] @@ -3309,11 +3318,13 @@ utoa10w: { sbc UTOA10_SUB+1,y sta value+1 // [36] phi from utoa10w::@2 to utoa10w::@1 [phi:utoa10w::@2->utoa10w::@1] - // [36] phi (byte) utoa10w::bStarted#2 = (byte) 1 [phi:utoa10w::@2->utoa10w::@1#0] -- vbuz1=vbuc1 + // [36] phi (byte*) utoa10w::dst#11 = (byte*) utoa10w::dst#11 [phi:utoa10w::@2->utoa10w::@1#0] -- register_copy + // [36] phi (byte) utoa10w::bStarted#2 = (byte) 1 [phi:utoa10w::@2->utoa10w::@1#1] -- vbuz1=vbuc1 lda #1 sta bStarted - // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#1 [phi:utoa10w::@2->utoa10w::@1#1] -- register_copy - // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#1 [phi:utoa10w::@2->utoa10w::@1#2] -- register_copy + // [36] phi (byte) utoa10w::digit#3 = (byte) utoa10w::digit#1 [phi:utoa10w::@2->utoa10w::@1#2] -- register_copy + // [36] phi (word) utoa10w::value#10 = (word) utoa10w::value#1 [phi:utoa10w::@2->utoa10w::@1#3] -- register_copy + // [36] phi (byte) utoa10w::i#2 = (byte) utoa10w::i#2 [phi:utoa10w::@2->utoa10w::@1#4] -- register_copy jmp b1 } // utoa16w diff --git a/src/test/ref/hex2dec.sym b/src/test/ref/hex2dec.sym index e84196512..2e02afc53 100644 --- a/src/test/ref/hex2dec.sym +++ b/src/test/ref/hex2dec.sym @@ -61,24 +61,24 @@ (label) utoa10w::@8 (label) utoa10w::@return (byte) utoa10w::bStarted -(byte) utoa10w::bStarted#2 bStarted zp ZP_BYTE:5 20.2 +(byte) utoa10w::bStarted#2 bStarted zp ZP_BYTE:5 25.25 (byte) utoa10w::digit (byte) utoa10w::digit#1 digit zp ZP_BYTE:4 67.33333333333333 (byte) utoa10w::digit#3 digit zp ZP_BYTE:4 84.16666666666666 (byte) utoa10w::digit#7 digit zp ZP_BYTE:4 67.33333333333333 (byte*) utoa10w::dst (byte*) utoa10w::dst#1 dst zp ZP_WORD:6 202.0 -(byte*) utoa10w::dst#11 dst zp ZP_WORD:6 72.14285714285714 +(byte*) utoa10w::dst#11 dst zp ZP_WORD:6 70.7 (byte*) utoa10w::dst#2 dst zp ZP_WORD:6 4.0 (byte*) utoa10w::dst#4 dst zp ZP_WORD:6 61.39999999999999 (byte*) utoa10w::dst#7 dst zp ZP_WORD:6 303.0 (byte) utoa10w::i (byte) utoa10w::i#1 reg byte x 151.5 -(byte) utoa10w::i#2 reg byte x 55.090909090909086 +(byte) utoa10w::i#2 reg byte x 62.153846153846146 (word) utoa10w::value (word) utoa10w::value#0 value zp ZP_WORD:2 6.5 (word) utoa10w::value#1 value zp ZP_WORD:2 202.0 -(word) utoa10w::value#10 value zp ZP_WORD:2 21.78571428571429 +(word) utoa10w::value#10 value zp ZP_WORD:2 36.214285714285715 (byte()) utoa16n((byte) utoa16n::nybble , (word**) utoa16n::dst , (byte) utoa16n::started) (label) utoa16n::@1 (label) utoa16n::@2 diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index 532f11906..b6ce59126 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -412,11 +412,6 @@ Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#9 (byte*) print_c Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#8 Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#21 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#14 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/inline-asm-clobber-none.log b/src/test/ref/inline-asm-clobber-none.log index ca337c239..aa8a9b57d 100644 --- a/src/test/ref/inline-asm-clobber-none.log +++ b/src/test/ref/inline-asm-clobber-none.log @@ -85,12 +85,11 @@ SYMBOL TABLE SSA Alias (byte) main::j#2 = (byte) main::j#3 Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::j#2 -Self Phi Eliminated (byte) main::i#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::j#2 (byte) main::j#4 Identical Phi Values (byte) main::i#2 (byte) main::i#5 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::i#5 (byte) main::i#6 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$0 [9] if((byte) main::k#1!=rangelast(0,$a)) goto main::@3 Simple Condition (bool~) main::$1 [13] if((byte) main::j#1!=rangelast(0,$a)) goto main::@2 Simple Condition (bool~) main::$2 [17] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1 @@ -103,7 +102,7 @@ Resolved ranged next value [7] main::k#1 ← ++ main::k#2 to ++ Resolved ranged comparison value [9] if(main::k#1!=rangelast(0,$a)) goto main::@3 to (number) $b Resolved ranged next value [11] main::j#1 ← ++ main::j#4 to ++ Resolved ranged comparison value [13] if(main::j#1!=rangelast(0,$a)) goto main::@2 to (number) $b -Resolved ranged next value [15] main::i#1 ← ++ main::i#5 to ++ +Resolved ranged next value [15] main::i#1 ← ++ main::i#6 to ++ Resolved ranged comparison value [17] if(main::i#1!=rangelast(0,$a)) goto main::@1 to (number) $b Adding number conversion cast (unumber) $b in if((byte) main::k#1!=(number) $b) goto main::@3 Adding number conversion cast (unumber) $b in if((byte) main::j#1!=(number) $b) goto main::@2 @@ -117,10 +116,6 @@ Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) main::i#5 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) main::i#5 (byte) main::i#6 -Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 Inlining constant with var siblings (const byte) main::k#0 diff --git a/src/test/ref/inline-asm-clobber.log b/src/test/ref/inline-asm-clobber.log index d3c2a76ab..71af24da9 100644 --- a/src/test/ref/inline-asm-clobber.log +++ b/src/test/ref/inline-asm-clobber.log @@ -106,9 +106,6 @@ Successful SSA optimization PassNCastSimplification Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::k#2 = (byte) main::k#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::i#2 -Self Phi Eliminated (byte) main::k#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::i#2 (byte) main::i#4 Identical Phi Values (byte) main::k#2 (byte) main::k#4 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/inline-function-level2.log b/src/test/ref/inline-function-level2.log index 8b7221d2d..88f4598eb 100644 --- a/src/test/ref/inline-function-level2.log +++ b/src/test/ref/inline-function-level2.log @@ -363,13 +363,6 @@ Alias (byte*) cur_line#11 = (byte*) cur_line#3 (byte*) cur_line#4 Alias (byte*) cur_line#15 = (byte*) cur_line#5 Alias (byte*) cur_line#12 = (byte*) cur_line#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::line1_ch#1 -Self Phi Eliminated (byte) main::line1_xadd#1 -Self Phi Eliminated (byte) main::line1_ysize#1 -Self Phi Eliminated (byte) main::line2_ch#1 -Self Phi Eliminated (byte) main::line2_xadd#1 -Self Phi Eliminated (byte) main::line2_ysize#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::line1_ch#1 (byte) main::line1_ch#0 Identical Phi Values (byte) main::line1_xadd#1 (byte) main::line1_xadd#0 Identical Phi Values (byte) main::line1_ysize#1 (byte) main::line1_ysize#0 diff --git a/src/test/ref/inline-function-print.log b/src/test/ref/inline-function-print.log index c9cd44cb3..2cb0676a5 100644 --- a/src/test/ref/inline-function-print.log +++ b/src/test/ref/inline-function-print.log @@ -155,11 +155,6 @@ Alias (byte*) main::hello#0 = (byte*) main::print1_msg#0 (byte*) main::print1_ms Alias (byte*) main::print1_at#0 = (byte*) main::print1_at#2 Alias (byte*) main::print2_at#0 = (byte*~) main::$1 (byte*) main::print2_at#2 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::print1_msg#1 -Self Phi Eliminated (byte*) main::print1_at#1 -Self Phi Eliminated (byte*) main::print2_msg#1 -Self Phi Eliminated (byte*) main::print2_at#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) main::print1_msg#1 (byte*) main::hello#0 Identical Phi Values (byte*) main::print1_at#1 (byte*) main::print1_at#0 Identical Phi Values (byte*) main::print2_msg#1 (byte*) main::hello#0 diff --git a/src/test/ref/inline-kasm-clobber.log b/src/test/ref/inline-kasm-clobber.log index f0073969a..945eed313 100644 --- a/src/test/ref/inline-kasm-clobber.log +++ b/src/test/ref/inline-kasm-clobber.log @@ -95,12 +95,11 @@ Successful SSA optimization PassNCastSimplification Alias (byte) main::l#2 = (byte) main::l#3 Alias (byte) main::k#2 = (byte) main::k#3 (byte) main::k#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::l#2 -Self Phi Eliminated (byte) main::k#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::l#2 (byte) main::l#4 Identical Phi Values (byte) main::k#2 (byte) main::k#5 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::k#5 (byte) main::k#6 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$0 [10] if((byte) main::m#1!=rangelast(0,$a)) goto main::@3 Simple Condition (bool~) main::$1 [14] if((byte) main::l#1!=rangelast(0,$a)) goto main::@2 Simple Condition (bool~) main::$2 [18] if((byte) main::k#1!=rangelast(0,$a)) goto main::@1 @@ -114,7 +113,7 @@ Resolved ranged next value [8] main::m#1 ← ++ main::m#2 to ++ Resolved ranged comparison value [10] if(main::m#1!=rangelast(0,$a)) goto main::@3 to (number) $b Resolved ranged next value [12] main::l#1 ← ++ main::l#4 to ++ Resolved ranged comparison value [14] if(main::l#1!=rangelast(0,$a)) goto main::@2 to (number) $b -Resolved ranged next value [16] main::k#1 ← ++ main::k#5 to ++ +Resolved ranged next value [16] main::k#1 ← ++ main::k#6 to ++ Resolved ranged comparison value [18] if(main::k#1!=rangelast(0,$a)) goto main::@1 to (number) $b Adding number conversion cast (unumber) $b in if((byte) main::m#1!=(number) $b) goto main::@3 Adding number conversion cast (unumber) $b in if((byte) main::l#1!=(number) $b) goto main::@2 @@ -128,10 +127,6 @@ Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) main::k#5 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) main::k#5 (byte) main::k#6 -Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::k#0 Inlining constant with var siblings (const byte) main::l#0 Inlining constant with var siblings (const byte) main::m#0 diff --git a/src/test/ref/inline-word.log b/src/test/ref/inline-word.log index a0f6d92e8..7ae2f6f8b 100644 --- a/src/test/ref/inline-word.log +++ b/src/test/ref/inline-word.log @@ -102,8 +102,6 @@ Alias (word) main::w#0 = (word~) main::$8 Alias (byte*) main::sc#0 = (byte*~) main::$5 Alias (byte) main::h#2 = (byte) main::h#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::h#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::h#2 (byte) main::h#4 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$6 [18] if((byte) main::l#1!=rangelast(4,7)) goto main::@2 diff --git a/src/test/ref/int-conversion.log b/src/test/ref/int-conversion.log index d452db1ad..b15ed0772 100644 --- a/src/test/ref/int-conversion.log +++ b/src/test/ref/int-conversion.log @@ -927,8 +927,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) assertType::t1#42 = (byte) assertType::t1#43 Alias (byte) idx#105 = (byte) idx#107 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) idx#110 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) idx#114 (byte) idx#0 Identical Phi Values (byte) idx#110 (byte) idx#114 Identical Phi Values (byte) idx#1 (byte) idx#10 diff --git a/src/test/ref/int-literals.log b/src/test/ref/int-literals.log index 1b4c1a0d3..fe9bd87e2 100644 --- a/src/test/ref/int-literals.log +++ b/src/test/ref/int-literals.log @@ -419,8 +419,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) assertType::t1#15 = (byte) assertType::t1#16 Alias (byte) idx#41 = (byte) idx#43 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) idx#46 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) idx#50 (byte) idx#0 Identical Phi Values (byte) idx#46 (byte) idx#50 Identical Phi Values (byte) idx#1 (byte) idx#18 diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 5b4a6a673..f593715bf 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -157,13 +157,12 @@ Alias (byte) main::x#2 = (byte) main::x#5 (byte) main::x#3 Alias (byte) col1#1 = (byte) col1#4 (byte) col1#2 Alias (byte) col1#0 = (byte) col1#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::y#2 -Self Phi Eliminated (byte) main::x#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::y#2 (byte) main::y#4 Identical Phi Values (byte) main::x#2 (byte) main::x#4 Identical Phi Values (byte) col1#3 (byte) col1#0 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::x#4 (byte) main::x#6 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$2 [17] if((byte) main::a#1!=rangelast(0,$a)) goto main::@6 Simple Condition (bool~) main::$3 [21] if((byte) main::y#1!=rangelast(0,$a)) goto main::@5 Simple Condition (bool~) main::$4 [25] if((byte) main::x#1!=rangelast(0,$a)) goto main::@4 @@ -184,7 +183,7 @@ Resolved ranged next value [15] main::a#1 ← ++ main::a#2 to ++ Resolved ranged comparison value [17] if(main::a#1!=rangelast(0,$a)) goto main::@6 to (number) $b Resolved ranged next value [19] main::y#1 ← ++ main::y#4 to ++ Resolved ranged comparison value [21] if(main::y#1!=rangelast(0,$a)) goto main::@5 to (number) $b -Resolved ranged next value [23] main::x#1 ← ++ main::x#4 to ++ +Resolved ranged next value [23] main::x#1 ← ++ main::x#6 to ++ Resolved ranged comparison value [25] if(main::x#1!=rangelast(0,$a)) goto main::@4 to (number) $b Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -200,10 +199,6 @@ Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) main::x#4 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) main::x#4 (byte) main::x#6 -Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::y#0 Inlining constant with var siblings (const byte) main::a#0 diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index c5d1a06fd..d0722eeca 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -420,15 +420,6 @@ Alias (byte) sub_main::i#2 = (byte) sub_main::i#5 (byte) sub_main::i#3 Alias (byte) sub_irq::j#2 = (byte) sub_irq::j#3 Alias (byte) sub_irq::i#2 = (byte) sub_irq::i#5 (byte) sub_irq::i#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::i#2 -Self Phi Eliminated (byte) main::j#2 -Self Phi Eliminated (byte) irq::i#2 -Self Phi Eliminated (byte) irq::j#2 -Self Phi Eliminated (byte) sub_main::i#2 -Self Phi Eliminated (byte) sub_main::j#2 -Self Phi Eliminated (byte) sub_irq::i#2 -Self Phi Eliminated (byte) sub_irq::j#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::i#2 (byte) main::i#5 Identical Phi Values (byte) main::j#2 (byte) main::j#5 Identical Phi Values (byte) irq::i#2 (byte) irq::i#4 @@ -438,6 +429,11 @@ Identical Phi Values (byte) sub_main::j#2 (byte) sub_main::j#4 Identical Phi Values (byte) sub_irq::i#2 (byte) sub_irq::i#4 Identical Phi Values (byte) sub_irq::j#2 (byte) sub_irq::j#4 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::i#5 (byte) main::i#7 +Identical Phi Values (byte) irq::i#4 (byte) irq::i#7 +Identical Phi Values (byte) sub_main::i#4 (byte) sub_main::i#6 +Identical Phi Values (byte) sub_irq::i#4 (byte) sub_irq::i#6 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$4 [32] if((byte) main::k#1!=rangelast(0,$a)) goto main::@6 Simple Condition (bool~) main::$5 [36] if((byte) main::j#1!=rangelast(0,$a)) goto main::@5 Simple Condition (bool~) main::$6 [40] if((byte) main::i#1!=rangelast(0,$a)) goto main::@4 @@ -483,25 +479,25 @@ Resolved ranged next value [30] main::k#1 ← ++ main::k#2 to ++ Resolved ranged comparison value [32] if(main::k#1!=rangelast(0,$a)) goto main::@6 to (number) $b Resolved ranged next value [34] main::j#1 ← ++ main::j#5 to ++ Resolved ranged comparison value [36] if(main::j#1!=rangelast(0,$a)) goto main::@5 to (number) $b -Resolved ranged next value [38] main::i#1 ← ++ main::i#5 to ++ +Resolved ranged next value [38] main::i#1 ← ++ main::i#7 to ++ Resolved ranged comparison value [40] if(main::i#1!=rangelast(0,$a)) goto main::@4 to (number) $b Resolved ranged next value [54] irq::k#1 ← ++ irq::k#2 to ++ Resolved ranged comparison value [56] if(irq::k#1!=rangelast(0,$a)) goto irq::@3 to (number) $b Resolved ranged next value [58] irq::j#1 ← ++ irq::j#4 to ++ Resolved ranged comparison value [60] if(irq::j#1!=rangelast(0,$a)) goto irq::@2 to (number) $b -Resolved ranged next value [62] irq::i#1 ← ++ irq::i#4 to ++ +Resolved ranged next value [62] irq::i#1 ← ++ irq::i#7 to ++ Resolved ranged comparison value [64] if(irq::i#1!=rangelast(0,$a)) goto irq::@1 to (number) $b Resolved ranged next value [77] sub_main::k#1 ← ++ sub_main::k#2 to ++ Resolved ranged comparison value [79] if(sub_main::k#1!=rangelast(0,$a)) goto sub_main::@3 to (number) $b Resolved ranged next value [81] sub_main::j#1 ← ++ sub_main::j#4 to ++ Resolved ranged comparison value [83] if(sub_main::j#1!=rangelast(0,$a)) goto sub_main::@2 to (number) $b -Resolved ranged next value [85] sub_main::i#1 ← ++ sub_main::i#4 to ++ +Resolved ranged next value [85] sub_main::i#1 ← ++ sub_main::i#6 to ++ Resolved ranged comparison value [87] if(sub_main::i#1!=rangelast(0,$a)) goto sub_main::@1 to (number) $b Resolved ranged next value [98] sub_irq::k#1 ← ++ sub_irq::k#2 to ++ Resolved ranged comparison value [100] if(sub_irq::k#1!=rangelast(0,$a)) goto sub_irq::@3 to (number) $b Resolved ranged next value [102] sub_irq::j#1 ← ++ sub_irq::j#4 to ++ Resolved ranged comparison value [104] if(sub_irq::j#1!=rangelast(0,$a)) goto sub_irq::@2 to (number) $b -Resolved ranged next value [106] sub_irq::i#1 ← ++ sub_irq::i#4 to ++ +Resolved ranged next value [106] sub_irq::i#1 ← ++ sub_irq::i#6 to ++ Resolved ranged comparison value [108] if(sub_irq::i#1!=rangelast(0,$a)) goto sub_irq::@1 to (number) $b Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -544,16 +540,6 @@ Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) main::i#5 -Self Phi Eliminated (byte) irq::i#4 -Self Phi Eliminated (byte) sub_main::i#4 -Self Phi Eliminated (byte) sub_irq::i#4 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) main::i#5 (byte) main::i#7 -Identical Phi Values (byte) irq::i#4 (byte) irq::i#7 -Identical Phi Values (byte) sub_main::i#4 (byte) sub_main::i#6 -Identical Phi Values (byte) sub_irq::i#4 (byte) sub_irq::i#6 -Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 Inlining constant with var siblings (const byte) main::k#0 diff --git a/src/test/ref/irq-volatile-bool-problem.cfg b/src/test/ref/irq-volatile-bool-problem.cfg index 0a80bec65..acb747f8b 100644 --- a/src/test/ref/irq-volatile-bool-problem.cfg +++ b/src/test/ref/irq-volatile-bool-problem.cfg @@ -20,7 +20,7 @@ main: scope:[main] from @2 asm { cli } to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [12] (bool) framedone#1 ← phi( main/(bool) framedone#11 main::@3/(bool) framedone#0 ) + [12] (bool) framedone#1 ← phi( main/(bool) framedone#11 main::@2/(bool) framedone#1 main::@3/(bool) framedone#0 ) to:main::@2 main::@2: scope:[main] from main::@1 [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 diff --git a/src/test/ref/irq-volatile-bool-problem.log b/src/test/ref/irq-volatile-bool-problem.log index 9ff22f327..bbd509a4e 100644 --- a/src/test/ref/irq-volatile-bool-problem.log +++ b/src/test/ref/irq-volatile-bool-problem.log @@ -182,8 +182,6 @@ Alias (bool) framedone#10 = (bool) framedone#7 (bool) framedone#4 Alias (bool) framedone#11 = (bool) framedone#2 Alias (bool) framedone#5 = (bool) framedone#8 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (bool) framedone#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (bool) framedone#12 (bool) framedone#11 Identical Phi Values (bool) framedone#14 (bool) framedone#11 Identical Phi Values (bool) framedone#5 (bool) framedone#1 @@ -219,6 +217,7 @@ Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq() Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@9(between main::@2 and main::@1) Added new block during phi lifting irq::@3(between irq and irq::@1) Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 @@ -229,11 +228,13 @@ Calls in [] to main:3 Created 2 initial phi equivalence classes Coalesced [13] framedone#15 ← framedone#11 -Coalesced [17] framedone#16 ← framedone#0 -Coalesced [22] framedone#18 ← framedone#3 -Coalesced [26] framedone#17 ← framedone#11 +Coalesced [17] framedone#17 ← framedone#0 +Coalesced (already) [18] framedone#16 ← framedone#1 +Coalesced [23] framedone#19 ← framedone#3 +Coalesced [27] framedone#18 ← framedone#11 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @3 +Culled Empty Block (label) main::@9 Culled Empty Block (label) irq::@3 Renumbering block main::@7 to main::@3 Adding NOP phi() at start of @begin @@ -263,7 +264,7 @@ main: scope:[main] from @2 asm { cli } to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [12] (bool) framedone#1 ← phi( main/(bool) framedone#11 main::@3/(bool) framedone#0 ) + [12] (bool) framedone#1 ← phi( main/(bool) framedone#11 main::@2/(bool) framedone#1 main::@3/(bool) framedone#0 ) to:main::@2 main::@2: scope:[main] from main::@1 [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 @@ -300,7 +301,7 @@ VARIABLE REGISTER WEIGHTS (byte*) VIC_CONTROL (bool) framedone (bool) framedone#0 22.0 -(bool) framedone#1 130.0 +(bool) framedone#1 107.5 (bool) framedone#10 40.0 (bool) framedone#11 0.5 (bool) framedone#3 4.0 @@ -380,13 +381,11 @@ main: { sta KERNEL_IRQ+1 // asm { cli } cli - // [12] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] + // [12] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] b1_from_main: - b1_from_b3: - // [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@3->main::@1#0] -- register_copy - jmp b1 - // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: + b1_from_b3: + // [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -447,7 +446,7 @@ Statement [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) Statement [8] *((const byte*) RASTER#0) ← (byte) $fd [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a Statement [9] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a Statement [10] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a -Statement [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 [ ] ( main:3 [ ] ) always clobbers reg byte a +Statement [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 [ framedone#1 ] ( main:3 [ framedone#1 ] ) always clobbers reg byte a Statement [14] (bool) framedone#0 ← true [ framedone#0 ] ( main:3 [ framedone#0 ] ) always clobbers reg byte a Statement [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ framedone#11 ] ( [ framedone#11 ] ) always clobbers reg byte a Statement [17] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 [ framedone#11 ] ( [ framedone#11 ] ) always clobbers reg byte a @@ -455,13 +454,13 @@ Statement [18] (bool) framedone#3 ← false [ framedone#3 ] ( [ framedone#3 ] ) Potential registers zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] : zp ZP_BOOL:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 196.5: zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] +Uplift Scope [] 174: zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] Uplift Scope [main] Uplift Scope [irq] -Uplifting [] best 1994 combination zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] -Uplifting [main] best 1994 combination -Uplifting [irq] best 1994 combination +Uplifting [] best 1694 combination zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] +Uplifting [main] best 1694 combination +Uplifting [irq] best 1694 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -530,13 +529,11 @@ main: { sta KERNEL_IRQ+1 // asm { cli } cli - // [12] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] + // [12] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] b1_from_main: - b1_from_b3: - // [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@3->main::@1#0] -- register_copy - jmp b1 - // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: + b1_from_b3: + // [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -601,14 +598,15 @@ Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1 with b2 Replacing label b1_from_b2 with b2 +Replacing label b1_from_b3 with b2 Replacing label b1_from_irq with b1 Removing instruction b1: Removing instruction b2_from_b1: Removing instruction bend_from_b2: Removing instruction b1_from_main: Removing instruction b1_from_b2: +Removing instruction b1_from_b3: Removing instruction b1: Removing instruction b1_from_irq: Removing instruction b1_from_b2: @@ -619,16 +617,8 @@ Removing instruction b3: Removing instruction b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Skipping double jump to b2 in jmp b1_from_b3 -Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b3 to b1 -Succesful ASM optimization Pass5RelabelLongLabels Adding RTS to root block Succesful ASM optimization Pass5AddMainRts -Removing instruction jmp b2 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b1: -Succesful ASM optimization Pass5RedundantLabelElimination FINAL SYMBOL TABLE (label) @1 @@ -655,7 +645,7 @@ FINAL SYMBOL TABLE (const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265 (bool) framedone (bool) framedone#0 framedone zp ZP_BOOL:2 22.0 -(bool) framedone#1 framedone zp ZP_BOOL:2 130.0 +(bool) framedone#1 framedone zp ZP_BOOL:2 107.5 (bool) framedone#10 framedone zp ZP_BOOL:2 40.0 (bool) framedone#11 framedone zp ZP_BOOL:2 0.5 (bool) framedone#3 framedone zp ZP_BOOL:2 4.0 @@ -741,9 +731,8 @@ main: { // asm // asm { cli } cli - // [12] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] - // [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@3->main::@1#0] -- register_copy - // [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [12] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] + // [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy // main::@1 // main::@2 b2: diff --git a/src/test/ref/irq-volatile-bool-problem.sym b/src/test/ref/irq-volatile-bool-problem.sym index 55b739670..817213558 100644 --- a/src/test/ref/irq-volatile-bool-problem.sym +++ b/src/test/ref/irq-volatile-bool-problem.sym @@ -22,7 +22,7 @@ (const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265 (bool) framedone (bool) framedone#0 framedone zp ZP_BOOL:2 22.0 -(bool) framedone#1 framedone zp ZP_BOOL:2 130.0 +(bool) framedone#1 framedone zp ZP_BOOL:2 107.5 (bool) framedone#10 framedone zp ZP_BOOL:2 40.0 (bool) framedone#11 framedone zp ZP_BOOL:2 0.5 (bool) framedone#3 framedone zp ZP_BOOL:2 4.0 diff --git a/src/test/ref/line-anim.log b/src/test/ref/line-anim.log index ce7a361f4..c3338283c 100644 --- a/src/test/ref/line-anim.log +++ b/src/test/ref/line-anim.log @@ -1627,12 +1627,6 @@ Alias (byte) bitmap_init::y#2 = (byte) bitmap_init::y#3 Successful SSA optimization Pass2AliasElimination Alias (byte) point_init::point_idx#1 = (byte) point_init::point_idx#2 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#1 -Self Phi Eliminated (byte) screen_fill::ch#1 -Self Phi Eliminated (byte) screen_fill::y#2 -Self Phi Eliminated (byte*) bitmap_init::bitmap#1 -Self Phi Eliminated (byte) bitmap_clear::y#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::rem#8 (word) divr16u::rem#3 Identical Phi Values (word) divr16u::dividend#4 (word) divr16u::dividend#1 Identical Phi Values (word) divr16u::divisor#5 (word) divr16u::divisor#0 @@ -1651,6 +1645,8 @@ Identical Phi Values (byte) bitmap_clear::y#2 (byte) bitmap_clear::y#4 Identical Phi Values (byte) bitmap_plot::y#1 (byte) bitmap_plot::y#0 Identical Phi Values (word) bitmap_plot::x#1 (word) bitmap_plot::x#0 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) screen_fill::ch#2 (byte) screen_fill::ch#0 +Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [184] (byte~) point_init::$18 ← (byte) point_init::point_idx#0 * (const byte) SIZEOF_WORD Identified duplicate assignment right side [230] (byte~) point_init::$20 ← (byte) point_init::point_idx#0 * (const byte) SIZEOF_WORD Identified duplicate assignment right side [234] (byte~) point_init::$21 ← (byte) point_init::point_idx#0 * (const byte) SIZEOF_WORD @@ -1803,10 +1799,6 @@ Alias (byte~) point_init::$18 = (byte~) point_init::$17 Alias (byte~) point_init::$20 = (byte~) point_init::$19 (byte~) point_init::$21 Alias (byte~) bitmap_init::$7 = (byte~) bitmap_init::$3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) screen_fill::ch#2 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) screen_fill::ch#2 (const byte) screen_fill::ch#0 -Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) divr16s::$0 [18] if((const signed word) divr16s::dividend#0<(signed byte) 0) goto divr16s::@1 Simple Condition (bool~) divr16s::$1 [177] if((signed word) divr16s::rem#0<(signed byte) 0) goto divr16s::@1 Successful SSA optimization Pass2ConditionalJumpSimplification diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index 836be7bda..e58b57766 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -1436,16 +1436,6 @@ Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#4 (word) divr16u::divi Alias (byte) divr16u::i#2 = (byte) divr16u::i#3 (byte) divr16u::i#5 Alias (word) divr16u::dividend#0 = (word) divr16u::dividend#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#42 -Self Phi Eliminated (word) rem16u#15 -Self Phi Eliminated (dword) lin16u_gen::step#1 -Self Phi Eliminated (word) lin16u_gen::length#5 -Self Phi Eliminated (word) rem16u#18 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 diff --git a/src/test/ref/longbranch-interrupt-problem.cfg b/src/test/ref/longbranch-interrupt-problem.cfg index 19f865513..c8abf00b0 100644 --- a/src/test/ref/longbranch-interrupt-problem.cfg +++ b/src/test/ref/longbranch-interrupt-problem.cfg @@ -11,7 +11,7 @@ main: scope:[main] from @1 [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [5] (byte) col#12 ← phi( main/(byte) col#0 main::@3/(byte) col#1 ) + [5] (byte) col#12 ← phi( main/(byte) col#0 main::@2/(byte) col#12 main::@3/(byte) col#1 ) to:main::@2 main::@2: scope:[main] from main::@1 [6] if((byte) col#12<(byte) $a+(byte) 1) goto main::@1 diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index 33ef41367..7568921fc 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -133,8 +133,6 @@ Alias (byte) col#10 = (byte) col#4 Alias (byte) col#0 = (byte) col#13 Alias (byte) col#11 = (byte) col#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) col#12 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) col#14 (byte) col#0 Identical Phi Values (byte) col#8 (byte) col#0 Identical Phi Values (byte) col#11 (byte) col#12 @@ -163,6 +161,7 @@ Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq() Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@9(between main::@2 and main::@1) Added new block during phi lifting irq::@3(between irq and irq::@return) Adding NOP phi() at start of @2 Adding NOP phi() at start of @3 @@ -172,11 +171,13 @@ Calls in [] to main:2 Created 2 initial phi equivalence classes Coalesced [6] col#15 ← col#0 -Coalesced [10] col#16 ← col#1 -Coalesced [15] col#18 ← col#3 -Coalesced [18] col#17 ← col#0 +Coalesced [10] col#17 ← col#1 +Coalesced (already) [11] col#16 ← col#12 +Coalesced [16] col#19 ← col#3 +Coalesced [19] col#18 ← col#0 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) @3 +Culled Empty Block (label) main::@9 Culled Empty Block (label) irq::@3 Renumbering block @2 to @1 Renumbering block main::@7 to main::@3 @@ -198,7 +199,7 @@ main: scope:[main] from @1 [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [5] (byte) col#12 ← phi( main/(byte) col#0 main::@3/(byte) col#1 ) + [5] (byte) col#12 ← phi( main/(byte) col#0 main::@2/(byte) col#12 main::@3/(byte) col#1 ) to:main::@2 main::@2: scope:[main] from main::@1 [6] if((byte) col#12<(byte) $a+(byte) 1) goto main::@1 @@ -227,7 +228,7 @@ VARIABLE REGISTER WEIGHTS (byte) col#0 1.9999999999999998 (byte) col#1 22.0 (byte) col#10 40.0 -(byte) col#12 114.0 +(byte) col#12 158.0 (byte) col#3 4.0 interrupt(KERNEL_MIN)(void()) irq() (void()) main() @@ -273,13 +274,11 @@ main: { sta KERNEL_IRQ lda #>irq sta KERNEL_IRQ+1 - // [5] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] + // [5] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] b1_from_main: - b1_from_b3: - // [5] phi (byte) col#12 = (byte) col#0 [phi:main/main::@3->main::@1#0] -- register_copy - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: + b1_from_b3: + // [5] phi (byte) col#12 = (byte) col#0 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -330,7 +329,7 @@ irq: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) col#0 ← (byte) 0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a Statement [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ col#0 ] ( main:2 [ col#0 ] ) always clobbers reg byte a -Statement [6] if((byte) col#12<(byte) $a+(byte) 1) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] if((byte) col#12<(byte) $a+(byte) 1) goto main::@1 [ col#12 ] ( main:2 [ col#12 ] ) always clobbers reg byte a Statement [7] (byte) col#1 ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] ) always clobbers reg byte a Statement asm { lda$dc0d } always clobbers reg byte a Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a @@ -338,15 +337,15 @@ Statement [10] if((byte) col#0==(byte) 0) goto irq::@return [ col#0 ] ( [ col#0 Potential registers zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] : zp ZP_BYTE:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 182: zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] +Uplift Scope [] 226: zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] Uplift Scope [main] Uplift Scope [irq] -Uplifting [] best 1821 combination zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] -Uplifting [main] best 1821 combination -Uplifting [irq] best 1821 combination +Uplifting [] best 1521 combination zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] +Uplifting [main] best 1521 combination +Uplifting [irq] best 1521 combination Attempting to uplift remaining variables inzp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] -Uplifting [] best 1821 combination zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] +Uplifting [] best 1521 combination zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -383,13 +382,11 @@ main: { sta KERNEL_IRQ lda #>irq sta KERNEL_IRQ+1 - // [5] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] + // [5] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] b1_from_main: - b1_from_b3: - // [5] phi (byte) col#12 = (byte) col#0 [phi:main/main::@3->main::@1#0] -- register_copy - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: + b1_from_b3: + // [5] phi (byte) col#12 = (byte) col#0 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -446,13 +443,14 @@ Removing instruction jmp b3 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1 with b2 Replacing label b1_from_b2 with b2 +Replacing label b1_from_b3 with b2 Replacing label breturn_from_irq with breturn Removing instruction b1_from_bbegin: Removing instruction bend_from_b1: Removing instruction b1_from_main: Removing instruction b1_from_b2: +Removing instruction b1_from_b3: Removing instruction b1: Removing instruction breturn_from_irq: Removing instruction breturn_from_b1: @@ -462,17 +460,10 @@ Removing instruction bend: Removing instruction b3: Removing instruction b1: Succesful ASM optimization Pass5UnusedLabelElimination -Skipping double jump to b2 in jmp b1_from_b3 Skipping double jump to $ea81 in beq breturn Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b3 to b1 -Succesful ASM optimization Pass5RelabelLongLabels Adding RTS to root block Succesful ASM optimization Pass5AddMainRts -Removing instruction jmp b2 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b1: -Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination Fixing long branch [31] beq $ea81 to bne @@ -489,7 +480,7 @@ FINAL SYMBOL TABLE (byte) col#0 col zp ZP_BYTE:2 1.9999999999999998 (byte) col#1 col zp ZP_BYTE:2 22.0 (byte) col#10 col zp ZP_BYTE:2 40.0 -(byte) col#12 col zp ZP_BYTE:2 114.0 +(byte) col#12 col zp ZP_BYTE:2 158.0 (byte) col#3 col zp ZP_BYTE:2 4.0 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@1 @@ -536,9 +527,8 @@ main: { sta KERNEL_IRQ lda #>irq sta KERNEL_IRQ+1 - // [5] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] - // [5] phi (byte) col#12 = (byte) col#0 [phi:main/main::@3->main::@1#0] -- register_copy - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [5] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] + // [5] phi (byte) col#12 = (byte) col#0 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy // main::@1 // main::@2 b2: diff --git a/src/test/ref/longbranch-interrupt-problem.sym b/src/test/ref/longbranch-interrupt-problem.sym index 5b6042f6f..f710b26f0 100644 --- a/src/test/ref/longbranch-interrupt-problem.sym +++ b/src/test/ref/longbranch-interrupt-problem.sym @@ -9,7 +9,7 @@ (byte) col#0 col zp ZP_BYTE:2 1.9999999999999998 (byte) col#1 col zp ZP_BYTE:2 22.0 (byte) col#10 col zp ZP_BYTE:2 40.0 -(byte) col#12 col zp ZP_BYTE:2 114.0 +(byte) col#12 col zp ZP_BYTE:2 158.0 (byte) col#3 col zp ZP_BYTE:2 4.0 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@1 diff --git a/src/test/ref/loop-break-nested.log b/src/test/ref/loop-break-nested.log index c4bc7fb58..a0d38683d 100644 --- a/src/test/ref/loop-break-nested.log +++ b/src/test/ref/loop-break-nested.log @@ -104,8 +104,6 @@ Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination Alias (byte*) main::line#3 = (byte*) main::line#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::line#3 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) main::line#3 (byte*) main::line#2 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$1 [4] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@2 diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index 870472ed5..7808d3f21 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -215,10 +215,6 @@ Alias (byte) nest1::j#2 = (byte) nest1::j#3 Alias (byte) nest1::i#2 = (byte) nest1::i#3 (byte) nest1::i#4 Alias (byte) nest2::i#2 = (byte) nest2::i#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::i#2 -Self Phi Eliminated (byte) nest1::i#2 -Self Phi Eliminated (byte) nest2::i#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::i#2 (byte) main::i#5 Identical Phi Values (byte) nest1::i#2 (byte) nest1::i#5 Identical Phi Values (byte) nest2::i#2 (byte) nest2::i#4 diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index df6b8a30f..f9612be55 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -100,8 +100,6 @@ Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) c::i#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) b::i#1 (byte) b::i#0 Identical Phi Values (byte) c::i#2 (byte) c::i#0 Identical Phi Values (byte) c::i#1 (byte) c::i#2 diff --git a/src/test/ref/malloc-0.log b/src/test/ref/malloc-0.log index 998b2b65d..352680979 100644 --- a/src/test/ref/malloc-0.log +++ b/src/test/ref/malloc-0.log @@ -148,8 +148,6 @@ Alias (void*) malloc::return#2 = (void*) malloc::return#4 Alias (byte*) heap_head#3 = (byte*) heap_head#6 Alias (byte*) BYTES#0 = (byte*) BYTES#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) BYTES#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) heap_head#4 (byte*) HEAP_TOP#0 Identical Phi Values (word) malloc::size#1 (word) malloc::size#0 Identical Phi Values (byte*) heap_head#3 (byte*) heap_head#1 diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index 152d9aad6..6babf6e4e 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -291,9 +291,6 @@ Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$0 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) memcpy::src_end#1 -Self Phi Eliminated (void*) memcpy::destination#3 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) memcpy::src_end#1 (byte*) memcpy::src_end#0 Identical Phi Values (void*) memcpy::destination#3 (void*) memcpy::destination#2 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index d95b9cc82..cdf970202 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -250,10 +250,6 @@ Alias (byte*) main::buf2#1 = (byte*) main::buf2#4 (byte*) main::buf2#2 (byte*) m Alias (byte*) heap_head#11 = (byte*) heap_head#17 (byte*) heap_head#18 (byte*) heap_head#16 (byte*) heap_head#14 (byte*) heap_head#5 Alias (byte*) heap_head#12 = (byte*) heap_head#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::buf1#1 -Self Phi Eliminated (byte*) main::buf2#1 -Self Phi Eliminated (byte*) heap_head#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) heap_head#13 (byte*) HEAP_TOP#0 Identical Phi Values (byte*) heap_head#3 (byte*) heap_head#1 Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#1 diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index 3370bce1a..e76c2d9b1 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -823,10 +823,6 @@ Alias (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#3 Alias (byte) mulf_init::x_255#1 = (byte) mulf_init::x_255#3 Alias (byte*) mulf_init::sqr2_hi#1 = (byte*) mulf_init::sqr2_hi#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print_char_cursor#37 -Self Phi Eliminated (byte*) print_screen#10 -Self Phi Eliminated (byte*) print_line_cursor#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) print_char_cursor#1 (byte*) print_char_cursor#25 Identical Phi Values (byte*) print_char_cursor#19 (byte*) print_char_cursor#25 Identical Phi Values (dword) print_dword::dw#1 (dword) print_dword::dw#0 diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index 44fe221d3..a53d991e5 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -242,8 +242,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) mul8u::a#2 = (byte) mul8u::a#4 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::a#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#0 Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1 Identical Phi Values (byte) main::a#2 (byte) main::a#4 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index 6ad517b67..3e8a602dd 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1516,29 +1516,6 @@ Alias (byte) plex_sprite_msb#20 = (byte) plex_sprite_msb#21 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)(byte) plex_free_next#2 = (byte~) plexShowSprite::plexFreeAdd1_$2#0 (byte) plex_free_next#42 (byte) plex_free_next#32 (byte) plex_free_next#33 Alias candidate removed (volatile)(byte) plex_sprite_idx#29 = (byte) plex_sprite_idx#3 (byte~) plexShowSprite::$6 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#15 -Self Phi Eliminated (byte) plexSort::nxt_y#1 -Self Phi Eliminated (byte) plexSort::nxt_idx#1 -Self Phi Eliminated (byte) plexSort::m#5 -Self Phi Eliminated (byte) plex_show_idx#12 -Self Phi Eliminated (byte) plex_sprite_idx#12 -Self Phi Eliminated (byte) plex_sprite_msb#13 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#27 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#13 -Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#26 -Self Phi Eliminated (bool) framedone#19 -Self Phi Eliminated (bool) framedone#11 -Self Phi Eliminated (byte) loop::sin_idx#2 -Self Phi Eliminated (byte) plex_show_idx#49 -Self Phi Eliminated (byte) plex_sprite_idx#48 -Self Phi Eliminated (byte) plex_sprite_msb#48 -Self Phi Eliminated (byte) plex_free_next#46 -Self Phi Eliminated (byte) loop::sin_idx#3 -Self Phi Eliminated (byte) plex_show_idx#35 -Self Phi Eliminated (byte) plex_sprite_idx#32 -Self Phi Eliminated (byte) plex_sprite_msb#30 -Self Phi Eliminated (byte) plex_free_next#29 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) plexInit::plexSetScreen1_screen#0 (byte*) plexInit::screen#0 Identical Phi Values (byte*) PLEX_SCREEN_PTR#15 (byte*) PLEX_SCREEN_PTR#1 Identical Phi Values (byte) plexSort::nxt_y#1 (byte) plexSort::nxt_y#0 diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index e12de8dec..179a3dd1a 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -301,14 +301,13 @@ Alias (byte) gen_char3::c#2 = (byte) gen_char3::c#3 Alias (byte*) gen_char3::dst#1 = (byte*) gen_char3::dst#3 Alias (byte) gen_char3::r#2 = (byte) gen_char3::r#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) gen_char3::dst#1 -Self Phi Eliminated (byte) gen_char3::r#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) gen_char3::spec#6 (word) gen_char3::spec#0 Identical Phi Values (byte*) gen_char3::dst#6 (byte*) gen_char3::dst#0 Identical Phi Values (byte*) gen_char3::dst#1 (byte*) gen_char3::dst#5 Identical Phi Values (byte) gen_char3::r#2 (byte) gen_char3::r#6 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) gen_char3::dst#5 (byte*) gen_char3::dst#0 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$9 [17] if((byte) main::c#1!=(byte) 4) goto main::@1 Simple Condition (bool~) gen_char3::$3 [36] if((byte~) gen_char3::$1==(byte) 0) goto gen_char3::@3 Simple Condition (bool~) gen_char3::$7 [44] if((byte) gen_char3::c#1!=rangelast(0,2)) goto gen_char3::@2 @@ -341,10 +340,6 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 5 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) gen_char3::dst#5 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) gen_char3::dst#5 (byte*) gen_char3::dst#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [0] (byte*) main::charset#0 ← (const byte*) CHARSET#0 + (byte) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) main::charset#0 = CHARSET#0+8 diff --git a/src/test/ref/plasma-center.log b/src/test/ref/plasma-center.log index 16b31ca60..b10ee003a 100644 --- a/src/test/ref/plasma-center.log +++ b/src/test/ref/plasma-center.log @@ -3317,48 +3317,6 @@ Alias (byte) make_plasma_charset::s#1 = (byte) make_plasma_charset::s#4 Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#23 (byte*) print_line_cursor#36 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#41 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (word) bsearch16u::key#1 -Self Phi Eliminated (byte*) heap_head#15 -Self Phi Eliminated (word*) SQUARES#17 -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (byte) NUM_SQUARES#10 -Self Phi Eliminated (byte*) heap_head#19 -Self Phi Eliminated (word*) SQUARES#13 -Self Phi Eliminated (byte*) print_line_cursor#10 -Self Phi Eliminated (byte*) print_char_cursor#15 -Self Phi Eliminated (byte*) doplasma::sin_x#1 -Self Phi Eliminated (byte*) doplasma::angle#2 -Self Phi Eliminated (byte*) doplasma::sin_y#1 -Self Phi Eliminated (byte*) doplasma::dist#2 -Self Phi Eliminated (byte*) doplasma::screen#3 -Self Phi Eliminated (byte) doplasma::y#2 -Self Phi Eliminated (byte) sin_offset_x#11 -Self Phi Eliminated (byte) sin_offset_y#11 -Self Phi Eliminated (byte) init_angle_screen::y#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2 -Self Phi Eliminated (word*) SQUARES#15 -Self Phi Eliminated (word) init_dist_screen::yds#1 -Self Phi Eliminated (byte) NUM_SQUARES#11 -Self Phi Eliminated (byte*) init_dist_screen::screen_topline#2 -Self Phi Eliminated (byte*) init_dist_screen::screen_bottomline#2 -Self Phi Eliminated (byte) init_dist_screen::y#3 -Self Phi Eliminated (byte*) heap_head#10 -Self Phi Eliminated (byte) make_plasma_charset::s#1 -Self Phi Eliminated (word) make_plasma_charset::c#10 -Self Phi Eliminated (byte) make_plasma_charset::i#2 -Self Phi Eliminated (byte*) make_plasma_charset::charset#1 -Self Phi Eliminated (byte*) print_line_cursor#12 -Self Phi Eliminated (byte*) print_char_cursor#20 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) memset::c#2 (byte) memset::c#3 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 @@ -3456,8 +3414,25 @@ Identical Phi Values (byte) sin_offset_y#13 (byte) sin_offset_y#14 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#3 Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18 +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 +Identical Phi Values (byte*) doplasma::sin_x#2 (byte*) doplasma::sin_x#0 +Identical Phi Values (byte*) doplasma::sin_y#2 (byte*) doplasma::sin_y#0 +Identical Phi Values (byte) sin_offset_x#26 (byte) sin_offset_x#10 +Identical Phi Values (byte) sin_offset_y#26 (byte) sin_offset_y#10 +Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 +Identical Phi Values (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#3 +Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#1 +Identical Phi Values (byte) make_plasma_charset::s#3 (byte) make_plasma_charset::s#0 +Identical Phi Values (word) make_plasma_charset::c#12 (word) make_plasma_charset::c#2 +Identical Phi Values (byte*) make_plasma_charset::charset#6 (byte*) make_plasma_charset::charset#7 +Identical Phi Values (byte*) print_line_cursor#42 (byte*) print_line_cursor#44 +Identical Phi Values (byte*) print_char_cursor#47 (byte*) print_char_cursor#49 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) make_plasma_charset::charset#7 (byte*) make_plasma_charset::charset#0 +Identical Phi Values (byte*) print_line_cursor#44 (byte*) print_line_cursor#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [6] if((word) memset::num#2<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [18] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4 @@ -3469,12 +3444,12 @@ Simple Condition (bool~) init_squares::$5 [100] if((byte) init_squares::i#1!=ran Simple Condition (bool~) atan2_16::$0 [133] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [156] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [165] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [165] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [168] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [176] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [179] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [196] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [200] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [200] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) doplasma::$3 [363] if((byte) doplasma::x#1!=rangelast(0,$27)) goto doplasma::@2 Simple Condition (bool~) doplasma::$4 [370] if((byte) doplasma::y#1!=rangelast(0,$19)) goto doplasma::@1 Simple Condition (bool~) init_angle_screen::$15 [419] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 @@ -3483,7 +3458,7 @@ Simple Condition (bool~) init_dist_screen::$3 [441] if((byte) init_dist_screen:: Simple Condition (bool~) init_dist_screen::$11 [462] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 Simple Condition (bool~) init_dist_screen::$20 [492] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 Simple Condition (bool~) init_dist_screen::$21 [498] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 -Simple Condition (bool~) make_plasma_charset::$6 [528] if((byte~) make_plasma_charset::$4<=(byte) make_plasma_charset::s#3) goto make_plasma_charset::@4 +Simple Condition (bool~) make_plasma_charset::$6 [528] if((byte~) make_plasma_charset::$4<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@4 Simple Condition (bool~) make_plasma_charset::$7 [532] if((byte) make_plasma_charset::ii#1<(byte) 8) goto make_plasma_charset::@3 Simple Condition (bool~) make_plasma_charset::$10 [541] if((byte) make_plasma_charset::i#1<(byte) 8) goto make_plasma_charset::@2 Simple Condition (bool~) make_plasma_charset::$13 [546] if((byte~) make_plasma_charset::$11!=(byte) 0) goto make_plasma_charset::@9 @@ -3545,6 +3520,7 @@ Constant (const byte) make_plasma_charset::b#0 = 0 Constant (const byte) make_plasma_charset::ii#0 = 0 Constant (const byte) print_char::ch#0 = '.' Successful SSA optimization Pass2ConstantIdentification +Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte*) make_plasma_charset::charset#0 = CHARSET#0 Constant (const byte) memset::c#1 = BLACK#0 Constant (const byte*) doplasma::screen#0 = SCREEN1#0 @@ -3573,11 +3549,10 @@ Resolved ranged next value [496] init_dist_screen::y#1 ← ++ init_dist_screen:: Resolved ranged comparison value [498] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d Rewriting conditional comparison [419] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 Rewriting conditional comparison [492] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 -De-inlining pointer[w] to *(pointer+w) [538] *((byte*) make_plasma_charset::charset#6 + (word~) make_plasma_charset::$9) ← (byte) make_plasma_charset::b#3 +De-inlining pointer[w] to *(pointer+w) [538] *((const byte*) make_plasma_charset::charset#0 + (word~) make_plasma_charset::$9) ← (byte) make_plasma_charset::b#3 Successful SSA optimization Pass2DeInlineWordDerefIdx -Eliminating unused variable (void*) memset::return#2 and assignment [108] (void*) memset::return#2 ← (void*) memset::str#3 -Eliminating unused variable (void*) memset::return#3 and assignment [130] (void*) memset::return#3 ← (void*) memset::str#3 -Eliminating unused variable - keeping the phi block (byte*) heap_head#51 +Eliminating unused variable (void*) memset::return#2 and assignment [107] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [129] (void*) memset::return#3 ← (void*) memset::str#3 Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 Successful SSA optimization PassNEliminateUnusedVars @@ -3610,41 +3585,12 @@ Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Self Phi Eliminated (byte*) doplasma::sin_x#2 -Self Phi Eliminated (byte*) doplasma::sin_y#2 -Self Phi Eliminated (byte) sin_offset_x#26 -Self Phi Eliminated (byte) sin_offset_y#26 -Self Phi Eliminated (word*) SQUARES#18 -Self Phi Eliminated (byte) NUM_SQUARES#34 -Self Phi Eliminated (byte) make_plasma_charset::s#3 -Self Phi Eliminated (word) make_plasma_charset::c#12 -Self Phi Eliminated (byte*) make_plasma_charset::charset#6 -Self Phi Eliminated (byte*) print_line_cursor#42 -Self Phi Eliminated (byte*) print_char_cursor#47 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Identical Phi Values (byte*) doplasma::sin_x#2 (byte*) doplasma::sin_x#0 -Identical Phi Values (byte*) doplasma::sin_y#2 (byte*) doplasma::sin_y#0 -Identical Phi Values (byte) sin_offset_x#26 (byte) sin_offset_x#10 -Identical Phi Values (byte) sin_offset_y#26 (byte) sin_offset_y#10 -Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 -Identical Phi Values (byte) NUM_SQUARES#34 (const byte) NUM_SQUARES#3 -Identical Phi Values (byte) make_plasma_charset::s#3 (byte) make_plasma_charset::s#0 -Identical Phi Values (word) make_plasma_charset::c#12 (word) make_plasma_charset::c#2 -Identical Phi Values (byte*) make_plasma_charset::charset#6 (byte*) make_plasma_charset::charset#7 -Identical Phi Values (byte*) print_line_cursor#42 (byte*) print_line_cursor#44 -Identical Phi Values (byte*) print_char_cursor#47 (byte*) print_char_cursor#49 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [34] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD Constant right-side identified [40] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [70] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 +Constant right-side identified [69] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 -Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1 Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 Constant (const void*) memset::str#1 = (void*)COLS#0 @@ -3655,10 +3601,8 @@ Constant (const word) main::toD0182_$4#0 = (word)main::toD0182_gfx#0 Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [47] init_squares::i#1 ← ++ init_squares::i#2 to ++ Resolved ranged comparison value [48] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Resolved ranged next value [95] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ -Resolved ranged comparison value [96] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 -Eliminating unused variable - keeping the phi block (byte*) print_line_cursor#44 -Successful SSA optimization PassNEliminateUnusedVars +Resolved ranged next value [94] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [95] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 @@ -3672,10 +3616,6 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) make_plasma_charset::charset#7 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) make_plasma_charset::charset#7 (const byte*) make_plasma_charset::charset#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [125] (word~) main::toD0181_$1#0 ← (const word) main::toD0181_$0#0 & (word) $3fff Constant right-side identified [128] (byte~) main::toD0181_$5#0 ← > (const word) main::toD0181_$4#0 Constant right-side identified [134] (word~) main::toD0182_$1#0 ← (const word) main::toD0182_$0#0 & (word) $3fff diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index 878b3b10a..66a9c529d 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -126,14 +126,13 @@ Alias (byte) fill::i#2 = (byte) fill::i#3 Alias (byte*) fill::screen#2 = (byte*) fill::screen#5 Alias (byte) fill::ch#2 = (byte) fill::ch#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) fill::screen#2 -Self Phi Eliminated (byte) fill::ch#2 -Self Phi Eliminated (byte) fill::i#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) fill::screen#2 (byte*) fill::screen#3 Identical Phi Values (byte) fill::ch#2 (byte) fill::ch#3 Identical Phi Values (byte) fill::i#2 (byte) fill::i#4 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) fill::screen#3 (byte*) fill::screen#4 +Identical Phi Values (byte) fill::ch#3 (byte) fill::ch#4 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) fill::$2 [19] unroll if((byte) fill::j#1!=rangelast(0,2)) goto fill::@2 Simple Condition (bool~) fill::$3 [23] if((byte) fill::i#1!=rangelast(0,$27)) goto fill::@1 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -157,12 +156,6 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) fill::screen#3 -Self Phi Eliminated (byte) fill::ch#3 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) fill::screen#3 (byte*) fill::screen#4 -Identical Phi Values (byte) fill::ch#3 (byte) fill::ch#4 -Successful SSA optimization Pass2IdenticalPhiElimination Unrolling loop Loop head: fill::@2 tails: fill::@2 blocks: fill::@2 Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) fill::j#2 (const byte) fill::j#0 diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index 6bc186354..88a6ff799 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -213,9 +213,6 @@ Alias (byte) textid#10 = (byte) textid#5 Successful SSA optimization Pass2AliasElimination Alias (byte) textid#13 = (byte) textid#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::i#2 -Self Phi Eliminated (byte) textid#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) textid#16 (byte) textid#15 Identical Phi Values (byte) textid#0 (byte) textid#13 Identical Phi Values (byte) main::i#2 (byte) main::i#5 diff --git a/src/test/ref/printmsg.log b/src/test/ref/printmsg.log index 19ec46b35..0ed44098c 100644 --- a/src/test/ref/printmsg.log +++ b/src/test/ref/printmsg.log @@ -301,8 +301,6 @@ Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#22 (byte*) print_ Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#24 Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print_char_cursor#15 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#26 Identical Phi Values (byte*) print_char_cursor#27 (byte*) print_char_cursor#0 Identical Phi Values (byte*) print_line_cursor#17 (byte*) print_char_cursor#0 diff --git a/src/test/ref/problem-pointer-inside-struct-sizeof-rewriting.log b/src/test/ref/problem-pointer-inside-struct-sizeof-rewriting.log index 95ed69973..c8b5b127f 100644 --- a/src/test/ref/problem-pointer-inside-struct-sizeof-rewriting.log +++ b/src/test/ref/problem-pointer-inside-struct-sizeof-rewriting.log @@ -92,9 +92,6 @@ Simplifying constant pointer cast (word*) 1024 Successful SSA optimization PassNCastSimplification Alias (byte) main::radix#2 = (byte) main::radix#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word*) main::info_values#1 -Self Phi Eliminated (byte) main::radix#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word*) main::info_values#1 (word*) main::info_values#0 Identical Phi Values (byte) main::radix#2 (byte) main::radix#4 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/sandbox.log b/src/test/ref/sandbox.log index 711cb8f0b..5f16b3635 100644 --- a/src/test/ref/sandbox.log +++ b/src/test/ref/sandbox.log @@ -2744,54 +2744,6 @@ Alias candidate removed (phi-usage) (word) myprintf::w3#10 Alias candidate removed (solo) (word) myprintf::w1#11 = Alias candidate removed (solo) (word) myprintf::w2#12 = Alias candidate removed (solo) (word) myprintf::w3#12 = -Self Phi Eliminated (word) divr16u::divisor#1 -Self Phi Eliminated (word) append::sub#4 -Self Phi Eliminated (byte*) append::dst#5 -Self Phi Eliminated (byte) myprintf::bTrailing#3 -Self Phi Eliminated (byte) myprintf::bDigits#13 -Self Phi Eliminated (byte) myprintf::bLeadZero#4 -Self Phi Eliminated (byte*) myprintf::dst#29 -Self Phi Eliminated (byte) myprintf::bLen#35 -Self Phi Eliminated (byte*) myprintf::str#37 -Self Phi Eliminated (byte) myprintf::bArg#35 -Self Phi Eliminated (word) myprintf::w1#36 -Self Phi Eliminated (word) myprintf::w2#36 -Self Phi Eliminated (word) myprintf::w3#36 -Self Phi Eliminated (word) myprintf::w#34 -Self Phi Eliminated (byte) myprintf::bLeadZero#3 -Self Phi Eliminated (byte*) myprintf::dst#15 -Self Phi Eliminated (byte) myprintf::b#20 -Self Phi Eliminated (byte) myprintf::bTrailing#11 -Self Phi Eliminated (byte*) myprintf::str#38 -Self Phi Eliminated (byte) myprintf::bArg#36 -Self Phi Eliminated (word) myprintf::w1#37 -Self Phi Eliminated (word) myprintf::w2#37 -Self Phi Eliminated (word) myprintf::w3#37 -Self Phi Eliminated (word) myprintf::w#35 -Self Phi Eliminated (byte*) myprintf::dst#18 -Self Phi Eliminated (byte) myprintf::b#21 -Self Phi Eliminated (byte) myprintf::bTrailing#4 -Self Phi Eliminated (byte) myprintf::bDigits#12 -Self Phi Eliminated (byte*) myprintf::str#16 -Self Phi Eliminated (byte) myprintf::bArg#20 -Self Phi Eliminated (word) myprintf::w1#18 -Self Phi Eliminated (word) myprintf::w2#19 -Self Phi Eliminated (word) myprintf::w3#19 -Self Phi Eliminated (word) myprintf::w#25 -Self Phi Eliminated (byte) myprintf::bLeadZero#25 -Self Phi Eliminated (byte*) myprintf::dst#7 -Self Phi Eliminated (byte) myprintf::b#23 -Self Phi Eliminated (byte*) myprintf::str#17 -Self Phi Eliminated (byte) myprintf::bArg#21 -Self Phi Eliminated (word) myprintf::w1#19 -Self Phi Eliminated (word) myprintf::w2#20 -Self Phi Eliminated (word) myprintf::w3#20 -Self Phi Eliminated (word) myprintf::w#26 -Self Phi Eliminated (byte) myprintf::bTrailing#28 -Self Phi Eliminated (byte) myprintf::bLeadZero#26 -Self Phi Eliminated (word) main::u#12 -Self Phi Eliminated (word) main::u#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::rem#8 (word) divr16u::rem#3 Identical Phi Values (word) divr16u::dividend#4 (word) divr16u::dividend#1 Identical Phi Values (word) divr16u::divisor#5 (word) divr16u::divisor#0 @@ -2878,6 +2830,11 @@ Identical Phi Values (word) myprintf::w1#7 (word) myprintf::w1#10 Identical Phi Values (word) myprintf::w2#8 (word) myprintf::w2#10 Identical Phi Values (word) myprintf::w3#8 (word) myprintf::w3#10 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) myprintf::dst#10 (byte*) myprintf::dst#40 +Identical Phi Values (word) myprintf::w1#10 (word) myprintf::w1#6 +Identical Phi Values (word) myprintf::w2#10 (word) myprintf::w2#7 +Identical Phi Values (word) myprintf::w3#10 (word) myprintf::w3#7 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) divr16u::$4 [10] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 [18] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 [25] if((byte) divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 @@ -3021,16 +2978,6 @@ Simplifying constant integer cast $10 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) myprintf::dst#10 -Self Phi Eliminated (word) myprintf::w1#10 -Self Phi Eliminated (word) myprintf::w2#10 -Self Phi Eliminated (word) myprintf::w3#10 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) myprintf::dst#10 (byte*) myprintf::dst#40 -Identical Phi Values (word) myprintf::w1#10 (word) myprintf::w1#6 -Identical Phi Values (word) myprintf::w2#10 (word) myprintf::w2#7 -Identical Phi Values (word) myprintf::w3#10 (word) myprintf::w3#7 -Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) utoa::$0 [30] if((const byte) utoa::bStarted#0==(byte) 1) goto utoa::@5 Simple Condition (bool~) utoa::$4 [34] if((byte) utoa::bStarted#5==(byte) 1) goto utoa::@6 Simple Condition (bool~) utoa::$8 [43] if((byte) utoa::bStarted#6==(byte) 1) goto utoa::@7 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index f5776c57b..3cf8ce098 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -787,11 +787,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) mul8u::a#2 = (byte) mul8u::a#4 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (byte) main::x#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) memset::c#2 (byte) memset::c#3 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index 6f9c98eeb..f21548852 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -1620,21 +1620,6 @@ Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 -Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 -Self Phi Eliminated (byte*) init_font_hex::charset#3 -Self Phi Eliminated (byte) init_font_hex::c1#2 -Self Phi Eliminated (byte) init_font_hex::c#2 -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (byte) init_angle_screen::y#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) init_font_hex::charset#6 (byte*) init_font_hex::charset#1 Identical Phi Values (byte*) init_font_hex::proto_hi#2 (byte*) init_font_hex::proto_hi#4 Identical Phi Values (byte*) init_font_hex::proto_lo#2 (byte*) init_font_hex::proto_lo#4 @@ -1656,6 +1641,10 @@ Identical Phi Values (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#4 Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#5 Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#5 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 Successful SSA optimization Pass2IdenticalPhiElimination @@ -1668,12 +1657,12 @@ Simple Condition (bool~) init_font_hex::$5 [43] if((byte) init_font_hex::c#1!=ra Simple Condition (bool~) atan2_16::$0 [50] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [59] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [73] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [82] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [82] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [85] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [93] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [96] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [113] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [117] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [117] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) init_angle_screen::$15 [285] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 Simple Condition (bool~) init_angle_screen::$16 [291] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -1730,7 +1719,7 @@ Resolved ranged next value [26] init_font_hex::i#1 ← ++ init_font_hex::i#2 to Resolved ranged comparison value [28] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 Resolved ranged next value [36] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ Resolved ranged comparison value [38] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 -Resolved ranged next value [41] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged next value [41] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++ Resolved ranged comparison value [43] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 Resolved ranged next value [289] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++ Resolved ranged comparison value [291] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d @@ -1770,16 +1759,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 -Self Phi Eliminated (byte) init_font_hex::c#5 -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 -Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [3] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 Constant right-side identified [29] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Constant right-side identified [89] (byte*) print_word_at::at#1 ← (const byte*) print_dword_at::at#0 + (byte) 4 diff --git a/src/test/ref/screen-center-distance.log b/src/test/ref/screen-center-distance.log index 3ec675df8..2d0c4250d 100644 --- a/src/test/ref/screen-center-distance.log +++ b/src/test/ref/screen-center-distance.log @@ -2009,22 +2009,6 @@ Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 Alias (byte) init_dist_screen::y#3 = (byte) init_dist_screen::y#7 Alias (byte*) heap_head#17 = (byte*) heap_head#41 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) bsearch16u::key#1 -Self Phi Eliminated (byte*) heap_head#13 -Self Phi Eliminated (word*) SQUARES#17 -Self Phi Eliminated (byte*) init_font_hex::proto_hi#2 -Self Phi Eliminated (byte*) init_font_hex::proto_lo#2 -Self Phi Eliminated (byte*) init_font_hex::charset#3 -Self Phi Eliminated (byte) init_font_hex::c1#2 -Self Phi Eliminated (byte) init_font_hex::c#2 -Self Phi Eliminated (word*) SQUARES#15 -Self Phi Eliminated (word) init_dist_screen::yds#1 -Self Phi Eliminated (byte) NUM_SQUARES#11 -Self Phi Eliminated (byte*) init_dist_screen::screen_topline#2 -Self Phi Eliminated (byte*) init_dist_screen::screen_bottomline#2 -Self Phi Eliminated (byte) init_dist_screen::y#3 -Self Phi Eliminated (byte*) heap_head#17 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#19 Identical Phi Values (word) malloc::size#1 (word) malloc::size#0 Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2 @@ -2070,6 +2054,11 @@ Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#14 Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#12 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18 +Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 +Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 +Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 +Identical Phi Values (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#3 +Identical Phi Values (byte*) heap_head#46 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [163] (byte~) clock_start::$2 ← (byte) CIA_TIMER_CONTROL_STOP#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 Identified duplicate assignment right side [170] (byte~) clock_start::$6 ← (byte) CIA_TIMER_CONTROL_START#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 @@ -2123,6 +2112,7 @@ Constant (const byte) init_dist_screen::y#0 = 0 Constant (const byte) init_dist_screen::x#0 = 0 Constant (const byte) init_dist_screen::xb#0 = $27 Successful SSA optimization Pass2ConstantIdentification +Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte*) init_font_hex::proto_hi#0 = FONT_HEX_PROTO#0 Constant (const byte*) init_font_hex::proto_lo#0 = FONT_HEX_PROTO#0 Constant (const byte*) init_font_hex::charset#1 = CHARSET#0 @@ -2142,7 +2132,7 @@ Resolved ranged next value [133] init_font_hex::i#1 ← ++ init_font_hex::i#2 to Resolved ranged comparison value [135] if(init_font_hex::i#1!=rangelast(0,4)) goto init_font_hex::@3 to (number) 5 Resolved ranged next value [143] init_font_hex::c1#1 ← ++ init_font_hex::c1#4 to ++ Resolved ranged comparison value [145] if(init_font_hex::c1#1!=rangelast(0,$f)) goto init_font_hex::@2 to (number) $10 -Resolved ranged next value [148] init_font_hex::c#1 ← ++ init_font_hex::c#5 to ++ +Resolved ranged next value [148] init_font_hex::c#1 ← ++ init_font_hex::c#6 to ++ Resolved ranged comparison value [150] if(init_font_hex::c#1!=rangelast(0,$f)) goto init_font_hex::@1 to (number) $10 Resolved ranged next value [352] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ Resolved ranged comparison value [354] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d @@ -2153,15 +2143,13 @@ Simplifying expression containing zero clock_start::$0 in [161] (byte~) clock_st Simplifying expression containing zero CIA_TIMER_CONTROL_START#0 in [167] (byte~) clock_start::$4 ← (const byte) CIA_TIMER_CONTROL_START#0 | (const byte) CIA_TIMER_CONTROL_CONTINUOUS#0 Simplifying expression containing zero clock_start::$6 in [171] (byte~) clock_start::$7 ← (byte~) clock_start::$6 | (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [68] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 -Eliminating unused variable - keeping the phi block (byte*) heap_head#46 +Eliminating unused variable (byte*) heap_head#1 and assignment [1] (byte*) heap_head#1 ← (byte*) malloc::mem#0 +Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [67] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 Eliminating unused constant (const byte) CIA_TIMER_CONTROL_STOP#0 Eliminating unused constant (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused variable (byte*) heap_head#1 and assignment [1] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) 5 in if((byte) init_font_hex::i#1!=(number) 5) goto init_font_hex::@3 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c1#1!=(number) $10) goto init_font_hex::@2 Adding number conversion cast (unumber) $10 in if((byte) init_font_hex::c#1!=(number) $10) goto init_font_hex::@1 @@ -2185,25 +2173,14 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) init_font_hex::proto_hi#4 -Self Phi Eliminated (byte) init_font_hex::c#5 -Self Phi Eliminated (word*) SQUARES#18 -Self Phi Eliminated (byte) NUM_SQUARES#35 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) init_font_hex::proto_hi#4 (byte*) init_font_hex::proto_hi#6 -Identical Phi Values (byte) init_font_hex::c#5 (byte) init_font_hex::c#6 -Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 -Identical Phi Values (byte) NUM_SQUARES#35 (const byte) NUM_SQUARES#3 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [22] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD Constant right-side identified [28] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [55] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 -Constant right-side identified [102] (byte*) print_word_at::at#1 ← (const byte*) print_dword_at::at#0 + (byte) 4 -Constant right-side identified [149] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 +Constant right-side identified [54] (byte) init_font_hex::idx#1 ← ++ (const byte) init_font_hex::idx#0 +Constant right-side identified [101] (byte*) print_word_at::at#1 ← (const byte*) print_dword_at::at#0 + (byte) 4 +Constant right-side identified [148] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 -Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte) init_font_hex::idx#1 = ++init_font_hex::idx#0 Constant (const byte) clock_start::$1 = CIA_TIMER_CONTROL_CONTINUOUS#0 Constant (const byte) clock_start::$6 = CIA_TIMER_CONTROL_START#0 @@ -2216,7 +2193,7 @@ Constant (const byte*) init_dist_screen::screen_bottomline#0 = init_dist_screen: Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [35] init_squares::i#1 ← ++ init_squares::i#2 to ++ Resolved ranged comparison value [36] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 in [81] (byte~) clock_start::$3 ← (const byte) clock_start::$1 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 in [80] (byte~) clock_start::$3 ← (const byte) clock_start::$1 | (const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A#0 Successful SSA optimization PassNSimplifyExpressionWithZero Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 diff --git a/src/test/ref/screen-show-spiral-buckets.cfg b/src/test/ref/screen-show-spiral-buckets.cfg index 6f5bf36d9..e46c19c2f 100644 --- a/src/test/ref/screen-show-spiral-buckets.cfg +++ b/src/test/ref/screen-show-spiral-buckets.cfg @@ -47,7 +47,7 @@ main::@15: scope:[main] from main::@14 [22] call init_buckets to:main::@1 main::@1: scope:[main] from main::@10 main::@11 main::@15 - [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 ) + [23] (byte) main::bucket_idx#6 ← phi( main::@10/(byte) main::bucket_idx#6 main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index db209ae31..a92aae5fa 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -2702,47 +2702,6 @@ Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 Alias (byte) init_dist_screen::y#3 = (byte) init_dist_screen::y#7 Alias (byte*) heap_head#16 = (byte*) heap_head#69 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) bsearch16u::key#1 -Self Phi Eliminated (byte*) heap_head#21 -Self Phi Eliminated (word*) SQUARES#17 -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (byte) main::bucket_idx#13 -Self Phi Eliminated (byte) NUM_SQUARES#33 -Self Phi Eliminated (byte*) heap_head#62 -Self Phi Eliminated (word*) SQUARES#44 -Self Phi Eliminated (byte) main::bucket_size#1 -Self Phi Eliminated (byte) main::bucket_idx#10 -Self Phi Eliminated (byte) NUM_SQUARES#24 -Self Phi Eliminated (byte*) heap_head#55 -Self Phi Eliminated (word*) SQUARES#35 -Self Phi Eliminated (byte) NUM_SQUARES#10 -Self Phi Eliminated (byte*) heap_head#26 -Self Phi Eliminated (word*) SQUARES#13 -Self Phi Eliminated (byte*) init_buckets::screen#1 -Self Phi Eliminated (byte*) heap_head#63 -Self Phi Eliminated (byte*) heap_head#51 -Self Phi Eliminated (byte*) init_buckets::screen#10 -Self Phi Eliminated (byte*) init_buckets::screen#7 -Self Phi Eliminated (byte*) init_buckets::screen#2 -Self Phi Eliminated (byte*) heap_head#52 -Self Phi Eliminated (byte*) init_buckets::screen#3 -Self Phi Eliminated (byte*) heap_head#14 -Self Phi Eliminated (byte) init_angle_screen::y#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2 -Self Phi Eliminated (word*) SQUARES#15 -Self Phi Eliminated (word) init_dist_screen::yds#1 -Self Phi Eliminated (byte) NUM_SQUARES#11 -Self Phi Eliminated (byte*) init_dist_screen::screen_topline#2 -Self Phi Eliminated (byte*) init_dist_screen::screen_bottomline#2 -Self Phi Eliminated (byte) init_dist_screen::y#3 -Self Phi Eliminated (byte*) heap_head#16 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2 Identical Phi Values (word*) bsearch16u::items#7 (word*) bsearch16u::items#1 Identical Phi Values (word) bsearch16u::key#4 (word) bsearch16u::key#0 @@ -2817,16 +2776,25 @@ Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#26 Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#13 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18 +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 Identical Phi Values (byte) main::bucket_idx#3 (byte) main::bucket_idx#6 Identical Phi Values (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#18 Identical Phi Values (byte*) heap_head#49 (byte*) heap_head#48 Identical Phi Values (word*) SQUARES#27 (word*) SQUARES#26 +Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 +Identical Phi Values (byte) NUM_SQUARES#39 (byte) NUM_SQUARES#3 +Identical Phi Values (byte*) heap_head#77 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#3 +Identical Phi Values (byte*) heap_head#48 (byte*) heap_head#1 +Identical Phi Values (word*) SQUARES#26 (word*) SQUARES#1 Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#18 Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#48 Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#26 +Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) bsearch16u::$5 [17] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7 Simple Condition (bool~) bsearch16u::$12 [29] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9 @@ -2836,12 +2804,12 @@ Simple Condition (bool~) init_squares::$5 [81] if((byte) init_squares::i#1!=rang Simple Condition (bool~) atan2_16::$0 [114] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [123] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [137] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [146] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [146] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [157] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [160] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [177] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [181] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [181] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$3 [230] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4 Simple Condition (bool~) main::$5 [238] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7 Simple Condition (bool~) main::$17 [243] if((byte) main::bucket_idx#1!=(byte) NUM_BUCKETS#0) goto main::@17 @@ -2904,6 +2872,8 @@ Constant (const byte) init_dist_screen::y#0 = 0 Constant (const byte) init_dist_screen::x#0 = 0 Constant (const byte) init_dist_screen::xb#0 = $27 Successful SSA optimization Pass2ConstantIdentification +Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [227] if(true) goto main::@4 if() condition always true - replacing block destination [283] if(true) goto main::@25 Successful SSA optimization Pass2ConstantIfs @@ -2921,9 +2891,6 @@ De-inlining pointer[w] to *(pointer+w) [339] (word) malloc::size#6 ← *((byte De-inlining pointer[w] to *(pointer+w) [347] *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5 De-inlining pointer[w] to *(pointer+w) [366] (word*) init_buckets::bucket#0 ← *((word*[]) BUCKETS#0 + (word~) init_buckets::$13) Successful SSA optimization Pass2DeInlineWordDerefIdx -Eliminating unused variable - keeping the phi block (byte) NUM_SQUARES#18 -Eliminating unused variable - keeping the phi block (byte*) heap_head#48 -Eliminating unused variable - keeping the phi block (word*) SQUARES#26 Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 Successful SSA optimization PassNEliminateUnusedVars @@ -2956,35 +2923,19 @@ Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Self Phi Eliminated (byte) main::bucket_idx#6 -Self Phi Eliminated (word*) SQUARES#18 -Self Phi Eliminated (byte) NUM_SQUARES#39 -Self Phi Eliminated (byte*) heap_head#77 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 -Identical Phi Values (byte) NUM_SQUARES#39 (const byte) NUM_SQUARES#3 -Identical Phi Values (byte*) heap_head#77 (byte*) heap_head#1 -Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#1 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD Constant right-side identified [30] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [60] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 -Constant right-side identified [134] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7 -Constant right-side identified [136] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE -Constant right-side identified [141] (word) malloc::size#4 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER -Constant right-side identified [146] (word) malloc::size#5 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE -Constant right-side identified [151] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [161] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [173] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [59] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 +Constant right-side identified [133] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7 +Constant right-side identified [135] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE +Constant right-side identified [140] (word) malloc::size#4 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER +Constant right-side identified [145] (word) malloc::size#5 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE +Constant right-side identified [150] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [160] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [172] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 -Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1 Constant (const byte*) main::$20 = COLS#0+$3e7 Constant (const word) malloc::size#3 = NUM_BUCKETS#0*SIZEOF_BYTE @@ -2996,14 +2947,14 @@ Constant (const byte) init_buckets::$7 = NUM_BUCKETS#0-1 Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [37] init_squares::i#1 ← ++ init_squares::i#2 to ++ Resolved ranged comparison value [38] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Resolved ranged next value [85] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ -Resolved ranged comparison value [86] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 -Resolved ranged next value [154] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ -Resolved ranged comparison value [155] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1 -Resolved ranged next value [171] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ -Resolved ranged comparison value [172] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1 -Resolved ranged next value [176] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ -Resolved ranged comparison value [177] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1 +Resolved ranged next value [84] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [85] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 +Resolved ranged next value [153] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ +Resolved ranged comparison value [154] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1 +Resolved ranged next value [170] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ +Resolved ranged comparison value [171] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1 +Resolved ranged next value [175] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ +Resolved ranged comparison value [176] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1 Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 @@ -3170,11 +3121,11 @@ Adding NOP phi() at start of init_dist_screen CALL GRAPH Calls in [] to malloc:5 malloc:8 malloc:11 malloc:14 malloc:17 main:20 Calls in [main] to init_dist_screen:25 init_angle_screen:27 init_buckets:29 -Calls in [init_buckets] to malloc:87 -Calls in [init_angle_screen] to atan2_16:138 -Calls in [init_dist_screen] to init_squares:234 sqr:246 sqr:257 sqrt:262 -Calls in [sqrt] to bsearch16u:288 -Calls in [init_squares] to malloc:328 +Calls in [init_buckets] to malloc:88 +Calls in [init_angle_screen] to atan2_16:139 +Calls in [init_dist_screen] to init_squares:235 sqr:247 sqr:258 sqrt:263 +Calls in [sqrt] to bsearch16u:289 +Calls in [init_squares] to malloc:329 Created 54 initial phi equivalence classes Coalesced [7] heap_head#83 ← heap_head#1 @@ -3183,94 +3134,95 @@ Coalesced (already) [13] heap_head#84 ← heap_head#1 Coalesced (already) [16] heap_head#85 ← heap_head#1 Coalesced [47] main::min_offset#9 ← main::offset#0 Coalesced [48] main::min_angle#7 ← main::min_angle#1 -Coalesced [62] main::bucket_idx#14 ← main::bucket_idx#1 -Coalesced [63] main::i#6 ← main::i#1 -Coalesced [64] main::min_angle#5 ← main::min_angle#4 -Not coalescing [65] main::min_offset#7 ← main::min_offset#2 -Not coalescing [66] main::min_offset#8 ← main::min_offset#5 -Coalesced (already) [67] main::min_angle#6 ← main::min_angle#2 -Not coalescing [68] main::min_offset#10 ← main::min_offset#5 -Coalesced (already) [69] main::min_angle#8 ← main::min_angle#2 -Not coalescing [75] init_buckets::dist#6 ← init_buckets::screen#0 -Coalesced (already) [85] heap_head#86 ← heap_head#1 -Coalesced [86] malloc::size#8 ← malloc::size#6 -Not coalescing [99] init_buckets::dist#8 ← init_buckets::screen#0 -Coalesced [114] init_buckets::dist#9 ← init_buckets::dist#3 -Coalesced [115] init_buckets::i4#3 ← init_buckets::i4#1 -Coalesced [116] init_buckets::i3#3 ← init_buckets::i3#1 -Coalesced [117] init_buckets::i2#4 ← init_buckets::i2#1 -Coalesced [118] init_buckets::dist#7 ← init_buckets::dist#1 -Coalesced [119] init_buckets::i1#3 ← init_buckets::i1#1 -Coalesced [120] init_buckets::i#3 ← init_buckets::i#1 -Not coalescing [123] heap_head#1 ← malloc::mem#0 -Coalesced [127] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#0 -Coalesced [128] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#0 -Coalesced [158] init_angle_screen::y#6 ← init_angle_screen::y#1 -Coalesced [159] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1 -Coalesced [160] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1 -Coalesced [161] init_angle_screen::x#4 ← init_angle_screen::x#1 -Coalesced [162] init_angle_screen::xb#4 ← init_angle_screen::xb#1 -Coalesced [165] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [169] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [171] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [172] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [175] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [180] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [184] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [187] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [188] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [189] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [190] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [191] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [197] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [198] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [205] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [206] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [207] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [211] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [212] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [213] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [214] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [215] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [220] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [221] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [222] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [223] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [224] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [228] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [229] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [230] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [231] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [232] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [236] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 -Coalesced [237] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 -Coalesced [242] init_dist_screen::yd#2 ← init_dist_screen::$5 -Coalesced [245] sqr::val#3 ← sqr::val#0 -Coalesced [253] init_dist_screen::xd#2 ← init_dist_screen::$13 -Coalesced [256] sqr::val#4 ← sqr::val#1 -Coalesced [277] init_dist_screen::y#14 ← init_dist_screen::y#1 -Coalesced [278] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1 -Coalesced [279] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1 -Coalesced [280] init_dist_screen::x#8 ← init_dist_screen::x#1 -Coalesced [281] init_dist_screen::xb#8 ← init_dist_screen::xb#1 -Coalesced [283] init_dist_screen::xd#1 ← init_dist_screen::$15 -Coalesced [285] init_dist_screen::yd#1 ← init_dist_screen::$7 -Coalesced [295] bsearch16u::items#10 ← bsearch16u::items#1 -Coalesced [300] bsearch16u::return#9 ← bsearch16u::$2 -Coalesced [302] bsearch16u::return#7 ← bsearch16u::return#2 -Coalesced [305] bsearch16u::return#8 ← bsearch16u::items#2 -Not coalescing [311] bsearch16u::return#6 ← bsearch16u::pivot#0 -Coalesced [315] bsearch16u::num#10 ← bsearch16u::num#1 -Coalesced [316] bsearch16u::items#12 ← bsearch16u::items#0 -Coalesced [319] bsearch16u::num#9 ← bsearch16u::num#0 -Coalesced [320] bsearch16u::items#11 ← bsearch16u::items#8 -Coalesced [321] bsearch16u::num#11 ← bsearch16u::num#3 -Coalesced (already) [322] bsearch16u::items#13 ← bsearch16u::items#2 -Coalesced (already) [327] heap_head#87 ← heap_head#1 -Coalesced [331] init_squares::squares#4 ← init_squares::squares#0 -Coalesced [341] init_squares::sqr#3 ← init_squares::sqr#1 -Coalesced [342] init_squares::squares#3 ← init_squares::squares#1 -Coalesced [343] init_squares::i#3 ← init_squares::i#1 +Coalesced (already) [56] main::bucket_idx#14 ← main::bucket_idx#6 +Coalesced [63] main::bucket_idx#15 ← main::bucket_idx#1 +Coalesced [64] main::i#6 ← main::i#1 +Coalesced [65] main::min_angle#5 ← main::min_angle#4 +Not coalescing [66] main::min_offset#7 ← main::min_offset#2 +Not coalescing [67] main::min_offset#8 ← main::min_offset#5 +Coalesced (already) [68] main::min_angle#6 ← main::min_angle#2 +Not coalescing [69] main::min_offset#10 ← main::min_offset#5 +Coalesced (already) [70] main::min_angle#8 ← main::min_angle#2 +Not coalescing [76] init_buckets::dist#6 ← init_buckets::screen#0 +Coalesced (already) [86] heap_head#86 ← heap_head#1 +Coalesced [87] malloc::size#8 ← malloc::size#6 +Not coalescing [100] init_buckets::dist#8 ← init_buckets::screen#0 +Coalesced [115] init_buckets::dist#9 ← init_buckets::dist#3 +Coalesced [116] init_buckets::i4#3 ← init_buckets::i4#1 +Coalesced [117] init_buckets::i3#3 ← init_buckets::i3#1 +Coalesced [118] init_buckets::i2#4 ← init_buckets::i2#1 +Coalesced [119] init_buckets::dist#7 ← init_buckets::dist#1 +Coalesced [120] init_buckets::i1#3 ← init_buckets::i1#1 +Coalesced [121] init_buckets::i#3 ← init_buckets::i#1 +Not coalescing [124] heap_head#1 ← malloc::mem#0 +Coalesced [128] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#0 +Coalesced [129] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#0 +Coalesced [159] init_angle_screen::y#6 ← init_angle_screen::y#1 +Coalesced [160] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1 +Coalesced [161] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1 +Coalesced [162] init_angle_screen::x#4 ← init_angle_screen::x#1 +Coalesced [163] init_angle_screen::xb#4 ← init_angle_screen::xb#1 +Coalesced [166] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [170] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [172] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [173] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [176] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [181] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [185] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [188] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [189] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [190] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [191] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [192] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [198] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [199] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [206] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [207] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [208] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [212] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [213] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [214] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [215] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [216] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [221] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [222] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [223] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [224] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [225] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [229] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [230] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [231] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [232] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [233] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [237] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 +Coalesced [238] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 +Coalesced [243] init_dist_screen::yd#2 ← init_dist_screen::$5 +Coalesced [246] sqr::val#3 ← sqr::val#0 +Coalesced [254] init_dist_screen::xd#2 ← init_dist_screen::$13 +Coalesced [257] sqr::val#4 ← sqr::val#1 +Coalesced [278] init_dist_screen::y#14 ← init_dist_screen::y#1 +Coalesced [279] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1 +Coalesced [280] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1 +Coalesced [281] init_dist_screen::x#8 ← init_dist_screen::x#1 +Coalesced [282] init_dist_screen::xb#8 ← init_dist_screen::xb#1 +Coalesced [284] init_dist_screen::xd#1 ← init_dist_screen::$15 +Coalesced [286] init_dist_screen::yd#1 ← init_dist_screen::$7 +Coalesced [296] bsearch16u::items#10 ← bsearch16u::items#1 +Coalesced [301] bsearch16u::return#9 ← bsearch16u::$2 +Coalesced [303] bsearch16u::return#7 ← bsearch16u::return#2 +Coalesced [306] bsearch16u::return#8 ← bsearch16u::items#2 +Not coalescing [312] bsearch16u::return#6 ← bsearch16u::pivot#0 +Coalesced [316] bsearch16u::num#10 ← bsearch16u::num#1 +Coalesced [317] bsearch16u::items#12 ← bsearch16u::items#0 +Coalesced [320] bsearch16u::num#9 ← bsearch16u::num#0 +Coalesced [321] bsearch16u::items#11 ← bsearch16u::items#8 +Coalesced [322] bsearch16u::num#11 ← bsearch16u::num#3 +Coalesced (already) [323] bsearch16u::items#13 ← bsearch16u::items#2 +Coalesced (already) [328] heap_head#87 ← heap_head#1 +Coalesced [332] init_squares::squares#4 ← init_squares::squares#0 +Coalesced [342] init_squares::sqr#3 ← init_squares::sqr#1 +Coalesced [343] init_squares::squares#3 ← init_squares::squares#1 +Coalesced [344] init_squares::i#3 ← init_squares::i#1 Coalesced down to 45 phi equivalence classes Culled Empty Block (label) @8 Culled Empty Block (label) @16 @@ -3419,7 +3371,7 @@ main::@15: scope:[main] from main::@14 [22] call init_buckets to:main::@1 main::@1: scope:[main] from main::@10 main::@11 main::@15 - [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 ) + [23] (byte) main::bucket_idx#6 ← phi( main::@10/(byte) main::bucket_idx#6 main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 @@ -4102,7 +4054,7 @@ VARIABLE REGISTER WEIGHTS (word[]) main::bucket#0 6.588235294117648 (byte) main::bucket_idx (byte) main::bucket_idx#1 11.0 -(byte) main::bucket_idx#6 2.0 +(byte) main::bucket_idx#6 2.64 (byte) main::bucket_size (byte) main::bucket_size#0 7.6875 (byte*) main::fill @@ -4832,8 +4784,10 @@ main: { sta (fill1),y // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + // [23] phi from main::@10 main::@11 to main::@1 [phi:main::@10/main::@11->main::@1] b1_from_b10: + b1_from_b11: + // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@10/main::@11->main::@1#0] -- register_copy jmp b1 // main::@4 b4: @@ -4858,10 +4812,7 @@ main: { b11: // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1] - b1_from_b11: - // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy - jmp b1 + jmp b1_from_b11 // main::@16 b16: // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 @@ -6379,8 +6330,8 @@ Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a -Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y +Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a +Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a @@ -6540,8 +6491,8 @@ Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a -Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y +Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a +Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a @@ -6682,8 +6633,8 @@ Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a -Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y +Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a +Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a @@ -6915,7 +6866,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:132 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:133 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:122 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:118 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:120 [ atan2_16::y#0 ] Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:161 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:162 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:165 [ bsearch16u::result#0 ] 501: zp ZP_WORD:163 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:152 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:150 [ bsearch16u::key#0 ] Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:111 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:112 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:115 [ init_angle_screen::$6 ] 202: zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:126 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:129 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:130 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:131 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:116 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:113 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:74 [ init_angle_screen::screen#0 ] -Uplift Scope [main] 577.83: zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] 347.89: zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 245.29: zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] 202: zp ZP_BYTE:82 [ main::$22 ] 202: zp ZP_WORD:83 [ main::fill#0 ] 151.5: zp ZP_WORD:85 [ main::angle#0 ] 128.55: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:78 [ main::$21 ] 22: zp ZP_WORD:87 [ main::fill1#0 ] 13: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:81 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:79 [ main::bucket#0 ] +Uplift Scope [main] 577.83: zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] 347.89: zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 245.29: zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] 202: zp ZP_BYTE:82 [ main::$22 ] 202: zp ZP_WORD:83 [ main::fill#0 ] 151.5: zp ZP_WORD:85 [ main::angle#0 ] 128.55: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:78 [ main::$21 ] 22: zp ZP_WORD:87 [ main::fill1#0 ] 13.64: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:81 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:79 [ main::bucket#0 ] Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:142 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:144 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:149 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] 4.87: zp ZP_WORD:137 [ init_dist_screen::yds#0 ] Uplift Scope [sqr] 338: zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:140 [ sqr::return#3 ] 28.5: zp ZP_WORD:168 [ sqr::return#0 ] 22: zp ZP_WORD:135 [ sqr::return#2 ] 4: zp ZP_BYTE:167 [ sqr::$0 ] Uplift Scope [init_buckets] 34.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:89 [ init_buckets::$15 ] 22: zp ZP_WORD:93 [ init_buckets::$12 ] 22: zp ZP_WORD:95 [ init_buckets::$16 ] 22: zp ZP_WORD:98 [ init_buckets::$9 ] 22: zp ZP_WORD:100 [ init_buckets::$13 ] 22: zp ZP_WORD:102 [ init_buckets::$17 ] 22: zp ZP_BYTE:108 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 15.93: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] 11: zp ZP_WORD:106 [ init_buckets::$10 ] 7.33: zp ZP_WORD:104 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:97 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:91 [ init_buckets::$5 ] 0.43: zp ZP_WORD:76 [ init_buckets::screen#0 ] @@ -7391,8 +7342,10 @@ main: { sta (fill1),y // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + // [23] phi from main::@10 main::@11 to main::@1 [phi:main::@10/main::@11->main::@1] b1_from_b10: + b1_from_b11: + // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@10/main::@11->main::@1#0] -- register_copy jmp b1 // main::@4 b4: @@ -7417,10 +7370,7 @@ main: { b11: // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1] - b1_from_b11: - // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy - jmp b1 + jmp b1_from_b11 // main::@16 b16: // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 @@ -8857,7 +8807,6 @@ Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1 with b2 -Replacing label b1 with b2 Replacing label b6_from_b17 with b6 Replacing label b6_from_b18 with b6 Replacing label b1_from_b1 with b1 @@ -8900,6 +8849,7 @@ Removing instruction b1: Removing instruction b6_from_b17: Removing instruction b6_from_b18: Removing instruction b6_from_b8: +Removing instruction b1_from_b10: Removing instruction b1_from_b1: Removing instruction b3_from_b3: Removing instruction b4_from_b8: @@ -8965,9 +8915,7 @@ Removing instruction b7: Removing instruction b8: Removing instruction b9: Removing instruction b10: -Removing instruction b1_from_b10: Removing instruction b12: -Removing instruction b1_from_b11: Removing instruction b5_from_b16: Removing instruction b1_from_init_buckets: Removing instruction b2: @@ -9017,8 +8965,11 @@ Removing instruction b2: Removing instruction b1_from_b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to b2 in jmp b1_from_b11 Replacing jump to rts with rts in jmp b2 Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label b1_from_b11 to b1 +Succesful ASM optimization Pass5RelabelLongLabels Adding RTS to root block Succesful ASM optimization Pass5AddMainRts Removing instruction jmp b1 @@ -9034,6 +8985,8 @@ Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction b1: +Succesful ASM optimization Pass5UnusedLabelElimination Fixing long branch [651] beq b12 to bne Fixing long branch [545] bpl b1 to bmi Fixing long branch [557] bpl b4 to bmi @@ -9388,7 +9341,7 @@ FINAL SYMBOL TABLE (word[]) main::bucket#0 bucket zp ZP_WORD:62 6.588235294117648 (byte) main::bucket_idx (byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:2 11.0 -(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 2.0 +(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 2.64 (byte) main::bucket_size (byte) main::bucket_size#0 bucket_size zp ZP_BYTE:64 7.6875 (byte*) main::fill @@ -9846,7 +9799,8 @@ main: { // (*BORDERCOL)--; // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + // [23] phi from main::@10 main::@11 to main::@1 [phi:main::@10/main::@11->main::@1] + // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@10/main::@11->main::@1#0] -- register_copy jmp b2 // main::@4 b4: @@ -9873,8 +9827,6 @@ main: { // (*BORDERCOL)--; // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1] - // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy jmp b2 // main::@16 b16: diff --git a/src/test/ref/screen-show-spiral-buckets.sym b/src/test/ref/screen-show-spiral-buckets.sym index 6d20c90d0..d6f2a3e51 100644 --- a/src/test/ref/screen-show-spiral-buckets.sym +++ b/src/test/ref/screen-show-spiral-buckets.sym @@ -347,7 +347,7 @@ (word[]) main::bucket#0 bucket zp ZP_WORD:62 6.588235294117648 (byte) main::bucket_idx (byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:2 11.0 -(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 2.0 +(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 2.64 (byte) main::bucket_size (byte) main::bucket_size#0 bucket_size zp ZP_BYTE:64 7.6875 (byte*) main::fill diff --git a/src/test/ref/screen-show-spiral.log b/src/test/ref/screen-show-spiral.log index 6e4c43e6c..500ae7032 100644 --- a/src/test/ref/screen-show-spiral.log +++ b/src/test/ref/screen-show-spiral.log @@ -2172,29 +2172,6 @@ Alias (byte*) heap_head#10 = (byte*) heap_head#44 Successful SSA optimization Pass2AliasElimination Alias candidate removed (phi-usage) (byte*) main::fill#2 Alias candidate removed (solo) (byte*) main::fill#3 = -Self Phi Eliminated (word) bsearch16u::key#1 -Self Phi Eliminated (byte*) heap_head#15 -Self Phi Eliminated (word*) SQUARES#17 -Self Phi Eliminated (signed word) atan2_16::yi#10 -Self Phi Eliminated (signed word) atan2_16::xi#10 -Self Phi Eliminated (byte) atan2_16::i#10 -Self Phi Eliminated (word) atan2_16::angle#14 -Self Phi Eliminated (signed word) atan2_16::x#11 -Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (byte) NUM_SQUARES#16 -Self Phi Eliminated (byte*) heap_head#28 -Self Phi Eliminated (word*) SQUARES#23 -Self Phi Eliminated (byte) init_angle_screen::y#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 -Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2 -Self Phi Eliminated (word*) SQUARES#15 -Self Phi Eliminated (word) init_dist_screen::yds#1 -Self Phi Eliminated (byte) NUM_SQUARES#11 -Self Phi Eliminated (byte*) init_dist_screen::screen_topline#2 -Self Phi Eliminated (byte*) init_dist_screen::screen_bottomline#2 -Self Phi Eliminated (byte) init_dist_screen::y#3 -Self Phi Eliminated (byte*) heap_head#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2 Identical Phi Values (word*) bsearch16u::items#7 (word*) bsearch16u::items#1 Identical Phi Values (word) bsearch16u::key#4 (word) bsearch16u::key#0 @@ -2248,11 +2225,19 @@ Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#19 Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#13 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18 +Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 +Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 +Identical Phi Values (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#35 +Identical Phi Values (byte*) heap_head#27 (byte*) heap_head#47 +Identical Phi Values (word*) SQUARES#22 (word*) SQUARES#18 Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#15 Identical Phi Values (byte*) heap_head#19 (byte*) heap_head#27 Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#22 +Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 +Identical Phi Values (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#3 +Identical Phi Values (byte*) heap_head#47 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) bsearch16u::$5 [14] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7 Simple Condition (bool~) bsearch16u::$12 [26] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9 @@ -2262,12 +2247,12 @@ Simple Condition (bool~) init_squares::$5 [78] if((byte) init_squares::i#1!=rang Simple Condition (bool~) atan2_16::$0 [111] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [120] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$18 [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 -Simple Condition (bool~) atan2_16::$11 [143] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$11 [143] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$19 [146] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$20 [154] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$21 [157] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [174] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 -Simple Condition (bool~) atan2_16::$14 [178] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) atan2_16::$14 [178] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$3 [228] if(*((byte*) main::fill#2)==(byte) FILL_CHAR#0) goto main::@5 Simple Condition (bool~) main::$7 [235] if((byte*) main::fill#1<(byte*~) main::$6) goto main::@4 Simple Condition (bool~) main::$5 [241] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@5 @@ -2310,6 +2295,7 @@ Constant (const byte) init_dist_screen::y#0 = 0 Constant (const byte) init_dist_screen::x#0 = 0 Constant (const byte) init_dist_screen::xb#0 = $27 Successful SSA optimization Pass2ConstantIdentification +Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte*) main::fill#0 = SCREEN_FILL#0 Constant (const byte*) main::min_fill#0 = SCREEN_FILL#0 Successful SSA optimization Pass2ConstantIdentification @@ -2321,14 +2307,9 @@ Resolved ranged next value [374] init_dist_screen::y#1 ← ++ init_dist_screen:: Resolved ranged comparison value [376] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d Rewriting conditional comparison [297] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 Rewriting conditional comparison [370] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 -Eliminating unused variable - keeping the phi block (byte) NUM_SQUARES#15 -Eliminating unused variable - keeping the phi block (byte*) heap_head#27 -Eliminating unused variable - keeping the phi block (word*) SQUARES#22 Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused variable - keeping the phi block (byte*) heap_head#47 -Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#1<(byte) $13+(number) 1) goto init_angle_screen::@2 Adding number conversion cast (unumber) 1 in if((byte) init_angle_screen::x#1<(unumber)(byte) $13+(number) 1) goto init_angle_screen::@2 Adding number conversion cast (unumber) $d in if((byte) init_angle_screen::y#1!=(number) $d) goto init_angle_screen::@1 @@ -2350,31 +2331,20 @@ Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (signed word) atan2_16::x#17 -Self Phi Eliminated (signed word) atan2_16::y#19 -Self Phi Eliminated (word*) SQUARES#18 -Self Phi Eliminated (byte) NUM_SQUARES#35 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 -Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 -Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 -Identical Phi Values (byte) NUM_SQUARES#35 (const byte) NUM_SQUARES#3 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD Constant right-side identified [30] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 -Constant right-side identified [60] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 -Constant right-side identified [114] (byte*~) main::$6 ← (const byte*) SCREEN_FILL#0 + (word) $3e8 +Constant right-side identified [59] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 +Constant right-side identified [112] (byte*~) main::$6 ← (const byte*) SCREEN_FILL#0 + (word) $3e8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 -Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1 Constant (const byte*) main::$6 = SCREEN_FILL#0+$3e8 Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value [37] init_squares::i#1 ← ++ init_squares::i#2 to ++ Resolved ranged comparison value [38] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 -Resolved ranged next value [85] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ -Resolved ranged comparison value [86] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 +Resolved ranged next value [84] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [85] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 diff --git a/src/test/ref/semi-struct-1.log b/src/test/ref/semi-struct-1.log index eaa9463ed..572ab9b72 100644 --- a/src/test/ref/semi-struct-1.log +++ b/src/test/ref/semi-struct-1.log @@ -985,11 +985,6 @@ Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#37 (byte*) print_ Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#20 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#39 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#23 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/semi-struct-2.log b/src/test/ref/semi-struct-2.log index 28bb59203..205589bb6 100644 --- a/src/test/ref/semi-struct-2.log +++ b/src/test/ref/semi-struct-2.log @@ -3553,18 +3553,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) mul8u::a#3 = (byte) mul8u::a#5 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#74 -Self Phi Eliminated (byte*) print_screen#10 -Self Phi Eliminated (byte*) print_line_cursor#102 -Self Phi Eliminated (byte*) print_char_cursor#147 -Self Phi Eliminated (byte*) main::entry2#2 -Self Phi Eliminated (byte*) print_screen#11 -Self Phi Eliminated (byte*) print_line_cursor#103 -Self Phi Eliminated (byte*) print_char_cursor#148 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index 7b01f4d6c..39800e6c0 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -2621,30 +2621,6 @@ Alias (word) main::i#10 = (word) main::i#9 Alias (byte*) print_line_cursor#32 = (byte*) print_line_cursor#43 Alias (word) rem16u#22 = (word) rem16u#35 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#2 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#5 -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (word*) utoa::digit_values#5 -Self Phi Eliminated (byte) utoa::max_digits#5 -Self Phi Eliminated (word) utoa_append::sub#1 -Self Phi Eliminated (byte*) utoa_append::buffer#1 -Self Phi Eliminated (dword*) ultoa::digit_values#5 -Self Phi Eliminated (byte) ultoa::max_digits#5 -Self Phi Eliminated (dword) ultoa_append::sub#1 -Self Phi Eliminated (byte*) ultoa_append::buffer#1 -Self Phi Eliminated (byte*) print_char_cursor#31 -Self Phi Eliminated (word) main::i#12 -Self Phi Eliminated (byte*) main::sieve_i#5 -Self Phi Eliminated (word) rem16u#34 -Self Phi Eliminated (byte*) print_char_cursor#85 -Self Phi Eliminated (byte*) print_line_cursor#54 -Self Phi Eliminated (byte*) print_line_cursor#32 -Self Phi Eliminated (word) rem16u#22 -Self Phi Eliminated (byte*) print_line_cursor#19 -Self Phi Eliminated (byte*) print_char_cursor#27 -Self Phi Eliminated (word) rem16u#14 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) memset::c#2 (byte) memset::c#3 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 @@ -2727,6 +2703,10 @@ Identical Phi Values (word) rem16u#29 (word) rem16u#17 Identical Phi Values (byte*) print_char_cursor#82 (byte*) print_char_cursor#61 Identical Phi Values (byte*) print_line_cursor#51 (byte*) print_line_cursor#25 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (word) rem16u#17 (word) rem16u#0 +Identical Phi Values (byte*) print_char_cursor#61 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_line_cursor#25 (byte*) print_line_cursor#1 +Successful SSA optimization Pass2IdenticalPhiElimination Identified duplicate assignment right side [41] (byte~) clock_start::$2 ← (byte) CIA_TIMER_CONTROL_STOP#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 Identified duplicate assignment right side [48] (byte~) clock_start::$6 ← (byte) CIA_TIMER_CONTROL_START#0 | (byte) CIA_TIMER_CONTROL_CONTINUOUS#0 Successful SSA optimization Pass2DuplicateRValueIdentification @@ -2885,7 +2865,6 @@ Simplifying expression containing zero clock_start::$6 in [49] (byte~) clock_sta Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (void*) memset::return#2 and assignment [156] (void*) memset::return#2 ← (void*) memset::str#3 Eliminating unused variable (void*) memset::return#3 and assignment [176] (void*) memset::return#3 ← (void*) memset::str#3 -Eliminating unused variable - keeping the phi block (word) rem16u#17 Eliminating unused constant (const byte) BINARY Eliminating unused constant (const byte) OCTAL Eliminating unused constant (const byte) HEXADECIMAL @@ -2897,9 +2876,9 @@ Eliminating unused constant (const dword*) ultoa::digit_values#0 Eliminating unused constant (const byte) ultoa::radix#0 Eliminating unused constant (const byte) CIA_TIMER_CONTROL_STOP#0 Eliminating unused constant (const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES#0 +Eliminating unused constant (const word) rem16u#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte) DECIMAL -Eliminating unused constant (const word) rem16u#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte*) utoa::buffer#0 from unused block utoa::@12 Eliminating variable (byte*) utoa::buffer#1 from unused block utoa::@12 @@ -2950,15 +2929,10 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) clock_start::$1 = (byte~) clock_start::$0 (byte~) clock_start::$2 Alias (byte~) clock_start::$6 = (byte~) clock_start::$4 (byte~) clock_start::$7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print_char_cursor#61 -Self Phi Eliminated (byte*) print_line_cursor#25 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word*) utoa::digit_values#7 (const word*) utoa::digit_values#1 Identical Phi Values (byte) utoa::max_digits#8 (const byte) utoa::max_digits#1 Identical Phi Values (dword*) ultoa::digit_values#7 (const dword*) ultoa::digit_values#1 Identical Phi Values (byte) ultoa::max_digits#8 (const byte) ultoa::max_digits#1 -Identical Phi Values (byte*) print_char_cursor#61 (byte*) print_line_cursor#1 -Identical Phi Values (byte*) print_line_cursor#25 (byte*) print_line_cursor#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) utoa::$12 [65] if((byte) 0!=(byte) utoa::started#2) goto utoa::@20 Simple Condition (bool~) ultoa::$12 [94] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@20 diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index 9585911f0..40df48d26 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -710,14 +710,6 @@ Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#39 (byte*) print_ Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#8 Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#41 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#22 -Self Phi Eliminated (byte*) print_screen#3 -Self Phi Eliminated (byte*) print_line_cursor#18 -Self Phi Eliminated (byte*) print_char_cursor#48 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/signed-words.asm b/src/test/ref/signed-words.asm index f5d70e8aa..9b90cacc8 100644 --- a/src/test/ref/signed-words.asm +++ b/src/test/ref/signed-words.asm @@ -22,7 +22,7 @@ .label yvel_10 = 6 .label xvel = 2 .label yvel_12 = 6 - .label yvel_20 = 6 + .label yvel_21 = 6 main: { jsr init lda #<$64 @@ -84,9 +84,9 @@ anim: { sta yvel+1 b3: lda yvel - sta yvel_20 + sta yvel_21 lda yvel+1 - sta yvel_20+1 + sta yvel_21+1 lda #<0 sta ypos sta ypos+1 diff --git a/src/test/ref/signed-words.cfg b/src/test/ref/signed-words.cfg index bfdbfbb79..d9aefe49e 100644 --- a/src/test/ref/signed-words.cfg +++ b/src/test/ref/signed-words.cfg @@ -12,11 +12,11 @@ main: scope:[main] from @1 [5] call init to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [6] (signed word) yvel_init#13 ← phi( main/(signed byte) $64 main::@2/(signed word) yvel_init#11 ) - [6] (signed word) xvel#12 ← phi( main/(signed word) $c8 main::@2/(signed word) xvel#10 ) - [6] (signed word) ypos#13 ← phi( main/(signed byte) 0 main::@2/(signed word) ypos#11 ) - [6] (signed word) xpos#12 ← phi( main/(signed byte) 0 main::@2/(signed word) xpos#10 ) - [6] (signed word) yvel#12 ← phi( main/(signed byte) $64 main::@2/(signed word) yvel#10 ) + [6] (signed word) yvel_init#13 ← phi( main::@1/(signed word) yvel_init#13 main/(signed byte) $64 main::@2/(signed word) yvel_init#11 ) + [6] (signed word) xvel#12 ← phi( main::@1/(signed word) xvel#12 main/(signed word) $c8 main::@2/(signed word) xvel#10 ) + [6] (signed word) ypos#13 ← phi( main::@1/(signed word) ypos#13 main/(signed byte) 0 main::@2/(signed word) ypos#11 ) + [6] (signed word) xpos#12 ← phi( main::@1/(signed word) xpos#12 main/(signed byte) 0 main::@2/(signed word) xpos#10 ) + [6] (signed word) yvel#12 ← phi( main::@1/(signed word) yvel#12 main/(signed byte) $64 main::@2/(signed word) yvel#10 ) [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 @@ -36,14 +36,14 @@ anim::@4: scope:[anim] from anim::@2 to:anim::@3 anim::@3: scope:[anim] from anim::@2 anim::@4 [15] (signed word) yvel#4 ← phi( anim::@4/(signed word) yvel_init#3 anim::@2/(signed word) $c8 ) - [16] (signed word~) yvel#20 ← (signed word) yvel#4 + [16] (signed word~) yvel#21 ← (signed word) yvel#4 to:anim::@1 anim::@1: scope:[anim] from anim anim::@3 [17] (signed word) yvel_init#11 ← phi( anim/(signed word) yvel_init#13 anim::@3/(signed word) yvel#4 ) [17] (signed word) ypos#10 ← phi( anim/(signed word) ypos#13 anim::@3/(signed byte) 0 ) [17] (signed word) xvel#10 ← phi( anim/(signed word) xvel#12 anim::@3/(signed word) xvel#14 ) [17] (signed word) xpos#9 ← phi( anim/(signed word) xpos#12 anim::@3/(signed byte) 0 ) - [17] (signed word) yvel#9 ← phi( anim/(signed word) yvel#12 anim::@3/(signed word~) yvel#20 ) + [17] (signed word) yvel#9 ← phi( anim/(signed word) yvel#12 anim::@3/(signed word~) yvel#21 ) [18] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [19] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [20] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 8159dcea3..f23de12dc 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -600,12 +600,6 @@ Alias (signed word) xpos#14 = (signed word) xpos#17 Alias (signed word) xvel#14 = (signed word) xvel#17 Alias (signed word) ypos#14 = (signed word) ypos#17 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (signed word) yvel#12 -Self Phi Eliminated (signed word) xpos#12 -Self Phi Eliminated (signed word) ypos#13 -Self Phi Eliminated (signed word) xvel#12 -Self Phi Eliminated (signed word) yvel_init#13 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (signed word) yvel#16 (signed word) yvel#14 Identical Phi Values (signed word) xpos#18 (signed word) xpos#15 Identical Phi Values (signed word) ypos#18 (signed word) ypos#15 @@ -709,6 +703,7 @@ Constant inlined ypos#15 = (signed byte) 0 Constant inlined init::$1 = (byte)(const byte*) SPRITE#0/(byte) $40 Constant inlined init::$0 = (const byte*) SPRITE#0/(byte) $40 Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@7(between main::@2 and main::@2) Added new block during phi lifting init::@5(between init::@1 and init::@1) Added new block during phi lifting init::@6(between init::@3 and init::@3) Added new block during phi lifting anim::@5(between anim and anim::@1) @@ -729,28 +724,34 @@ Calls in [] to main:4 Calls in [main] to init:8 anim:13 Created 13 initial phi equivalence classes -Coalesced [14] yvel#18 ← yvel#10 -Coalesced [15] xpos#20 ← xpos#10 -Coalesced [16] ypos#20 ← ypos#11 -Coalesced [17] xvel#20 ← xvel#10 -Coalesced [18] yvel_init#20 ← yvel_init#11 -Not coalescing [25] yvel#20 ← yvel#4 -Coalesced [26] xvel#22 ← xvel#14 -Coalesced [27] yvel_init#22 ← yvel#4 -Coalesced [43] yvel#21 ← yvel_init#3 -Coalesced [44] yvel#19 ← yvel#12 -Coalesced [45] xpos#21 ← xpos#12 -Coalesced (already) [46] xvel#21 ← xvel#12 -Coalesced [47] ypos#21 ← ypos#13 -Coalesced (already) [48] yvel_init#21 ← yvel_init#13 -Coalesced [66] init::i#3 ← init::i#1 -Coalesced [67] init::sc#3 ← init::sc#1 +Coalesced [14] yvel#19 ← yvel#10 +Coalesced [15] xpos#21 ← xpos#10 +Coalesced [16] ypos#21 ← ypos#11 +Coalesced [17] xvel#21 ← xvel#10 +Coalesced [18] yvel_init#21 ← yvel_init#11 +Coalesced (already) [19] yvel#18 ← yvel#12 +Coalesced (already) [20] xpos#20 ← xpos#12 +Coalesced (already) [21] ypos#20 ← ypos#13 +Coalesced (already) [22] xvel#20 ← xvel#12 +Coalesced (already) [23] yvel_init#20 ← yvel_init#13 +Not coalescing [30] yvel#21 ← yvel#4 +Coalesced [31] xvel#23 ← xvel#14 +Coalesced [32] yvel_init#23 ← yvel#4 +Coalesced [48] yvel#22 ← yvel_init#3 +Coalesced [49] yvel#20 ← yvel#12 +Coalesced [50] xpos#22 ← xpos#12 +Coalesced (already) [51] xvel#22 ← xvel#12 +Coalesced [52] ypos#22 ← ypos#13 +Coalesced (already) [53] yvel_init#22 ← yvel_init#13 +Coalesced [71] init::i#3 ← init::i#1 +Coalesced [72] init::sc#3 ← init::sc#1 Coalesced down to 7 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @6 Culled Empty Block (label) @8 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@7 Culled Empty Block (label) anim::@3 Culled Empty Block (label) anim::@5 Culled Empty Block (label) init::@2 @@ -784,11 +785,11 @@ main: scope:[main] from @1 [5] call init to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [6] (signed word) yvel_init#13 ← phi( main/(signed byte) $64 main::@2/(signed word) yvel_init#11 ) - [6] (signed word) xvel#12 ← phi( main/(signed word) $c8 main::@2/(signed word) xvel#10 ) - [6] (signed word) ypos#13 ← phi( main/(signed byte) 0 main::@2/(signed word) ypos#11 ) - [6] (signed word) xpos#12 ← phi( main/(signed byte) 0 main::@2/(signed word) xpos#10 ) - [6] (signed word) yvel#12 ← phi( main/(signed byte) $64 main::@2/(signed word) yvel#10 ) + [6] (signed word) yvel_init#13 ← phi( main::@1/(signed word) yvel_init#13 main/(signed byte) $64 main::@2/(signed word) yvel_init#11 ) + [6] (signed word) xvel#12 ← phi( main::@1/(signed word) xvel#12 main/(signed word) $c8 main::@2/(signed word) xvel#10 ) + [6] (signed word) ypos#13 ← phi( main::@1/(signed word) ypos#13 main/(signed byte) 0 main::@2/(signed word) ypos#11 ) + [6] (signed word) xpos#12 ← phi( main::@1/(signed word) xpos#12 main/(signed byte) 0 main::@2/(signed word) xpos#10 ) + [6] (signed word) yvel#12 ← phi( main::@1/(signed word) yvel#12 main/(signed byte) $64 main::@2/(signed word) yvel#10 ) [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 @@ -808,14 +809,14 @@ anim::@4: scope:[anim] from anim::@2 to:anim::@3 anim::@3: scope:[anim] from anim::@2 anim::@4 [15] (signed word) yvel#4 ← phi( anim::@4/(signed word) yvel_init#3 anim::@2/(signed word) $c8 ) - [16] (signed word~) yvel#20 ← (signed word) yvel#4 + [16] (signed word~) yvel#21 ← (signed word) yvel#4 to:anim::@1 anim::@1: scope:[anim] from anim anim::@3 [17] (signed word) yvel_init#11 ← phi( anim/(signed word) yvel_init#13 anim::@3/(signed word) yvel#4 ) [17] (signed word) ypos#10 ← phi( anim/(signed word) ypos#13 anim::@3/(signed byte) 0 ) [17] (signed word) xvel#10 ← phi( anim/(signed word) xvel#12 anim::@3/(signed word) xvel#14 ) [17] (signed word) xpos#9 ← phi( anim/(signed word) xpos#12 anim::@3/(signed byte) 0 ) - [17] (signed word) yvel#9 ← phi( anim/(signed word) yvel#12 anim::@3/(signed word~) yvel#20 ) + [17] (signed word) yvel#9 ← phi( anim/(signed word) yvel#12 anim::@3/(signed word~) yvel#21 ) [18] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [19] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [20] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 @@ -893,31 +894,31 @@ VARIABLE REGISTER WEIGHTS (void()) main() (signed word) xpos (signed word) xpos#10 1.0714285714285714 -(signed word) xpos#12 3.25 +(signed word) xpos#12 53.75 (signed word) xpos#9 2.0 (signed word) xvel (signed word) xvel#10 1.0625 -(signed word) xvel#12 3.75 +(signed word) xvel#12 54.25 (signed word) xvel#14 0.6666666666666666 (signed word) ypos (signed word) ypos#10 1.3333333333333333 (signed word) ypos#11 1.1538461538461537 -(signed word) ypos#13 3.75 +(signed word) ypos#13 54.25 (signed word) yvel (signed word) yvel#10 0.9999999999999999 -(signed word) yvel#12 3.25 -(signed word~) yvel#20 4.0 +(signed word) yvel#12 53.75 +(signed word~) yvel#21 4.0 (signed word) yvel#4 3.0 (signed word) yvel#9 6.0 (signed word) yvel_init (signed word) yvel_init#11 0.9375 -(signed word) yvel_init#13 3.0 +(signed word) yvel_init#13 43.39999999999999 (signed word) yvel_init#3 2.0 Initial phi equivalence classes [ xvel#12 xvel#10 xvel#14 ] [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] -[ yvel#9 yvel#12 yvel#10 yvel#20 ] +[ yvel#9 yvel#12 yvel#10 yvel#21 ] [ xpos#9 xpos#12 xpos#10 ] [ ypos#10 ypos#13 ypos#11 ] [ init::sc#2 init::sc#1 ] @@ -932,7 +933,7 @@ Added variable anim::$11 to zero page equivalence class [ anim::$11 ] Complete equivalence classes [ xvel#12 xvel#10 xvel#14 ] [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] -[ yvel#9 yvel#12 yvel#10 yvel#20 ] +[ yvel#9 yvel#12 yvel#10 yvel#21 ] [ xpos#9 xpos#12 xpos#10 ] [ ypos#10 ypos#13 ypos#11 ] [ init::sc#2 init::sc#1 ] @@ -946,7 +947,7 @@ Complete equivalence classes [ anim::$11 ] Allocated zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] Allocated zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] -Allocated zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#20 ] +Allocated zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] Allocated zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] Allocated zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] Allocated zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] @@ -987,7 +988,7 @@ INITIAL ASM .label yvel_10 = 6 .label xvel = 2 .label yvel_12 = 6 - .label yvel_20 = 6 + .label yvel_21 = 6 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1036,8 +1037,14 @@ main: { lda #>$64 sta yvel_12+1 jmp b1 - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] b1_from_b1: + b1_from_b2: + // [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#13 [phi:main::@1/main::@2->main::@1#0] -- register_copy + // [6] phi (signed word) xvel#12 = (signed word) xvel#12 [phi:main::@1/main::@2->main::@1#1] -- register_copy + // [6] phi (signed word) ypos#13 = (signed word) ypos#13 [phi:main::@1/main::@2->main::@1#2] -- register_copy + // [6] phi (signed word) xpos#12 = (signed word) xpos#12 [phi:main::@1/main::@2->main::@1#3] -- register_copy + // [6] phi (signed word) yvel#12 = (signed word) yvel#12 [phi:main::@1/main::@2->main::@1#4] -- register_copy jmp b1 // main::@1 b1: @@ -1052,14 +1059,7 @@ main: { b2: // [9] call anim jsr anim - // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#11 [phi:main::@2->main::@1#0] -- register_copy - // [6] phi (signed word) xvel#12 = (signed word) xvel#10 [phi:main::@2->main::@1#1] -- register_copy - // [6] phi (signed word) ypos#13 = (signed word) ypos#11 [phi:main::@2->main::@1#2] -- register_copy - // [6] phi (signed word) xpos#12 = (signed word) xpos#10 [phi:main::@2->main::@1#3] -- register_copy - // [6] phi (signed word) yvel#12 = (signed word) yvel#10 [phi:main::@2->main::@1#4] -- register_copy - jmp b1 + jmp b1_from_b2 } // anim anim: { @@ -1120,11 +1120,11 @@ anim: { jmp b3 // anim::@3 b3: - // [16] (signed word~) yvel#20 ← (signed word) yvel#4 -- vwsz1=vwsz2 + // [16] (signed word~) yvel#21 ← (signed word) yvel#4 -- vwsz1=vwsz2 lda yvel - sta yvel_20 + sta yvel_21 lda yvel+1 - sta yvel_20+1 + sta yvel_21+1 // [17] phi from anim::@3 to anim::@1 [phi:anim::@3->anim::@1] b1_from_b3: // [17] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@3->anim::@1#0] -- register_copy @@ -1139,7 +1139,7 @@ anim: { sta xpos lda #>0 sta xpos+1 - // [17] phi (signed word) yvel#9 = (signed word~) yvel#20 [phi:anim::@3->anim::@1#4] -- register_copy + // [17] phi (signed word) yvel#9 = (signed word~) yvel#21 [phi:anim::@3->anim::@1#4] -- register_copy jmp b1 // [17] phi from anim to anim::@1 [phi:anim->anim::@1] b1_from_anim: @@ -1341,7 +1341,7 @@ Statement [10] if((signed word) ypos#13>=(signed byte) 0) goto anim::@1 [ yvel#1 Statement [11] (signed word) xvel#14 ← - (signed word) xvel#12 [ yvel_init#13 xvel#14 ] ( main:2::anim:9 [ yvel_init#13 xvel#14 ] ) always clobbers reg byte a Statement [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (signed byte) $a [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a Statement [13] if((signed word) yvel_init#3>=(signed word) -$c8) goto anim::@4 [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a -Statement [16] (signed word~) yvel#20 ← (signed word) yvel#4 [ xvel#14 yvel#4 yvel#20 ] ( main:2::anim:9 [ xvel#14 yvel#4 yvel#20 ] ) always clobbers reg byte a +Statement [16] (signed word~) yvel#21 ← (signed word) yvel#4 [ xvel#14 yvel#4 yvel#21 ] ( main:2::anim:9 [ xvel#14 yvel#4 yvel#21 ] ) always clobbers reg byte a Statement [18] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ( main:2::anim:9 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ) always clobbers reg byte a Statement [19] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ( main:2::anim:9 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ) always clobbers reg byte a Statement [20] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) always clobbers reg byte a @@ -1368,7 +1368,7 @@ Statement [10] if((signed word) ypos#13>=(signed byte) 0) goto anim::@1 [ yvel#1 Statement [11] (signed word) xvel#14 ← - (signed word) xvel#12 [ yvel_init#13 xvel#14 ] ( main:2::anim:9 [ yvel_init#13 xvel#14 ] ) always clobbers reg byte a Statement [12] (signed word) yvel_init#3 ← (signed word) yvel_init#13 - (signed byte) $a [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a Statement [13] if((signed word) yvel_init#3>=(signed word) -$c8) goto anim::@4 [ xvel#14 yvel_init#3 ] ( main:2::anim:9 [ xvel#14 yvel_init#3 ] ) always clobbers reg byte a -Statement [16] (signed word~) yvel#20 ← (signed word) yvel#4 [ xvel#14 yvel#4 yvel#20 ] ( main:2::anim:9 [ xvel#14 yvel#4 yvel#20 ] ) always clobbers reg byte a +Statement [16] (signed word~) yvel#21 ← (signed word) yvel#4 [ xvel#14 yvel#4 yvel#21 ] ( main:2::anim:9 [ xvel#14 yvel#4 yvel#21 ] ) always clobbers reg byte a Statement [18] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ( main:2::anim:9 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ) always clobbers reg byte a Statement [19] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ( main:2::anim:9 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ) always clobbers reg byte a Statement [20] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) always clobbers reg byte a @@ -1391,7 +1391,7 @@ Statement [42] if((byte*) init::sc#1!=(const byte*) SCREEN#0+(word) $3e8) goto i Statement [44] *((const byte*) SPRITE#0 + (byte) init::i#2) ← (byte) $ff [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] : zp ZP_WORD:4 , -Potential registers zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#20 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] : zp ZP_WORD:6 , Potential registers zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] : zp ZP_WORD:8 , Potential registers zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] : zp ZP_WORD:10 , Potential registers zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] : zp ZP_WORD:12 , @@ -1405,15 +1405,15 @@ Potential registers zp ZP_BYTE:24 [ anim::$10 ] : zp ZP_BYTE:24 , reg byte a , r Potential registers zp ZP_BYTE:25 [ anim::$11 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES +Uplift Scope [] 64.75: zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] 56.82: zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] 56.74: zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] 55.98: zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] 49.34: zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] Uplift Scope [init] 33: zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] 33: zp ZP_BYTE:14 [ init::i#2 init::i#1 ] -Uplift Scope [] 14.25: zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#20 ] 8.94: zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] 6.32: zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] 6.24: zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] 5.48: zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] Uplift Scope [anim] 4: zp ZP_WORD:15 [ anim::$5 ] 4: zp ZP_WORD:19 [ anim::$7 ] 4: zp ZP_BYTE:23 [ anim::$9 ] 4: zp ZP_BYTE:24 [ anim::$10 ] 4: zp ZP_BYTE:25 [ anim::$11 ] 0.67: zp ZP_WORD:21 [ anim::sprite_y#0 ] 0.57: zp ZP_WORD:17 [ anim::sprite_x#0 ] Uplift Scope [main] -Uplifting [init] best 8054 combination zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] -Uplifting [] best 8054 combination zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#20 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] -Uplifting [anim] best 8036 combination zp ZP_WORD:15 [ anim::$5 ] zp ZP_WORD:19 [ anim::$7 ] reg byte a [ anim::$9 ] reg byte a [ anim::$10 ] reg byte a [ anim::$11 ] zp ZP_WORD:21 [ anim::sprite_y#0 ] zp ZP_WORD:17 [ anim::sprite_x#0 ] -Uplifting [main] best 8036 combination +Uplifting [] best 7904 combination zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] +Uplifting [init] best 7784 combination zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] +Uplifting [anim] best 7766 combination zp ZP_WORD:15 [ anim::$5 ] zp ZP_WORD:19 [ anim::$7 ] reg byte a [ anim::$9 ] reg byte a [ anim::$10 ] reg byte a [ anim::$11 ] zp ZP_WORD:21 [ anim::sprite_y#0 ] zp ZP_WORD:17 [ anim::sprite_x#0 ] +Uplifting [main] best 7766 combination Coalescing zero page register with common assignment [ zp ZP_WORD:15 [ anim::$5 ] ] with [ zp ZP_WORD:17 [ anim::sprite_x#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ anim::$7 ] ] with [ zp ZP_WORD:21 [ anim::sprite_y#0 ] ] - score: 1 Allocated (was zp ZP_WORD:15) zp ZP_WORD:14 [ anim::$5 anim::sprite_x#0 ] @@ -1447,7 +1447,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label yvel_10 = 6 .label xvel = 2 .label yvel_12 = 6 - .label yvel_20 = 6 + .label yvel_21 = 6 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1496,8 +1496,14 @@ main: { lda #>$64 sta yvel_12+1 jmp b1 - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] b1_from_b1: + b1_from_b2: + // [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#13 [phi:main::@1/main::@2->main::@1#0] -- register_copy + // [6] phi (signed word) xvel#12 = (signed word) xvel#12 [phi:main::@1/main::@2->main::@1#1] -- register_copy + // [6] phi (signed word) ypos#13 = (signed word) ypos#13 [phi:main::@1/main::@2->main::@1#2] -- register_copy + // [6] phi (signed word) xpos#12 = (signed word) xpos#12 [phi:main::@1/main::@2->main::@1#3] -- register_copy + // [6] phi (signed word) yvel#12 = (signed word) yvel#12 [phi:main::@1/main::@2->main::@1#4] -- register_copy jmp b1 // main::@1 b1: @@ -1512,14 +1518,7 @@ main: { b2: // [9] call anim jsr anim - // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#11 [phi:main::@2->main::@1#0] -- register_copy - // [6] phi (signed word) xvel#12 = (signed word) xvel#10 [phi:main::@2->main::@1#1] -- register_copy - // [6] phi (signed word) ypos#13 = (signed word) ypos#11 [phi:main::@2->main::@1#2] -- register_copy - // [6] phi (signed word) xpos#12 = (signed word) xpos#10 [phi:main::@2->main::@1#3] -- register_copy - // [6] phi (signed word) yvel#12 = (signed word) yvel#10 [phi:main::@2->main::@1#4] -- register_copy - jmp b1 + jmp b1_from_b2 } // anim anim: { @@ -1577,11 +1576,11 @@ anim: { jmp b3 // anim::@3 b3: - // [16] (signed word~) yvel#20 ← (signed word) yvel#4 -- vwsz1=vwsz2 + // [16] (signed word~) yvel#21 ← (signed word) yvel#4 -- vwsz1=vwsz2 lda yvel - sta yvel_20 + sta yvel_21 lda yvel+1 - sta yvel_20+1 + sta yvel_21+1 // [17] phi from anim::@3 to anim::@1 [phi:anim::@3->anim::@1] b1_from_b3: // [17] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@3->anim::@1#0] -- register_copy @@ -1596,7 +1595,7 @@ anim: { sta xpos lda #>0 sta xpos+1 - // [17] phi (signed word) yvel#9 = (signed word~) yvel#20 [phi:anim::@3->anim::@1#4] -- register_copy + // [17] phi (signed word) yvel#9 = (signed word~) yvel#21 [phi:anim::@3->anim::@1#4] -- register_copy jmp b1 // [17] phi from anim to anim::@1 [phi:anim->anim::@1] b1_from_anim: @@ -1806,6 +1805,7 @@ Removing instruction lda #0 Removing instruction lda #$64 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 +Replacing label b1_from_b2 with b1 Replacing label b1_from_anim with b1 Replacing label b4_from_b2 with b3 Replacing label b1_from_b1 with b1 @@ -1816,6 +1816,7 @@ Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: Removing instruction b1_from_b1: +Removing instruction b1_from_b2: Removing instruction b2_from_b1: Removing instruction b4_from_b2: Removing instruction b4: @@ -1827,7 +1828,6 @@ Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction b1_from_main: Removing instruction b2: -Removing instruction b1_from_b2: Removing instruction b2: Removing instruction b3_from_b2: Removing instruction b1_from_b3: @@ -1908,30 +1908,30 @@ FINAL SYMBOL TABLE (label) main::@2 (signed word) xpos (signed word) xpos#10 xpos zp ZP_WORD:8 1.0714285714285714 -(signed word) xpos#12 xpos zp ZP_WORD:8 3.25 +(signed word) xpos#12 xpos zp ZP_WORD:8 53.75 (signed word) xpos#9 xpos zp ZP_WORD:8 2.0 (signed word) xvel (signed word) xvel#10 xvel zp ZP_WORD:2 1.0625 -(signed word) xvel#12 xvel zp ZP_WORD:2 3.75 +(signed word) xvel#12 xvel zp ZP_WORD:2 54.25 (signed word) xvel#14 xvel zp ZP_WORD:2 0.6666666666666666 (signed word) ypos (signed word) ypos#10 ypos zp ZP_WORD:10 1.3333333333333333 (signed word) ypos#11 ypos zp ZP_WORD:10 1.1538461538461537 -(signed word) ypos#13 ypos zp ZP_WORD:10 3.75 +(signed word) ypos#13 ypos zp ZP_WORD:10 54.25 (signed word) yvel (signed word) yvel#10 yvel#10 zp ZP_WORD:6 0.9999999999999999 -(signed word) yvel#12 yvel#12 zp ZP_WORD:6 3.25 -(signed word~) yvel#20 yvel#20 zp ZP_WORD:6 4.0 +(signed word) yvel#12 yvel#12 zp ZP_WORD:6 53.75 +(signed word~) yvel#21 yvel#21 zp ZP_WORD:6 4.0 (signed word) yvel#4 yvel zp ZP_WORD:4 3.0 (signed word) yvel#9 yvel#9 zp ZP_WORD:6 6.0 (signed word) yvel_init (signed word) yvel_init#11 yvel_init zp ZP_WORD:4 0.9375 -(signed word) yvel_init#13 yvel_init zp ZP_WORD:4 3.0 +(signed word) yvel_init#13 yvel_init zp ZP_WORD:4 43.39999999999999 (signed word) yvel_init#3 yvel_init zp ZP_WORD:4 2.0 zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] -zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#20 ] +zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] @@ -1944,7 +1944,7 @@ reg byte a [ anim::$11 ] FINAL ASSEMBLER -Score: 6613 +Score: 6343 // File Comments // Basic Upstart @@ -1973,7 +1973,7 @@ Score: 6613 .label yvel_10 = 6 .label xvel = 2 .label yvel_12 = 6 - .label yvel_20 = 6 + .label yvel_21 = 6 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -2009,7 +2009,12 @@ main: { sta yvel_12 lda #>$64 sta yvel_12+1 - // [6] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [6] phi from main::@1 main::@2 to main::@1 [phi:main::@1/main::@2->main::@1] + // [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#13 [phi:main::@1/main::@2->main::@1#0] -- register_copy + // [6] phi (signed word) xvel#12 = (signed word) xvel#12 [phi:main::@1/main::@2->main::@1#1] -- register_copy + // [6] phi (signed word) ypos#13 = (signed word) ypos#13 [phi:main::@1/main::@2->main::@1#2] -- register_copy + // [6] phi (signed word) xpos#12 = (signed word) xpos#12 [phi:main::@1/main::@2->main::@1#3] -- register_copy + // [6] phi (signed word) yvel#12 = (signed word) yvel#12 [phi:main::@1/main::@2->main::@1#4] -- register_copy // main::@1 b1: // while (*RASTER!=$ff) @@ -2022,12 +2027,6 @@ main: { // anim() // [9] call anim jsr anim - // [6] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [6] phi (signed word) yvel_init#13 = (signed word) yvel_init#11 [phi:main::@2->main::@1#0] -- register_copy - // [6] phi (signed word) xvel#12 = (signed word) xvel#10 [phi:main::@2->main::@1#1] -- register_copy - // [6] phi (signed word) ypos#13 = (signed word) ypos#11 [phi:main::@2->main::@1#2] -- register_copy - // [6] phi (signed word) xpos#12 = (signed word) xpos#10 [phi:main::@2->main::@1#3] -- register_copy - // [6] phi (signed word) yvel#12 = (signed word) yvel#10 [phi:main::@2->main::@1#4] -- register_copy jmp b1 } // anim @@ -2081,11 +2080,11 @@ anim: { // [15] phi (signed word) yvel#4 = (signed word) yvel_init#3 [phi:anim::@4->anim::@3#0] -- register_copy // anim::@3 b3: - // [16] (signed word~) yvel#20 ← (signed word) yvel#4 -- vwsz1=vwsz2 + // [16] (signed word~) yvel#21 ← (signed word) yvel#4 -- vwsz1=vwsz2 lda yvel - sta yvel_20 + sta yvel_21 lda yvel+1 - sta yvel_20+1 + sta yvel_21+1 // [17] phi from anim::@3 to anim::@1 [phi:anim::@3->anim::@1] // [17] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@3->anim::@1#0] -- register_copy // [17] phi (signed word) ypos#10 = (signed byte) 0 [phi:anim::@3->anim::@1#1] -- vwsz1=vbsc1 @@ -2096,7 +2095,7 @@ anim: { // [17] phi (signed word) xpos#9 = (signed byte) 0 [phi:anim::@3->anim::@1#3] -- vwsz1=vbsc1 sta xpos sta xpos+1 - // [17] phi (signed word) yvel#9 = (signed word~) yvel#20 [phi:anim::@3->anim::@1#4] -- register_copy + // [17] phi (signed word) yvel#9 = (signed word~) yvel#21 [phi:anim::@3->anim::@1#4] -- register_copy // [17] phi from anim to anim::@1 [phi:anim->anim::@1] // [17] phi (signed word) yvel_init#11 = (signed word) yvel_init#13 [phi:anim->anim::@1#0] -- register_copy // [17] phi (signed word) ypos#10 = (signed word) ypos#13 [phi:anim->anim::@1#1] -- register_copy diff --git a/src/test/ref/signed-words.sym b/src/test/ref/signed-words.sym index 219fd4624..7a311d548 100644 --- a/src/test/ref/signed-words.sym +++ b/src/test/ref/signed-words.sym @@ -57,30 +57,30 @@ (label) main::@2 (signed word) xpos (signed word) xpos#10 xpos zp ZP_WORD:8 1.0714285714285714 -(signed word) xpos#12 xpos zp ZP_WORD:8 3.25 +(signed word) xpos#12 xpos zp ZP_WORD:8 53.75 (signed word) xpos#9 xpos zp ZP_WORD:8 2.0 (signed word) xvel (signed word) xvel#10 xvel zp ZP_WORD:2 1.0625 -(signed word) xvel#12 xvel zp ZP_WORD:2 3.75 +(signed word) xvel#12 xvel zp ZP_WORD:2 54.25 (signed word) xvel#14 xvel zp ZP_WORD:2 0.6666666666666666 (signed word) ypos (signed word) ypos#10 ypos zp ZP_WORD:10 1.3333333333333333 (signed word) ypos#11 ypos zp ZP_WORD:10 1.1538461538461537 -(signed word) ypos#13 ypos zp ZP_WORD:10 3.75 +(signed word) ypos#13 ypos zp ZP_WORD:10 54.25 (signed word) yvel (signed word) yvel#10 yvel#10 zp ZP_WORD:6 0.9999999999999999 -(signed word) yvel#12 yvel#12 zp ZP_WORD:6 3.25 -(signed word~) yvel#20 yvel#20 zp ZP_WORD:6 4.0 +(signed word) yvel#12 yvel#12 zp ZP_WORD:6 53.75 +(signed word~) yvel#21 yvel#21 zp ZP_WORD:6 4.0 (signed word) yvel#4 yvel zp ZP_WORD:4 3.0 (signed word) yvel#9 yvel#9 zp ZP_WORD:6 6.0 (signed word) yvel_init (signed word) yvel_init#11 yvel_init zp ZP_WORD:4 0.9375 -(signed word) yvel_init#13 yvel_init zp ZP_WORD:4 3.0 +(signed word) yvel_init#13 yvel_init zp ZP_WORD:4 43.39999999999999 (signed word) yvel_init#3 yvel_init zp ZP_WORD:4 2.0 zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] -zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#20 ] +zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index bb7c42937..147fb7e0d 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -705,8 +705,6 @@ Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#26 (byte*) print_ Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#28 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print_char_cursor#15 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#13 Identical Phi Values (byte*) print_char_cursor#29 (byte*) print_char_cursor#11 Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#29 diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index cc3655ca1..824d86624 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -1662,16 +1662,6 @@ Alias (signed word*) main::st1#2 = (signed word*) main::st1#3 Alias (word) rem16u#18 = (word) rem16u#32 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#17 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (dword) sin16s_gen::step#1 -Self Phi Eliminated (word) sin16s_gen::wavelength#2 -Self Phi Eliminated (word) rem16u#16 -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (word) rem16u#18 -Self Phi Eliminated (byte*) print_line_cursor#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 diff --git a/src/test/ref/sinusgen16b.log b/src/test/ref/sinusgen16b.log index 92b3fb088..8c664138a 100644 --- a/src/test/ref/sinusgen16b.log +++ b/src/test/ref/sinusgen16b.log @@ -2169,19 +2169,6 @@ Alias (byte) main::i#2 = (byte) main::i#5 Alias (word) rem16u#12 = (word) rem16u#41 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#18 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#2 -Self Phi Eliminated (dword) sin16s_gen::step#1 -Self Phi Eliminated (word) sin16s_gen::wavelength#2 -Self Phi Eliminated (word) rem16u#19 -Self Phi Eliminated (dword) sin16s_genb::step#1 -Self Phi Eliminated (word) sin16s_genb::wavelength#2 -Self Phi Eliminated (word) rem16u#21 -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (word) rem16u#12 -Self Phi Eliminated (byte*) print_line_cursor#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (word) rem16u#15 (word) rem16u#1 Identical Phi Values (word) rem16u#16 (word) rem16u#1 diff --git a/src/test/ref/sinusgen8.log b/src/test/ref/sinusgen8.log index a1b576c9d..8ef87821a 100644 --- a/src/test/ref/sinusgen8.log +++ b/src/test/ref/sinusgen8.log @@ -1701,14 +1701,6 @@ Alias (signed byte) main::sb#0 = (signed byte) main::sb#1 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#17 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#1 -Self Phi Eliminated (word) sin8s_gen::step#1 -Self Phi Eliminated (word) sin8s_gen::wavelength#2 -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_line_cursor#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::rem#8 (word) divr16u::rem#3 Identical Phi Values (word) divr16u::dividend#4 (word) divr16u::dividend#1 Identical Phi Values (word) divr16u::divisor#5 (word) divr16u::divisor#0 diff --git a/src/test/ref/sinusgen8b.log b/src/test/ref/sinusgen8b.log index 35d01ee27..3e91dbe86 100644 --- a/src/test/ref/sinusgen8b.log +++ b/src/test/ref/sinusgen8b.log @@ -2289,19 +2289,6 @@ Alias (dword) mul16u::mb#2 = (dword) mul16u::mb#3 Alias (byte) sin16s::isUpper#2 = (byte) sin16s::isUpper#8 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#3 (byte) sin8s::isUpper#2 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#3 -Self Phi Eliminated (dword) sin16s_gen::step#1 -Self Phi Eliminated (word) sin16s_gen::wavelength#2 -Self Phi Eliminated (word) rem16u#23 -Self Phi Eliminated (word) sin8s_gen::step#1 -Self Phi Eliminated (word) sin8s_gen::wavelength#2 -Self Phi Eliminated (word) rem16u#11 -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (word) rem16u#14 -Self Phi Eliminated (byte*) print_line_cursor#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::divisor#3 (word) divr16u::divisor#7 Identical Phi Values (word) div16u::dividend#1 (word) div16u::dividend#0 Identical Phi Values (word) div16u::divisor#1 (word) div16u::divisor#0 diff --git a/src/test/ref/sinusgenscale8.log b/src/test/ref/sinusgenscale8.log index 05fb9e4e1..7bb11621d 100644 --- a/src/test/ref/sinusgenscale8.log +++ b/src/test/ref/sinusgenscale8.log @@ -2381,16 +2381,6 @@ Alias (byte) mul8u::a#3 = (byte) mul8u::a#5 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#3 (byte) sin8s::isUpper#2 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) divr16u::divisor#1 -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#50 -Self Phi Eliminated (byte) sin8u_table::amplitude#10 -Self Phi Eliminated (byte) sin8u_table::mid#12 -Self Phi Eliminated (word) sin8u_table::step#10 -Self Phi Eliminated (word) sin8u_table::tabsize#10 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) divr16u::rem#8 (word) divr16u::rem#3 Identical Phi Values (word) divr16u::dividend#4 (word) divr16u::dividend#1 Identical Phi Values (word) divr16u::divisor#5 (word) divr16u::divisor#0 diff --git a/src/test/ref/strip.log b/src/test/ref/strip.log index 5e46f99c5..7e6cc12e1 100644 --- a/src/test/ref/strip.log +++ b/src/test/ref/strip.log @@ -206,8 +206,6 @@ Successful SSA optimization Pass2AliasElimination Alias (byte*) strip::p#4 = (byte*) strip::p#5 Alias (byte) strip::c#2 = (byte) strip::c#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) strip::c#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) screen#13 (byte*) screen#16 Identical Phi Values (byte*) screen#0 (byte*) screen#11 Identical Phi Values (byte*) screen#1 (byte*) screen#11 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index bdaa7fb1c..dd4347df6 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -1488,17 +1488,6 @@ Alias (signed word) compare::w1#1 = (signed word) compare::w1#21 Alias (byte*) print_char_cursor#100 = (byte*) print_char_cursor#67 Alias (signed word) compare::w2#1 = (signed word) compare::w2#15 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#33 -Self Phi Eliminated (signed word) main::w1#1 -Self Phi Eliminated (signed word) main::w2#1 -Self Phi Eliminated (byte) main::j#3 -Self Phi Eliminated (byte) main::i#3 -Self Phi Eliminated (byte*) print_line_cursor#15 -Self Phi Eliminated (byte*) print_char_cursor#22 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -1549,6 +1538,8 @@ Identical Phi Values (byte*) print_char_cursor#30 (byte*) print_char_cursor#22 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 Identical Phi Values (byte*) print_char_cursor#64 (byte*) print_char_cursor#15 +Identical Phi Values (signed word) main::w1#2 (signed word) main::w1#0 +Identical Phi Values (byte) main::i#10 (byte) main::i#2 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_char_cursor#66 (byte*) print_char_cursor#15 Successful SSA optimization Pass2IdenticalPhiElimination @@ -1625,7 +1616,7 @@ Resolved ranged next value [147] main::op#1 ← ++ main::op#2 to ++ Resolved ranged comparison value [149] if(main::op#1!=rangelast(0,5)) goto main::@3 to (number) 6 Resolved ranged next value [157] main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value [159] if(main::j#1!=rangelast(0,2)) goto main::@2 to (number) 3 -Resolved ranged next value [161] main::i#1 ← ++ main::i#10 to ++ +Resolved ranged next value [161] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [163] if(main::i#1!=rangelast(0,2)) goto main::@1 to (number) 3 Eliminating unused variable (void*) memset::return#2 and assignment [46] (void*) memset::return#2 ← (void*) memset::str#0 Successful SSA optimization PassNEliminateUnusedVars @@ -1643,12 +1634,6 @@ Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (signed word) main::w1#2 -Self Phi Eliminated (byte) main::i#10 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (signed word) main::w1#2 (signed word) main::w1#0 -Identical Phi Values (byte) main::i#10 (byte) main::i#2 -Successful SSA optimization Pass2IdenticalPhiElimination Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 7c4eddfe8..527416e20 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -1277,17 +1277,6 @@ Alias (word) compare::w1#1 = (word) compare::w1#7 Alias (byte*) print_char_cursor#58 = (byte*) print_char_cursor#64 Alias (word) compare::w2#1 = (word) compare::w2#14 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#28 -Self Phi Eliminated (word) main::w1#1 -Self Phi Eliminated (word) main::w2#1 -Self Phi Eliminated (byte) main::j#3 -Self Phi Eliminated (byte) main::i#3 -Self Phi Eliminated (byte*) print_line_cursor#15 -Self Phi Eliminated (byte*) print_char_cursor#18 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -1331,6 +1320,8 @@ Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#15 Identical Phi Values (byte*) print_char_cursor#25 (byte*) print_char_cursor#18 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 +Identical Phi Values (word) main::w1#2 (word) main::w1#0 +Identical Phi Values (byte) main::i#10 (byte) main::i#2 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$4 [15] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4 @@ -1393,7 +1384,7 @@ Resolved ranged next value [123] main::op#1 ← ++ main::op#2 to ++ Resolved ranged comparison value [125] if(main::op#1!=rangelast(0,5)) goto main::@3 to (number) 6 Resolved ranged next value [133] main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value [135] if(main::j#1!=rangelast(0,2)) goto main::@2 to (number) 3 -Resolved ranged next value [137] main::i#1 ← ++ main::i#10 to ++ +Resolved ranged next value [137] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [139] if(main::i#1!=rangelast(0,2)) goto main::@1 to (number) 3 Eliminating unused variable (void*) memset::return#2 and assignment [38] (void*) memset::return#2 ← (void*) memset::str#0 Successful SSA optimization PassNEliminateUnusedVars @@ -1411,12 +1402,6 @@ Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 3 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (word) main::w1#2 -Self Phi Eliminated (byte) main::i#10 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (word) main::w1#2 (word) main::w1#0 -Identical Phi Values (byte) main::i#10 (byte) main::i#2 -Successful SSA optimization Pass2IdenticalPhiElimination Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 Successful SSA optimization Pass2ConstantIdentification Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0 diff --git a/src/test/ref/test-comparisons.log b/src/test/ref/test-comparisons.log index b5c6eceb9..5d3340865 100644 --- a/src/test/ref/test-comparisons.log +++ b/src/test/ref/test-comparisons.log @@ -2119,13 +2119,6 @@ Alias (byte*) print_char_cursor#114 = (byte*) print_char_cursor#138 Alias (byte*) print_char_cursor#115 = (byte*) print_char_cursor#139 Alias (byte*) print_char_cursor#116 = (byte*) print_char_cursor#140 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#49 -Self Phi Eliminated (byte*) print_line_cursor#11 -Self Phi Eliminated (byte*) print_char_cursor#117 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/test-division.log b/src/test/ref/test-division.log index 3adb8ba6d..3518ebdab 100644 --- a/src/test/ref/test-division.log +++ b/src/test/ref/test-division.log @@ -3182,13 +3182,6 @@ Alias (word) divr16s::dividendu#3 = (word) divr16s::dividendu#4 Alias (word) divr16s::remu#3 = (word) divr16s::remu#4 Alias (word) rem16u#20 = (word) rem16u#23 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#68 -Self Phi Eliminated (byte) divr8u::divisor#1 -Self Phi Eliminated (word) divr16u::divisor#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/test-interrupt-volatile-write.cfg b/src/test/ref/test-interrupt-volatile-write.cfg index c632ae609..e169cae25 100644 --- a/src/test/ref/test-interrupt-volatile-write.cfg +++ b/src/test/ref/test-interrupt-volatile-write.cfg @@ -11,7 +11,7 @@ main: scope:[main] from @1 [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [5] (byte) col#14 ← phi( main/(byte) col#0 main::@3/(byte) col#1 ) + [5] (byte) col#14 ← phi( main/(byte) col#0 main::@2/(byte) col#14 main::@3/(byte) col#1 ) to:main::@2 main::@2: scope:[main] from main::@1 [6] if((byte) col#14<(byte) $a+(byte) 1) goto main::@1 diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index 4efe0d68b..ea56a62fd 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -141,8 +141,6 @@ Alias (byte) col#12 = (byte) col#5 Alias (byte) col#0 = (byte) col#15 Alias (byte) col#13 = (byte) col#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) col#14 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) col#16 (byte) col#0 Identical Phi Values (byte) col#10 (byte) col#0 Identical Phi Values (byte) col#13 (byte) col#14 @@ -171,6 +169,7 @@ Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq() Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@9(between main::@2 and main::@1) Adding NOP phi() at start of @2 Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -179,11 +178,13 @@ Calls in [] to main:2 Created 2 initial phi equivalence classes Coalesced [6] col#17 ← col#0 -Coalesced [10] col#18 ← col#1 -Coalesced [15] col#20 ← col#4 -Coalesced [19] col#19 ← col#3 +Coalesced [10] col#19 ← col#1 +Coalesced (already) [11] col#18 ← col#14 +Coalesced [16] col#21 ← col#4 +Coalesced [20] col#20 ← col#3 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @3 +Culled Empty Block (label) main::@9 Renumbering block @2 to @1 Renumbering block main::@7 to main::@3 Renumbering block irq::@3 to irq::@2 @@ -204,7 +205,7 @@ main: scope:[main] from @1 [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() to:main::@1 main::@1: scope:[main] from main main::@2 main::@3 - [5] (byte) col#14 ← phi( main/(byte) col#0 main::@3/(byte) col#1 ) + [5] (byte) col#14 ← phi( main/(byte) col#0 main::@2/(byte) col#14 main::@3/(byte) col#1 ) to:main::@2 main::@2: scope:[main] from main::@1 [6] if((byte) col#14<(byte) $a+(byte) 1) goto main::@1 @@ -236,7 +237,7 @@ VARIABLE REGISTER WEIGHTS (byte) col#0 1.9999999999999998 (byte) col#1 22.0 (byte) col#12 40.0 -(byte) col#14 114.0 +(byte) col#14 158.0 (byte) col#3 4.0 (byte) col#4 4.0 interrupt(KERNEL_MIN)(void()) irq() @@ -286,13 +287,11 @@ main: { sta KERNEL_IRQ lda #>irq sta KERNEL_IRQ+1 - // [5] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] + // [5] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] b1_from_main: - b1_from_b3: - // [5] phi (byte) col#14 = (byte) col#0 [phi:main/main::@3->main::@1#0] -- register_copy - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: + b1_from_b3: + // [5] phi (byte) col#14 = (byte) col#0 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -351,7 +350,7 @@ irq: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] (byte) col#0 ← (byte) 0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a Statement [4] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ col#0 ] ( main:2 [ col#0 ] ) always clobbers reg byte a -Statement [6] if((byte) col#14<(byte) $a+(byte) 1) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] if((byte) col#14<(byte) $a+(byte) 1) goto main::@1 [ col#14 ] ( main:2 [ col#14 ] ) always clobbers reg byte a Statement [7] (byte) col#1 ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] ) always clobbers reg byte a Statement asm { lda$dc0d } always clobbers reg byte a Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a @@ -360,15 +359,15 @@ Statement [11] (byte) col#4 ← (byte) col#0 + (byte) 2 [ col#4 ] ( [ col#4 ] ) Potential registers zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] : zp ZP_BYTE:2 , REGISTER UPLIFT SCOPES -Uplift Scope [] 186: zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] +Uplift Scope [] 230: zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] Uplift Scope [main] Uplift Scope [irq] -Uplifting [] best 1834 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] -Uplifting [main] best 1834 combination -Uplifting [irq] best 1834 combination +Uplifting [] best 1534 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] +Uplifting [main] best 1534 combination +Uplifting [irq] best 1534 combination Attempting to uplift remaining variables inzp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] -Uplifting [] best 1834 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] +Uplifting [] best 1534 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -406,13 +405,11 @@ main: { sta KERNEL_IRQ lda #>irq sta KERNEL_IRQ+1 - // [5] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] + // [5] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] b1_from_main: - b1_from_b3: - // [5] phi (byte) col#14 = (byte) col#0 [phi:main/main::@3->main::@1#0] -- register_copy - jmp b1 - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] b1_from_b2: + b1_from_b3: + // [5] phi (byte) col#14 = (byte) col#0 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy jmp b1 // main::@1 b1: @@ -477,13 +474,14 @@ Removing instruction jmp b3 Removing instruction jmp b2 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1 with b2 Replacing label b1_from_b2 with b2 +Replacing label b1_from_b3 with b2 Replacing label breturn_from_b1 with breturn Removing instruction b1_from_bbegin: Removing instruction bend_from_b1: Removing instruction b1_from_main: Removing instruction b1_from_b2: +Removing instruction b1_from_b3: Removing instruction b1: Removing instruction breturn_from_b1: Removing instruction breturn_from_b2: @@ -493,19 +491,12 @@ Removing instruction bend: Removing instruction b3: Removing instruction b2: Succesful ASM optimization Pass5UnusedLabelElimination -Skipping double jump to b2 in jmp b1_from_b3 Skipping double jump to $ea81 in jmp breturn Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b3 to b1 -Succesful ASM optimization Pass5RelabelLongLabels Adding RTS to root block Succesful ASM optimization Pass5AddMainRts -Removing instruction jmp b2 -Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda col Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction b1: -Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -521,7 +512,7 @@ FINAL SYMBOL TABLE (byte) col#0 col zp ZP_BYTE:2 1.9999999999999998 (byte) col#1 col zp ZP_BYTE:2 22.0 (byte) col#12 col zp ZP_BYTE:2 40.0 -(byte) col#14 col zp ZP_BYTE:2 114.0 +(byte) col#14 col zp ZP_BYTE:2 158.0 (byte) col#3 col zp ZP_BYTE:2 4.0 (byte) col#4 col zp ZP_BYTE:2 4.0 interrupt(KERNEL_MIN)(void()) irq() @@ -571,9 +562,8 @@ main: { sta KERNEL_IRQ lda #>irq sta KERNEL_IRQ+1 - // [5] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1] - // [5] phi (byte) col#14 = (byte) col#0 [phi:main/main::@3->main::@1#0] -- register_copy - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [5] phi from main main::@2 main::@3 to main::@1 [phi:main/main::@2/main::@3->main::@1] + // [5] phi (byte) col#14 = (byte) col#0 [phi:main/main::@2/main::@3->main::@1#0] -- register_copy // main::@1 // main::@2 b2: diff --git a/src/test/ref/test-interrupt-volatile-write.sym b/src/test/ref/test-interrupt-volatile-write.sym index 8e3812db9..5117b0f4a 100644 --- a/src/test/ref/test-interrupt-volatile-write.sym +++ b/src/test/ref/test-interrupt-volatile-write.sym @@ -9,7 +9,7 @@ (byte) col#0 col zp ZP_BYTE:2 1.9999999999999998 (byte) col#1 col zp ZP_BYTE:2 22.0 (byte) col#12 col zp ZP_BYTE:2 40.0 -(byte) col#14 col zp ZP_BYTE:2 114.0 +(byte) col#14 col zp ZP_BYTE:2 158.0 (byte) col#3 col zp ZP_BYTE:2 4.0 (byte) col#4 col zp ZP_BYTE:2 4.0 interrupt(KERNEL_MIN)(void()) irq() diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index 58dd58c35..6daabf69e 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -922,11 +922,6 @@ Alias (byte) main::row#3 = (byte) main::row#5 Alias (byte) main::ch#2 = (byte) main::ch#3 Alias (byte*) main::screen#11 = (byte*) main::screen#12 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) main::screen#10 -Self Phi Eliminated (byte) main::row#3 -Self Phi Eliminated (byte*) main::screen#11 -Self Phi Eliminated (byte*) main::screen#8 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) keyboard_key_pressed::key#1 (byte) keyboard_key_pressed::key#0 Identical Phi Values (byte) keyboard_get_keycode::ch#1 (byte) keyboard_get_keycode::ch#0 Identical Phi Values (byte*) main::screen#10 (byte*) main::screen#13 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 3ada26033..fc7f29964 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -801,11 +801,6 @@ Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#61 (byte*) print_ Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#8 Alias (byte*) print_char_cursor#32 = (byte*) print_char_cursor#63 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#33 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/test-multiply-16bit.log b/src/test/ref/test-multiply-16bit.log index 61f3e257f..c5617e900 100644 --- a/src/test/ref/test-multiply-16bit.log +++ b/src/test/ref/test-multiply-16bit.log @@ -3202,23 +3202,6 @@ Alias (byte) mul16s_compare::i#10 = (byte) mul16s_compare::i#5 (byte) mul16s_com Alias (byte*) print_char_cursor#150 = (byte*) print_char_cursor#168 (byte*) print_char_cursor#174 Alias (byte*) print_line_cursor#50 = (byte*) print_line_cursor#67 (byte*) print_line_cursor#75 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#69 -Self Phi Eliminated (word) muls16u::b#1 -Self Phi Eliminated (word) muls16u::a#2 -Self Phi Eliminated (signed word) muls16s::b#1 -Self Phi Eliminated (signed word) muls16s::a#3 -Self Phi Eliminated (signed word) muls16s::b#2 -Self Phi Eliminated (signed word) muls16s::a#4 -Self Phi Eliminated (byte) mul16u_compare::i#10 -Self Phi Eliminated (byte*) print_char_cursor#146 -Self Phi Eliminated (byte*) print_line_cursor#46 -Self Phi Eliminated (byte) mul16s_compare::i#10 -Self Phi Eliminated (byte*) print_char_cursor#150 -Self Phi Eliminated (byte*) print_line_cursor#50 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -3334,8 +3317,10 @@ Identical Phi Values (byte*) print_char_cursor#134 (byte*) print_char_cursor#132 Identical Phi Values (byte*) print_char_cursor#136 (byte*) print_char_cursor#22 Identical Phi Values (byte*) print_char_cursor#139 (byte*) print_char_cursor#132 Identical Phi Values (byte*) print_char_cursor#141 (byte*) print_char_cursor#22 +Identical Phi Values (byte*) print_line_cursor#90 (byte*) print_line_cursor#0 Identical Phi Values (byte*) print_char_cursor#32 (byte*) print_line_cursor#1 Identical Phi Values (byte*) print_line_cursor#10 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_line_cursor#92 (byte*) print_line_cursor#10 Identical Phi Values (byte*) print_char_cursor#115 (byte*) print_line_cursor#1 Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#1 Successful SSA optimization Pass2IdenticalPhiElimination @@ -3467,12 +3452,6 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) print_line_cursor#90 -Self Phi Eliminated (byte*) print_line_cursor#92 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) print_line_cursor#90 (const byte*) print_line_cursor#0 -Identical Phi Values (byte*) print_line_cursor#92 (byte*) print_line_cursor#1 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [94] (byte*) mulf_init::sqr1_hi#0 ← (const byte[$200]) mulf_sqr1_hi#0 + (byte) 1 Constant right-side identified [95] (byte*) mulf_init::sqr1_lo#0 ← (const byte[$200]) mulf_sqr1_lo#0 + (byte) 1 Constant right-side identified [108] (byte*~) mulf_init::$13 ← (const byte[$200]) mulf_sqr1_lo#0 + (word) $200 diff --git a/src/test/ref/test-multiply-8bit.log b/src/test/ref/test-multiply-8bit.log index 239a963ab..5394d940d 100644 --- a/src/test/ref/test-multiply-8bit.log +++ b/src/test/ref/test-multiply-8bit.log @@ -3285,25 +3285,6 @@ Alias (signed word) mul8s_compare::mf#0 = (signed word) mul8s_compare::mf#4 (sig Alias (byte*) print_char_cursor#151 = (byte*) print_char_cursor#171 (byte*) print_char_cursor#177 Alias (byte*) print_line_cursor#102 = (byte*) print_line_cursor#74 (byte*) print_line_cursor#53 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#70 -Self Phi Eliminated (byte) muls8u::b#1 -Self Phi Eliminated (byte) muls8u::a#2 -Self Phi Eliminated (signed byte) muls8s::b#1 -Self Phi Eliminated (signed byte) muls8s::a#3 -Self Phi Eliminated (signed byte) muls8s::b#2 -Self Phi Eliminated (signed byte) muls8s::a#4 -Self Phi Eliminated (byte*) print_char_cursor#146 -Self Phi Eliminated (byte*) print_line_cursor#48 -Self Phi Eliminated (byte) mul8u_compare::a#10 -Self Phi Eliminated (byte*) print_char_cursor#148 -Self Phi Eliminated (byte*) print_line_cursor#100 -Self Phi Eliminated (signed byte) mul8s_compare::a#10 -Self Phi Eliminated (byte*) print_char_cursor#151 -Self Phi Eliminated (byte*) print_line_cursor#102 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 @@ -3427,8 +3408,12 @@ Identical Phi Values (byte*) print_char_cursor#136 (byte*) print_char_cursor#134 Identical Phi Values (byte*) print_char_cursor#138 (byte*) print_char_cursor#19 Identical Phi Values (byte*) print_char_cursor#139 (byte*) print_char_cursor#134 Identical Phi Values (byte*) print_char_cursor#141 (byte*) print_char_cursor#19 +Identical Phi Values (byte*) print_char_cursor#186 (byte*) print_char_cursor#32 +Identical Phi Values (byte*) print_line_cursor#104 (byte*) print_line_cursor#10 Identical Phi Values (byte*) print_char_cursor#102 (byte*) print_line_cursor#1 Identical Phi Values (byte*) print_line_cursor#13 (byte*) print_line_cursor#1 +Identical Phi Values (byte*) print_char_cursor#187 (byte*) print_char_cursor#102 +Identical Phi Values (byte*) print_line_cursor#106 (byte*) print_line_cursor#13 Identical Phi Values (byte*) print_char_cursor#118 (byte*) print_line_cursor#1 Identical Phi Values (byte*) print_line_cursor#18 (byte*) print_line_cursor#1 Successful SSA optimization Pass2IdenticalPhiElimination @@ -3561,16 +3546,6 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte*) print_char_cursor#186 -Self Phi Eliminated (byte*) print_line_cursor#104 -Self Phi Eliminated (byte*) print_char_cursor#187 -Self Phi Eliminated (byte*) print_line_cursor#106 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) print_char_cursor#186 (byte*) print_char_cursor#32 -Identical Phi Values (byte*) print_line_cursor#104 (byte*) print_line_cursor#10 -Identical Phi Values (byte*) print_char_cursor#187 (byte*) print_line_cursor#1 -Identical Phi Values (byte*) print_line_cursor#106 (byte*) print_line_cursor#1 -Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [88] (byte*) mulf_init::sqr1_hi#0 ← (const byte[$200]) mulf_sqr1_hi#0 + (byte) 1 Constant right-side identified [89] (byte*) mulf_init::sqr1_lo#0 ← (const byte[$200]) mulf_sqr1_lo#0 + (byte) 1 Constant right-side identified [102] (byte*~) mulf_init::$13 ← (const byte[$200]) mulf_sqr1_lo#0 + (word) $200 diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index 4cc81af2e..ae6891da6 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -262,10 +262,6 @@ Alias (byte*) scrollup2::line1#1 = (byte*) scrollup2::line1#4 Alias (word) scrollup3::l2#0 = (word) scrollup3::line#2 Alias (word) scrollup3::line#3 = (word) scrollup3::line#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) scrollup1::line#2 -Self Phi Eliminated (byte) scrollup2::l#2 -Self Phi Eliminated (word) scrollup3::line#3 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) scrollup1::line#2 (word) scrollup1::line#4 Identical Phi Values (byte) scrollup2::l#2 (byte) scrollup2::l#4 Identical Phi Values (word) scrollup3::line#3 (word) scrollup3::l2#0 diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index 5289775cf..1da21865e 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -648,11 +648,6 @@ Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#43 (byte*) print_ Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#8 Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#45 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) memset::c#1 -Self Phi Eliminated (byte*) memset::end#1 -Self Phi Eliminated (void*) memset::str#4 -Self Phi Eliminated (byte*) print_char_cursor#24 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#2 (byte) memset::c#0 diff --git a/src/test/ref/test-word-size-arrays.log b/src/test/ref/test-word-size-arrays.log index 17aee7869..6e337e3a6 100644 --- a/src/test/ref/test-word-size-arrays.log +++ b/src/test/ref/test-word-size-arrays.log @@ -128,9 +128,6 @@ Inferred type updated to word in (unumber~) main::$2 ← (word~) main::$1 + (byt Alias (word) main::line#3 = (word) main::line#4 Alias (word) main::line#2 = (word) main::line#7 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (word) main::line#3 -Self Phi Eliminated (word) main::line#5 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (word) main::line#3 (word) main::line#6 Identical Phi Values (word) main::line#5 (word) main::line#2 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/tetris-npe.cfg b/src/test/ref/tetris-npe.cfg index 571777991..5ccc63282 100644 --- a/src/test/ref/tetris-npe.cfg +++ b/src/test/ref/tetris-npe.cfg @@ -11,7 +11,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@3 main::@4 - [5] (byte) ypos#2 ← phi( main/(byte) 0 main::@4/(byte) ypos#1 ) + [5] (byte) ypos#2 ← phi( main/(byte) 0 main::@4/(byte) ypos#1 main::@3/(byte) ypos#2 ) [5] (byte) counter#3 ← phi( main/(const byte) RATE#0 main::@4/(const byte) RATE#0 main::@3/(byte) counter#1 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 diff --git a/src/test/ref/tetris-npe.log b/src/test/ref/tetris-npe.log index a849f50a7..7800f2ea7 100644 --- a/src/test/ref/tetris-npe.log +++ b/src/test/ref/tetris-npe.log @@ -149,9 +149,6 @@ Alias (byte) ypos#0 = (byte) ypos#9 Alias (byte) counter#4 = (byte) counter#7 Alias (byte) ypos#3 = (byte) ypos#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) counter#5 -Self Phi Eliminated (byte) ypos#11 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) counter#11 (byte) RATE#0 Identical Phi Values (byte) ypos#10 (byte) ypos#0 Identical Phi Values (byte) counter#5 (byte) counter#3 @@ -173,8 +170,6 @@ if() condition always true - replacing block destination [7] if(true) goto main: Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Self Phi Eliminated (byte) ypos#2 -Successful SSA optimization Pass2SelfPhiElimination Inlining constant with var siblings (const byte) ypos#0 Inlining constant with var siblings (const byte) counter#2 Constant inlined ypos#0 = (byte) 0 @@ -192,6 +187,7 @@ Calls in [] to main:2 Created 2 initial phi equivalence classes Coalesced [12] ypos#12 ← ypos#1 Coalesced [13] counter#12 ← counter#1 +Coalesced (already) [14] ypos#13 ← ypos#2 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) main::@15 @@ -217,7 +213,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@3 main::@4 - [5] (byte) ypos#2 ← phi( main/(byte) 0 main::@4/(byte) ypos#1 ) + [5] (byte) ypos#2 ← phi( main/(byte) 0 main::@4/(byte) ypos#1 main::@3/(byte) ypos#2 ) [5] (byte) counter#3 ← phi( main/(const byte) RATE#0 main::@4/(const byte) RATE#0 main::@3/(byte) counter#1 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 @@ -243,7 +239,7 @@ VARIABLE REGISTER WEIGHTS (void()) main() (byte) ypos (byte) ypos#1 16.5 -(byte) ypos#2 5.5 +(byte) ypos#2 56.0 Initial phi equivalence classes [ counter#3 counter#1 ] @@ -296,7 +292,8 @@ main: { jmp b1 // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] b1_from_b3: - // [5] phi (byte) counter#3 = (byte) counter#1 [phi:main::@3->main::@1#0] -- register_copy + // [5] phi (byte) ypos#2 = (byte) ypos#2 [phi:main::@3->main::@1#0] -- register_copy + // [5] phi (byte) counter#3 = (byte) counter#1 [phi:main::@3->main::@1#1] -- register_copy jmp b1 // main::@1 b1: @@ -343,7 +340,7 @@ Potential registers zp ZP_BYTE:2 [ counter#3 counter#1 ] : zp ZP_BYTE:2 , reg by Potential registers zp ZP_BYTE:3 [ ypos#2 ypos#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 252.5: zp ZP_BYTE:2 [ counter#3 counter#1 ] 22: zp ZP_BYTE:3 [ ypos#2 ypos#1 ] +Uplift Scope [] 252.5: zp ZP_BYTE:2 [ counter#3 counter#1 ] 72.5: zp ZP_BYTE:3 [ ypos#2 ypos#1 ] Uplift Scope [main] Uplifting [] best 14052 combination reg byte y [ counter#3 counter#1 ] reg byte x [ ypos#2 ypos#1 ] @@ -387,7 +384,8 @@ main: { jmp b1 // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] b1_from_b3: - // [5] phi (byte) counter#3 = (byte) counter#1 [phi:main::@3->main::@1#0] -- register_copy + // [5] phi (byte) ypos#2 = (byte) ypos#2 [phi:main::@3->main::@1#0] -- register_copy + // [5] phi (byte) counter#3 = (byte) counter#1 [phi:main::@3->main::@1#1] -- register_copy jmp b1 // main::@1 b1: @@ -474,7 +472,7 @@ FINAL SYMBOL TABLE (label) main::@4 (byte) ypos (byte) ypos#1 reg byte x 16.5 -(byte) ypos#2 reg byte x 5.5 +(byte) ypos#2 reg byte x 56.0 reg byte y [ counter#3 counter#1 ] reg byte x [ ypos#2 ypos#1 ] @@ -508,7 +506,8 @@ main: { // [5] phi (byte) counter#3 = (const byte) RATE#0 [phi:main->main::@1#1] -- vbuyy=vbuc1 ldy #RATE // [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [5] phi (byte) counter#3 = (byte) counter#1 [phi:main::@3->main::@1#0] -- register_copy + // [5] phi (byte) ypos#2 = (byte) ypos#2 [phi:main::@3->main::@1#0] -- register_copy + // [5] phi (byte) counter#3 = (byte) counter#1 [phi:main::@3->main::@1#1] -- register_copy // main::@1 // main::@2 b2: diff --git a/src/test/ref/tetris-npe.sym b/src/test/ref/tetris-npe.sym index 74bde72be..e78a0ba81 100644 --- a/src/test/ref/tetris-npe.sym +++ b/src/test/ref/tetris-npe.sym @@ -17,7 +17,7 @@ (label) main::@4 (byte) ypos (byte) ypos#1 reg byte x 16.5 -(byte) ypos#2 reg byte x 5.5 +(byte) ypos#2 reg byte x 56.0 reg byte y [ counter#3 counter#1 ] reg byte x [ ypos#2 ypos#1 ] diff --git a/src/test/ref/textbox.log b/src/test/ref/textbox.log index 01391548c..522d1847c 100644 --- a/src/test/ref/textbox.log +++ b/src/test/ref/textbox.log @@ -1039,32 +1039,6 @@ Alias (byte) textbox::x2#11 = (byte) textbox::x2#15 Alias (byte) textbox::x1#10 = (byte) textbox::x1#15 Alias (byte) textbox::y2#13 = (byte) textbox::y2#16 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::x#3 -Self Phi Eliminated (byte*) textbox::text#13 -Self Phi Eliminated (byte) textbox::x#11 -Self Phi Eliminated (byte) textbox::x2#10 -Self Phi Eliminated (byte) textbox::x1#11 -Self Phi Eliminated (byte) textbox::i#10 -Self Phi Eliminated (byte) textbox::y#10 -Self Phi Eliminated (byte) textbox::y2#10 -Self Phi Eliminated (word) textbox::z#6 -Self Phi Eliminated (word) draw_window::z#3 -Self Phi Eliminated (word) draw_window::q#1 -Self Phi Eliminated (byte) draw_window::x2#1 -Self Phi Eliminated (byte) draw_window::x1#2 -Self Phi Eliminated (byte) draw_window::y1#2 -Self Phi Eliminated (byte) draw_window::y2#5 -Self Phi Eliminated (byte) draw_window::x1#3 -Self Phi Eliminated (byte) draw_window::x2#3 -Self Phi Eliminated (byte) draw_window::y2#2 -Self Phi Eliminated (word) draw_window::q#2 -Self Phi Eliminated (byte) draw_window::y1#3 -Self Phi Eliminated (word) draw_window::z#5 -Self Phi Eliminated (byte) draw_window::x2#5 -Self Phi Eliminated (byte) draw_window::y3#3 -Self Phi Eliminated (byte) draw_window::y2#4 -Self Phi Eliminated (byte) draw_window::x1#8 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::x#3 (byte) main::x#2 Identical Phi Values (byte*) textbox::text#13 (byte*) textbox::text#4 Identical Phi Values (byte) textbox::x#11 (byte) textbox::x#10 @@ -1100,18 +1074,26 @@ Identical Phi Values (byte) textbox::x2#11 (byte) textbox::x2#12 Identical Phi Values (byte*) textbox::text#10 (byte*) textbox::text#4 Identical Phi Values (byte) textbox::x1#10 (byte) textbox::x1#12 Identical Phi Values (byte) textbox::y2#13 (byte) textbox::y2#11 +Identical Phi Values (byte) draw_window::x1#5 (byte) draw_window::x1#0 +Identical Phi Values (byte) draw_window::x2#7 (byte) draw_window::x2#0 +Identical Phi Values (byte) draw_window::y2#8 (byte) draw_window::y2#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte*) textbox::text#4 (byte*) textbox::text#12 +Identical Phi Values (byte) textbox::x2#12 (byte) textbox::x2#4 +Identical Phi Values (byte) textbox::x1#12 (byte) textbox::x1#4 +Identical Phi Values (byte) textbox::y2#11 (byte) textbox::y2#4 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$7 [19] if((word) main::wait#1<(word) $88b8) goto main::@2 Simple Condition (bool~) main::$8 [23] if((byte) main::x#1<(byte) $f) goto main::@1 -Simple Condition (bool~) textbox::$10 [69] if(*((byte*) textbox::text#4 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@5 -Simple Condition (bool~) textbox::$25 [75] if((byte) textbox::x#1!=(byte) textbox::x2#12) goto textbox::@17 -Simple Condition (bool~) textbox::$22 [101] if((byte) textbox::y#1!=(byte) textbox::y2#11) goto textbox::@16 -Simple Condition (bool~) textbox::$30 [107] if(*((byte*) textbox::text#4 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@4 -Simple Condition (bool~) textbox::$28 [114] if((byte) textbox::y#2!=(byte) textbox::y2#11) goto textbox::@18 +Simple Condition (bool~) textbox::$10 [69] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@5 +Simple Condition (bool~) textbox::$25 [75] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@17 +Simple Condition (bool~) textbox::$22 [101] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@16 +Simple Condition (bool~) textbox::$30 [107] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@4 +Simple Condition (bool~) textbox::$28 [114] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@18 Simple Condition (bool~) draw_window::$15 [132] if((byte) draw_window::x#1<(byte) draw_window::x2#0) goto draw_window::@2 Simple Condition (bool~) draw_window::$20 [149] if((byte) draw_window::y#1<(byte) draw_window::y2#0) goto draw_window::@4 -Simple Condition (bool~) draw_window::$25 [175] if((byte) draw_window::x3#1<(byte) draw_window::x2#7) goto draw_window::@8 -Simple Condition (bool~) draw_window::$26 [179] if((byte) draw_window::y3#1<(byte) draw_window::y2#8) goto draw_window::@7 +Simple Condition (bool~) draw_window::$25 [175] if((byte) draw_window::x3#1<(byte) draw_window::x2#0) goto draw_window::@8 +Simple Condition (bool~) draw_window::$26 [179] if((byte) draw_window::y3#1<(byte) draw_window::y2#0) goto draw_window::@7 Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting ! if()-condition to reversed if() [61] (bool~) textbox::$7 ← ! (bool~) textbox::$6 Successful SSA optimization Pass2ConditionalAndOrRewriting @@ -1154,7 +1136,7 @@ Constant (const byte*) textbox::text#3 = text#0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [42] if(true) goto main::@5 Successful SSA optimization Pass2ConstantIfs -De-inlining pointer[w] to *(pointer+w) [66] *((const byte*) screen#0 + (word~) textbox::$8) ← *((byte*) textbox::text#4 + (byte) textbox::i#2) +De-inlining pointer[w] to *(pointer+w) [66] *((const byte*) screen#0 + (word~) textbox::$8) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) De-inlining pointer[w] to *(pointer+w) [127] *((const byte*) screen#0 + (word~) draw_window::$13) ← (byte) $43 De-inlining pointer[w] to *(pointer+w) [129] *((const byte*) screen#0 + (word~) draw_window::$14) ← (byte) $43 De-inlining pointer[w] to *(pointer+w) [135] *((const byte*) screen#0 + (word~) draw_window::$2) ← (byte) $55 @@ -1167,22 +1149,6 @@ De-inlining pointer[w] to *(pointer+w) [172] *((const byte*) screen#0 + (word~ Successful SSA optimization Pass2DeInlineWordDerefIdx Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Self Phi Eliminated (byte*) textbox::text#4 -Self Phi Eliminated (byte) textbox::x2#12 -Self Phi Eliminated (byte) textbox::x1#12 -Self Phi Eliminated (byte) textbox::y2#11 -Self Phi Eliminated (byte) draw_window::x1#5 -Self Phi Eliminated (byte) draw_window::x2#7 -Self Phi Eliminated (byte) draw_window::y2#8 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte*) textbox::text#4 (byte*) textbox::text#12 -Identical Phi Values (byte) textbox::x2#12 (byte) textbox::x2#4 -Identical Phi Values (byte) textbox::x1#12 (byte) textbox::x1#4 -Identical Phi Values (byte) textbox::y2#11 (byte) textbox::y2#4 -Identical Phi Values (byte) draw_window::x1#5 (byte) draw_window::x1#0 -Identical Phi Values (byte) draw_window::x2#7 (byte) draw_window::x2#0 -Identical Phi Values (byte) draw_window::y2#8 (byte) draw_window::y2#0 -Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) textbox::$4 [26] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return Simple Condition (bool~) textbox::$12 [41] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) $20) goto textbox::@26 Simple Condition (bool~) textbox::$16 [48] if((byte~) textbox::$15>=(byte) textbox::x2#4) goto textbox::@27 diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index 849c02b13..bde08170a 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -481,8 +481,6 @@ Alias (byte) action_count#1 = (byte) action_count#14 Alias (byte*) print_char_cursor#33 = (byte*) print_char_cursor#37 Alias (byte*) print_line_cursor#27 = (byte*) print_line_cursor#31 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print_char_cursor#19 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) print_char_cursor#1 (byte*) print_char_cursor#17 Identical Phi Values (byte*) print_line_cursor#1 (byte*) print_line_cursor#14 Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_line_cursor#14 diff --git a/src/test/ref/type-signed.log b/src/test/ref/type-signed.log index 15d71f28e..530c4657c 100644 --- a/src/test/ref/type-signed.log +++ b/src/test/ref/type-signed.log @@ -506,8 +506,6 @@ Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#38 (byte*) print_ Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#40 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte*) print_char_cursor#21 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#13 Identical Phi Values (byte*) print_char_cursor#41 (byte*) print_char_cursor#17 Identical Phi Values (byte*) print_char_cursor#21 (byte*) print_char_cursor#41 diff --git a/src/test/ref/unroll-screenfill-for-double.log b/src/test/ref/unroll-screenfill-for-double.log index 23d04fb2f..791e1aa1e 100644 --- a/src/test/ref/unroll-screenfill-for-double.log +++ b/src/test/ref/unroll-screenfill-for-double.log @@ -78,8 +78,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::line#2 * (byte) $28 Alias (byte) main::x#2 = (byte) main::x#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::x#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::x#2 (byte) main::x#4 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$2 [10] unroll if((byte) main::line#1!=rangelast(0,$a)) goto main::@2 diff --git a/src/test/ref/unroll-screenfill-for.log b/src/test/ref/unroll-screenfill-for.log index f5ce18bb2..43eedd8a6 100644 --- a/src/test/ref/unroll-screenfill-for.log +++ b/src/test/ref/unroll-screenfill-for.log @@ -78,8 +78,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::line#2 * (byte) $28 Alias (byte) main::x#2 = (byte) main::x#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::x#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::x#2 (byte) main::x#4 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$2 [10] unroll if((byte) main::line#1!=rangelast(0,$18)) goto main::@2 diff --git a/src/test/ref/unroll-screenfill-while.log b/src/test/ref/unroll-screenfill-while.log index 143b39d57..69fa706e2 100644 --- a/src/test/ref/unroll-screenfill-while.log +++ b/src/test/ref/unroll-screenfill-while.log @@ -96,8 +96,6 @@ Inferred type updated to byte in (unumber~) main::$1 ← (byte) main::line#3 * ( Alias (byte) main::line#2 = (byte) main::line#3 Alias (byte) main::x#2 = (byte) main::x#4 (byte) main::x#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::x#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::x#2 (byte) main::x#5 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$0 [6] unroll if((byte) main::line#2!=(byte) $19) goto main::@3 diff --git a/src/test/ref/unused-vars.log b/src/test/ref/unused-vars.log index dff29aa9b..c78f1b977 100644 --- a/src/test/ref/unused-vars.log +++ b/src/test/ref/unused-vars.log @@ -130,8 +130,6 @@ Alias (byte) b#11 = (byte) b#4 (byte) b#5 Alias (byte) b#0 = (byte) b#14 Alias (byte) b#12 = (byte) b#6 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) b#3 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) b#13 (byte) b#0 Identical Phi Values (byte) b#1 (byte) b#11 Identical Phi Values (byte) b#3 (byte) b#2 diff --git a/src/test/ref/var-register.log b/src/test/ref/var-register.log index 6a0386dba..e8b64c9a1 100644 --- a/src/test/ref/var-register.log +++ b/src/test/ref/var-register.log @@ -127,14 +127,13 @@ Alias (byte) main::a#2 = (byte) main::a#3 Alias (byte) main::x#2 = (byte) main::x#5 (byte) main::x#6 (byte) main::x#3 Alias (byte) main::y#2 = (byte) main::y#5 (byte) main::y#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::x#2 -Self Phi Eliminated (byte) main::y#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::x#2 (byte) main::x#4 Identical Phi Values (byte) main::y#2 (byte) main::y#4 Identical Phi Values (byte) print::val#1 (byte) print::val#0 Identical Phi Values (byte) print::idx#1 (byte) print::idx#0 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::x#4 (byte) main::x#7 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$2 [14] if((byte) main::a#1!=rangelast(0,$64)) goto main::@3 Simple Condition (bool~) main::$3 [18] if((byte) main::y#1!=rangelast(0,$64)) goto main::@2 Simple Condition (bool~) main::$4 [22] if((byte) main::x#1!=rangelast(0,$64)) goto main::@1 @@ -148,7 +147,7 @@ Resolved ranged next value [12] main::a#1 ← ++ main::a#2 to ++ Resolved ranged comparison value [14] if(main::a#1!=rangelast(0,$64)) goto main::@3 to (number) $65 Resolved ranged next value [16] main::y#1 ← ++ main::y#4 to ++ Resolved ranged comparison value [18] if(main::y#1!=rangelast(0,$64)) goto main::@2 to (number) $65 -Resolved ranged next value [20] main::x#1 ← ++ main::x#4 to ++ +Resolved ranged next value [20] main::x#1 ← ++ main::x#7 to ++ Resolved ranged comparison value [22] if(main::x#1!=rangelast(0,$64)) goto main::@1 to (number) $65 Adding number conversion cast (unumber) $65 in if((byte) main::a#1!=(number) $65) goto main::@3 Adding number conversion cast (unumber) $65 in if((byte) main::y#1!=(number) $65) goto main::@2 @@ -162,10 +161,6 @@ Finalized unsigned number type (byte) $65 Finalized unsigned number type (byte) $65 Finalized unsigned number type (byte) $65 Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) main::x#4 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) main::x#4 (byte) main::x#7 -Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::y#0 Inlining constant with var siblings (const byte) main::a#0 diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index c7b81bbcb..3843aff97 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -803,11 +803,6 @@ Alias (byte) findcol::mindiff#10 = (byte) findcol::mindiff#6 (byte) findcol::min Alias (byte) findcol::i#10 = (byte) findcol::i#12 (byte) findcol::i#6 (byte) findcol::i#4 (byte) findcol::i#3 Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#11 (byte) findcol::mincol#5 (byte) findcol::mincol#4 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) render::y#2 -Self Phi Eliminated (byte*) render::colline#2 -Self Phi Eliminated (byte) findcol::x#1 -Self Phi Eliminated (byte) findcol::y#1 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) render::y#2 (byte) render::y#4 Identical Phi Values (byte*) render::colline#2 (byte*) render::colline#5 Identical Phi Values (byte) findcol::x#5 (byte) findcol::x#0 diff --git a/src/test/ref/zpptr.log b/src/test/ref/zpptr.log index 9b6716ffc..ea689ada0 100644 --- a/src/test/ref/zpptr.log +++ b/src/test/ref/zpptr.log @@ -110,12 +110,11 @@ Alias (byte*) main::zpptr2#1 = (byte*~) main::$2 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::j#2 = (byte) main::j#5 (byte) main::j#3 Successful SSA optimization Pass2AliasElimination -Self Phi Eliminated (byte) main::i#2 -Self Phi Eliminated (byte) main::j#2 -Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) main::i#2 (byte) main::i#4 Identical Phi Values (byte) main::j#2 (byte) main::j#4 Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) main::j#4 (byte) main::j#6 +Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$3 [16] if((byte) main::k#1!=rangelast(0,$a)) goto main::@3 Simple Condition (bool~) main::$4 [20] if((byte) main::i#1!=rangelast(0,$a)) goto main::@2 Simple Condition (bool~) main::$5 [24] if((byte) main::j#1!=rangelast(0,$a)) goto main::@1 @@ -129,7 +128,7 @@ Resolved ranged next value [14] main::k#1 ← ++ main::k#2 to ++ Resolved ranged comparison value [16] if(main::k#1!=rangelast(0,$a)) goto main::@3 to (number) $b Resolved ranged next value [18] main::i#1 ← ++ main::i#4 to ++ Resolved ranged comparison value [20] if(main::i#1!=rangelast(0,$a)) goto main::@2 to (number) $b -Resolved ranged next value [22] main::j#1 ← ++ main::j#4 to ++ +Resolved ranged next value [22] main::j#1 ← ++ main::j#6 to ++ Resolved ranged comparison value [24] if(main::j#1!=rangelast(0,$a)) goto main::@1 to (number) $b Adding number conversion cast (unumber) $b in if((byte) main::k#1!=(number) $b) goto main::@3 Adding number conversion cast (unumber) $b in if((byte) main::i#1!=(number) $b) goto main::@2 @@ -143,10 +142,6 @@ Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $b Successful SSA optimization PassNFinalizeNumberTypeConversions -Self Phi Eliminated (byte) main::j#4 -Successful SSA optimization Pass2SelfPhiElimination -Identical Phi Values (byte) main::j#4 (byte) main::j#6 -Successful SSA optimization Pass2IdenticalPhiElimination Inlining constant with var siblings (const byte) main::j#0 Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::k#0